diff options
author | John McCrae <john.mccrae@progress.com> | 2022-04-28 08:21:32 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-28 20:51:32 +0530 |
commit | 0fa9428ed1c35a07d0093292e7307d6263597604 (patch) | |
tree | a4b4bf0c2e3d09069ab8dc32c23061503d977adf | |
parent | 147e56d7fac43bcc33b5ad4435f6b475ea00407b (diff) | |
download | chef-0fa9428ed1c35a07d0093292e7307d6263597604.tar.gz |
Updated EOL for Chef 16 (#12821)
* Updated EOL for Chef 16
Signed-off-by: John McCrae <john.mccrae@progress.com>
* Chef-16 EOL updates:
1. Fix issue test kitchen for opensuse-leap-15 kitchen create failure
2. Fix powershell_out_spec undefined method shell_out error on windows ruby 2.7 (trial)
3. Updates for chef-16 EOL: Trial fix for macos git package install error
Signed-off-by: Neha Pansare <neha.pansare@progress.com>
* Chef-16 EOL updates:
1. Revert locked versions of mixlib-shellout and rspec-mocks to ones from bundle update
2. Add trial fix for macos kitchen failure about git recipe
3.Correct EOL date and year to Nov 30 2022, correct unit spec
4. Fix powershell_out_spec errors on verify pipeline for windows by passing empty hash
5. Chef-16 EOL updates: Remove git installation recipe from mac since installation is not working on mac after many trials
6.Revert back to mac-10.15 vm for kitchen tests
Signed-off-by: Neha Pansare <neha.pansare@progress.com>
Co-authored-by: Neha Pansare <neha.pansare@progress.com>
-rw-r--r-- | .expeditor/verify.pipeline.yml | 45 | ||||
-rw-r--r-- | .github/workflows/func_spec.yml | 2 | ||||
-rw-r--r-- | .github/workflows/kitchen.yml | 2 | ||||
-rw-r--r-- | Gemfile.lock | 28 | ||||
-rw-r--r-- | cspell.json | 2 | ||||
-rw-r--r-- | kitchen-tests/cookbooks/end_to_end/recipes/macos.rb | 2 | ||||
-rw-r--r-- | kitchen-tests/kitchen.yml | 2 | ||||
-rw-r--r-- | lib/chef/client.rb | 6 | ||||
-rw-r--r-- | omnibus/Gemfile.lock | 96 | ||||
-rw-r--r-- | spec/unit/client_spec.rb | 8 | ||||
-rw-r--r-- | spec/unit/mixin/powershell_out_spec.rb | 4 | ||||
-rw-r--r-- | spec/unit/resource_spec.rb | 4 |
12 files changed, 81 insertions, 120 deletions
diff --git a/.expeditor/verify.pipeline.yml b/.expeditor/verify.pipeline.yml index 36c7fe54da..cdec7f110b 100644 --- a/.expeditor/verify.pipeline.yml +++ b/.expeditor/verify.pipeline.yml @@ -254,51 +254,6 @@ steps: shell: ["powershell", "-Command"] ######################################################################### -# Tests Ruby 2.6 -######################################################################### - -- label: "Integration :ruby: 2.6" - commands: - - gem install bundler -v 2.1.4 # match Ruby 2.7 bundler - - /workdir/.expeditor/scripts/bk_container_prep.sh - - bundle config set --local without omnibus_package - - bundle install --jobs=3 --retry=3 --path=vendor/bundle - - bundle exec rake spec:integration - expeditor: - executor: - docker: - image: rubydistros/ubuntu-18.04:2.6 - privileged: true - -- label: "Functional :ruby: 2.6" - commands: - - gem install bundler -v 2.1.4 # match Ruby 2.7 bundler - - /workdir/.expeditor/scripts/bk_container_prep.sh - - apt-get update -y - - apt-get install -y cron locales net-tools # needed for functional tests to pass - - bundle config set --local without omnibus_package - - bundle install --jobs=3 --retry=3 --path=vendor/bundle - - bundle exec rake spec:functional - expeditor: - executor: - docker: - image: rubydistros/ubuntu-18.04:2.6 - privileged: true - -- label: "Unit :ruby: 2.6" - commands: - - gem install bundler -v 2.1.4 # match Ruby 2.7 bundler - - /workdir/.expeditor/scripts/bk_container_prep.sh - - bundle config set --local without omnibus_package - - bundle install --jobs=3 --retry=3 --path=vendor/bundle - - bundle exec rake spec:unit - - bundle exec rake component_specs - expeditor: - executor: - docker: - image: rubydistros/ubuntu-18.04:2.6 - -######################################################################### # HABITAT TESTING ######################################################################### diff --git a/.github/workflows/func_spec.yml b/.github/workflows/func_spec.yml index b01314345a..67c1ad07e7 100644 --- a/.github/workflows/func_spec.yml +++ b/.github/workflows/func_spec.yml @@ -12,7 +12,7 @@ jobs: strategy: fail-fast: false matrix: - os: [windows-2019, windows-2016] + os: [windows-2022, windows-2019] # Due to https://github.com/actions/runner/issues/849, we have to use quotes for '3.0' ruby: [2.7, '3.0'] runs-on: ${{ matrix.os }} diff --git a/.github/workflows/kitchen.yml b/.github/workflows/kitchen.yml index 495d996143..f58f570969 100644 --- a/.github/workflows/kitchen.yml +++ b/.github/workflows/kitchen.yml @@ -12,7 +12,7 @@ jobs: strategy: fail-fast: false matrix: - os: [windows-2019, windows-2016] + os: [windows-2022, windows-2019] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2 diff --git a/Gemfile.lock b/Gemfile.lock index 37bdcd7fac..57c7614e85 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -147,7 +147,7 @@ GEM chef-telemetry (1.1.1) chef-config concurrent-ruby (~> 1.0) - chef-vault (4.1.5) + chef-vault (4.1.10) chef-zero (15.0.11) ffi-yajl (~> 2.2) hashie (>= 2.0, < 5.0) @@ -206,7 +206,7 @@ GEM highline (2.0.3) httpclient (2.8.3) iniparse (1.5.0) - inspec-core (4.56.19) + inspec-core (4.56.20) addressable (~> 2.4) chef-telemetry (~> 1.0, >= 1.0.8) faraday (>= 0.9.0, < 1.5) @@ -229,8 +229,8 @@ GEM train-core (~> 3.0) tty-prompt (~> 0.17) tty-table (~> 0.10) - inspec-core-bin (4.56.19) - inspec-core (= 4.56.19) + inspec-core-bin (4.56.20) + inspec-core (= 4.56.20) ipaddress (0.8.3) iso8601 (0.13.0) json (2.6.1) @@ -254,9 +254,9 @@ GEM mixlib-config (3.0.9) tomlrb mixlib-log (3.0.9) - mixlib-shellout (3.2.5) + mixlib-shellout (3.2.7) chef-utils - mixlib-shellout (3.2.5-universal-mingw32) + mixlib-shellout (3.2.7-universal-mingw32) chef-utils ffi-win32-extensions (~> 1.0.3) win32-process (~> 0.9) @@ -275,7 +275,7 @@ GEM net-ssh-gateway (>= 1.2.0) nori (2.6.0) parallel (1.22.1) - parser (3.1.1.0) + parser (3.1.2.0) ast (~> 2.4.1) parslet (1.8.2) pastel (0.8.0) @@ -291,12 +291,12 @@ GEM pry-stack_explorer (0.6.1) binding_of_caller (~> 1.0) pry (~> 0.13) - public_suffix (4.0.6) + public_suffix (4.0.7) rack (2.2.3) rainbow (3.1.1) rake (13.0.6) rb-readline (0.5.5) - regexp_parser (2.2.1) + regexp_parser (2.3.1) rexml (3.2.5) rspec (3.11.0) rspec-core (~> 3.11.0) @@ -310,7 +310,7 @@ GEM rspec-its (1.3.0) rspec-core (>= 3.0.0) rspec-expectations (>= 3.0.0) - rspec-mocks (3.11.0) + rspec-mocks (3.11.1) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.11.0) rspec-support (3.11.0) @@ -323,7 +323,7 @@ GEM rubocop-ast (>= 1.2.0, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 1.4.0, < 2.0) - rubocop-ast (1.16.0) + rubocop-ast (1.17.0) parser (>= 3.1.1.0) ruby-prof (1.2.0) ruby-progressbar (1.11.0) @@ -342,7 +342,7 @@ GEM syslog-logger (1.6.8) thor (1.2.1) tomlrb (1.3.0) - train-core (3.8.9) + train-core (3.9.2) addressable (~> 2.5) ffi (!= 1.13.0) json (>= 1.8, < 3.0) @@ -393,7 +393,7 @@ GEM ffi win32-mutex (0.4.3) win32-ipc (>= 0.6.0) - win32-process (0.9.0) + win32-process (0.10.0) ffi (>= 1.0.0) win32-service (2.3.2) ffi @@ -420,7 +420,7 @@ GEM rubyzip (~> 2.0) winrm (~> 2.0) wisper (2.0.1) - wmi-lite (1.0.5) + wmi-lite (1.0.7) PLATFORMS ruby diff --git a/cspell.json b/cspell.json index 7a5b51b510..cb2cf006ff 100644 --- a/cspell.json +++ b/cspell.json @@ -403,6 +403,7 @@ "getaddrinfo", "getbinaryfile", "getc", + "getent", "GETFD", "GETFL", "getgrgid", @@ -1285,6 +1286,7 @@ "testswapfile", "testswapfiledir", "texteditor", + "theplaintextpassword", "THRDS", "THREADID", "tilesize", diff --git a/kitchen-tests/cookbooks/end_to_end/recipes/macos.rb b/kitchen-tests/cookbooks/end_to_end/recipes/macos.rb index 1fb76adb5e..730af7305c 100644 --- a/kitchen-tests/cookbooks/end_to_end/recipes/macos.rb +++ b/kitchen-tests/cookbooks/end_to_end/recipes/macos.rb @@ -54,8 +54,6 @@ chef_client_launchd "Every 30 mins Infra Client run" do action :enable end -include_recipe "git" - # test various archive formats in the archive_file resource %w{tourism.tar.gz tourism.tar.xz tourism.zip}.each do |archive| cookbook_file File.join(Chef::Config[:file_cache_path], archive) do diff --git a/kitchen-tests/kitchen.yml b/kitchen-tests/kitchen.yml index e0674629e1..23fa9ad3f3 100644 --- a/kitchen-tests/kitchen.yml +++ b/kitchen-tests/kitchen.yml @@ -151,7 +151,7 @@ platforms: - name: opensuse-leap-15 driver: image: dokken/opensuse-leap-15 - pid_one_command: /bin/systemd + pid_one_command: /usr/lib/systemd/systemd intermediate_instructions: - RUN /usr/bin/zypper --non-interactive update - RUN /usr/bin/zypper --non-interactive install net-tools-deprecated # we need this for /etc/network/interfaces & ifconfig resource testing diff --git a/lib/chef/client.rb b/lib/chef/client.rb index 094b59fc35..6a3c999584 100644 --- a/lib/chef/client.rb +++ b/lib/chef/client.rb @@ -327,12 +327,12 @@ class Chef def warn_if_eol require_relative "version" - # We make a release every year so take the version you're on + 2006 and you get + # We make a release every year so take the version you're on + 2007 and you get # the year it goes EOL eol_year = 2006 + Gem::Version.new(Chef::VERSION).segments.first - if Time.now > Time.new(eol_year, 5, 01) - logger.warn("This release of #{ChefUtils::Dist::Infra::PRODUCT} became end of life (EOL) on May 1st #{eol_year}. Please update to a supported release to receive new features, bug fixes, and security updates.") + if Time.now > Time.new(eol_year, 11, 30) + logger.warn("This release of #{ChefUtils::Dist::Infra::PRODUCT} became end of life (EOL) on November 30th #{eol_year}. Please update to a supported release to receive new features, bug fixes, and security updates.") end end diff --git a/omnibus/Gemfile.lock b/omnibus/Gemfile.lock index 7b1dc4a9d7..2865bf6999 100644 --- a/omnibus/Gemfile.lock +++ b/omnibus/Gemfile.lock @@ -1,6 +1,6 @@ GIT remote: https://github.com/chef/omnibus-software.git - revision: 5947560ea75ff76243d39243ede62fa45f979895 + revision: 50d05bcfaa7fc5e7c00a87b149acaf9e5795ab1c branch: main specs: omnibus-software (4.0.0) @@ -8,10 +8,10 @@ GIT GIT remote: https://github.com/chef/omnibus.git - revision: 124d5960ab2d3ed15b321d12d8da5b475631e16b + revision: 27c37fc4a27533deda445bd0b44dcec1c674c329 branch: main specs: - omnibus (8.3.2) + omnibus (8.3.3) aws-sdk-s3 (~> 1) chef-cleanroom (~> 1.0) chef-utils (>= 15.4) @@ -33,23 +33,23 @@ GEM artifactory (3.0.15) awesome_print (1.9.2) aws-eventstream (1.2.0) - aws-partitions (1.563.0) - aws-sdk-core (3.128.0) + aws-partitions (1.579.0) + aws-sdk-core (3.130.2) aws-eventstream (~> 1, >= 1.0.2) aws-partitions (~> 1, >= 1.525.0) aws-sigv4 (~> 1.1) jmespath (~> 1.0) - aws-sdk-kms (1.55.0) + aws-sdk-kms (1.56.0) aws-sdk-core (~> 3, >= 3.127.0) aws-sigv4 (~> 1.1) aws-sdk-s3 (1.113.0) aws-sdk-core (~> 3, >= 3.127.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.4) - aws-sdk-secretsmanager (1.58.0) + aws-sdk-secretsmanager (1.60.0) aws-sdk-core (~> 3, >= 3.127.0) aws-sigv4 (~> 1.1) - aws-sigv4 (1.4.0) + aws-sigv4 (1.5.0) aws-eventstream (~> 1, >= 1.0.2) bcrypt_pbkdf (1.1.0) bcrypt_pbkdf (1.1.0-x64-mingw32) @@ -68,16 +68,16 @@ GEM solve (~> 4.0) thor (>= 0.20) builder (3.2.4) - chef (17.9.52) + chef (17.10.0) addressable aws-sdk-s3 (~> 1.91) aws-sdk-secretsmanager (~> 1.46) - chef-config (= 17.9.52) - chef-utils (= 17.9.52) + chef-config (= 17.10.0) + chef-utils (= 17.10.0) chef-vault chef-zero (>= 14.0.11) corefoundation (~> 0.3.4) - diff-lcs (>= 1.2.4, < 1.4.0) + diff-lcs (>= 1.2.4, < 1.6.0, != 1.4.0) erubis (~> 2.7) ffi (>= 1.5.0) ffi-libarchive (~> 1.0, >= 1.0.3) @@ -99,16 +99,17 @@ GEM train-winrm (>= 0.2.5) uuidtools (>= 2.1.5, < 3.0) vault (~> 0.16) - chef (17.9.52-universal-mingw32) + chef (17.10.0-universal-mingw32) addressable aws-sdk-s3 (~> 1.91) aws-sdk-secretsmanager (~> 1.46) - chef-config (= 17.9.52) - chef-utils (= 17.9.52) + chef-config (= 17.10.0) + chef-powershell (~> 1.0.12) + chef-utils (= 17.10.0) chef-vault chef-zero (>= 14.0.11) corefoundation (~> 0.3.4) - diff-lcs (>= 1.2.4, < 1.4.0) + diff-lcs (>= 1.2.4, < 1.6.0, != 1.4.0) erubis (~> 2.7) ffi (>= 1.5.0) ffi-libarchive (~> 1.0, >= 1.0.3) @@ -142,19 +143,22 @@ GEM win32-taskscheduler (~> 2.0) wmi-lite (~> 1.0) chef-cleanroom (1.0.4) - chef-config (17.9.52) + chef-config (17.10.0) addressable - chef-utils (= 17.9.52) + chef-utils (= 17.10.0) fuzzyurl mixlib-config (>= 2.2.12, < 4.0) mixlib-shellout (>= 2.0, < 4.0) tomlrb (~> 1.2) + chef-powershell (1.0.13) + ffi (~> 1.15) + ffi-yajl (~> 2.4) chef-telemetry (1.1.1) chef-config concurrent-ruby (~> 1.0) - chef-utils (17.9.52) + chef-utils (17.10.0) concurrent-ruby - chef-vault (4.1.5) + chef-vault (4.1.10) chef-zero (15.0.11) ffi-yajl (~> 2.2) hashie (>= 2.0, < 5.0) @@ -165,11 +169,11 @@ GEM citrus (3.0.2) cleanroom (1.0.0) coderay (1.1.3) - concurrent-ruby (1.1.9) + concurrent-ruby (1.1.10) contracts (0.16.1) corefoundation (0.3.13) ffi (>= 1.15.0) - diff-lcs (1.3) + diff-lcs (1.5.0) ed25519 (1.3.0) erubi (1.10.0) erubis (2.7.0) @@ -200,12 +204,13 @@ GEM fuzzyurl (0.9.0) gssapi (1.3.1) ffi (>= 1.0.1) - gyoku (1.3.1) + gyoku (1.4.0) builder (>= 2.1.2) + rexml (~> 3.0) hashie (4.1.0) httpclient (2.8.3) iniparse (1.5.0) - inspec-core (4.52.9) + inspec-core (4.56.20) addressable (~> 2.4) chef-telemetry (~> 1.0, >= 1.0.8) faraday (>= 0.9.0, < 1.5) @@ -218,7 +223,7 @@ GEM parallel (~> 1.9) parslet (>= 1.5, < 2.0) pry (~> 0.13) - rspec (>= 3.9, < 3.11) + rspec (>= 3.9, <= 3.11) rspec-its (~> 1.2) rubyzip (>= 1.2.2, < 3.0) semverse (~> 3.0) @@ -231,7 +236,7 @@ GEM iostruct (0.0.4) ipaddress (0.8.3) iso8601 (0.13.0) - jmespath (1.6.0) + jmespath (1.6.1) json (2.6.1) kitchen-vagrant (1.11.0) test-kitchen (>= 1.4, < 4) @@ -241,7 +246,7 @@ GEM tomlrb (>= 1.2, < 3.0) tty-box (~> 0.6) tty-prompt (~> 0.20) - license_scout (1.2.15) + license_scout (1.2.16) ffi-yajl (~> 2.2) mixlib-shellout (>= 2.2, < 4.0) toml-rb (>= 1, < 3) @@ -264,9 +269,9 @@ GEM mixlib-versioning thor mixlib-log (3.0.9) - mixlib-shellout (3.2.5) + mixlib-shellout (3.2.7) chef-utils - mixlib-shellout (3.2.5-universal-mingw32) + mixlib-shellout (3.2.7-universal-mingw32) chef-utils ffi-win32-extensions (~> 1.0.3) win32-process (~> 0.9) @@ -299,7 +304,7 @@ GEM plist (~> 3.1) train-core wmi-lite (~> 1.0) - parallel (1.21.0) + parallel (1.22.1) parslet (1.8.2) pastel (0.8.0) tty-color (~> 0.5) @@ -314,26 +319,27 @@ GEM pry (0.14.1) coderay (~> 1.1) method_source (~> 1.0) - public_suffix (4.0.6) + public_suffix (4.0.7) rack (2.2.3) rainbow (3.1.1) retryable (3.0.5) - rspec (3.10.0) - rspec-core (~> 3.10.0) - rspec-expectations (~> 3.10.0) - rspec-mocks (~> 3.10.0) - rspec-core (3.10.2) - rspec-support (~> 3.10.0) - rspec-expectations (3.10.2) + rexml (3.2.5) + rspec (3.11.0) + rspec-core (~> 3.11.0) + rspec-expectations (~> 3.11.0) + rspec-mocks (~> 3.11.0) + rspec-core (3.11.0) + rspec-support (~> 3.11.0) + rspec-expectations (3.11.0) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.10.0) + rspec-support (~> 3.11.0) rspec-its (1.3.0) rspec-core (>= 3.0.0) rspec-expectations (>= 3.0.0) - rspec-mocks (3.10.3) + rspec-mocks (3.11.1) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.10.0) - rspec-support (3.10.3) + rspec-support (~> 3.11.0) + rspec-support (3.11.0) ruby-progressbar (1.11.0) ruby2_keywords (0.0.5) rubyntlm (0.6.3) @@ -371,7 +377,7 @@ GEM toml-rb (2.1.2) citrus (~> 3.0, > 3.0) tomlrb (1.3.0) - train-core (3.8.7) + train-core (3.9.2) addressable (~> 2.5) ffi (!= 1.13.0) json (>= 1.8, < 3.0) @@ -420,7 +426,7 @@ GEM ffi win32-mutex (0.4.3) win32-ipc (>= 0.6.0) - win32-process (0.9.0) + win32-process (0.10.0) ffi (>= 1.0.0) win32-service (2.3.2) ffi @@ -447,7 +453,7 @@ GEM rubyzip (~> 2.0) winrm (~> 2.0) wisper (2.0.1) - wmi-lite (1.0.5) + wmi-lite (1.0.7) zhexdump (0.0.2) PLATFORMS diff --git a/spec/unit/client_spec.rb b/spec/unit/client_spec.rb index b6a321c8e8..47c4b1866e 100644 --- a/spec/unit/client_spec.rb +++ b/spec/unit/client_spec.rb @@ -310,14 +310,14 @@ describe Chef::Client do describe "eol release warning" do it "warns when running an EOL release" do - stub_const("Chef::VERSION", 15) - allow(Time).to receive(:now).and_return(Time.new(2021, 5, 1, 5)) - expect(logger).to receive(:warn).with(/This release of.*became end of life \(EOL\) on May 1st 2021/) + stub_const("Chef::VERSION", 16) + allow(Time).to receive(:now).and_return(Time.new(2022, 11, 30, 5)) + expect(logger).to receive(:warn).with("This release of #{ChefUtils::Dist::Infra::PRODUCT} became end of life (EOL) on November 30th 2022. Please update to a supported release to receive new features, bug fixes, and security updates.") client.warn_if_eol end it "does not warn when running an non-EOL release" do - stub_const("Chef::VERSION", 15) + stub_const("Chef::VERSION", 16) allow(Time).to receive(:now).and_return(Time.new(2021, 4, 31)) expect(logger).to_not receive(:warn).with(/became end of life/) client.warn_if_eol diff --git a/spec/unit/mixin/powershell_out_spec.rb b/spec/unit/mixin/powershell_out_spec.rb index 14a9483758..e4b78ea566 100644 --- a/spec/unit/mixin/powershell_out_spec.rb +++ b/spec/unit/mixin/powershell_out_spec.rb @@ -30,7 +30,7 @@ describe Chef::Mixin::PowershellOut, :windows_only do it "runs a command and returns the shell_out object" do ret = double("Mixlib::ShellOut") expect(object).to receive(:shell_out).with( - "powershell.exe #{flags} -Command \"Get-Process\"" + "powershell.exe #{flags} -Command \"Get-Process\"", {} ).and_return(ret) expect(object.powershell_out("Get-Process")).to eql(ret) end @@ -75,7 +75,7 @@ describe Chef::Mixin::PowershellOut, :windows_only do it "runs a command and returns the shell_out object" do mixlib_shellout = double("Mixlib::ShellOut") expect(object).to receive(:shell_out).with( - "powershell.exe #{flags} -Command \"Get-Process\"" + "powershell.exe #{flags} -Command \"Get-Process\"", {} ).and_return(mixlib_shellout) expect(mixlib_shellout).to receive(:error!) expect(object.powershell_out!("Get-Process")).to eql(mixlib_shellout) diff --git a/spec/unit/resource_spec.rb b/spec/unit/resource_spec.rb index b8c1a031e2..963c3eb658 100644 --- a/spec/unit/resource_spec.rb +++ b/spec/unit/resource_spec.rb @@ -931,14 +931,14 @@ describe Chef::Resource do it "adds mappings for all platforms", ruby: "< 2.7" do expect(Chef.resource_handler_map).to receive(:set).with( - :tape_deck, Chef::Resource::Klz, {} + :tape_deck, Chef::Resource::Klz ) klz.provides :tape_deck end it "adds mappings for all platforms", ruby: ">= 2.7" do expect(Chef.resource_handler_map).to receive(:set).with( - :tape_deck, Chef::Resource::Klz + :tape_deck, Chef::Resource::Klz, {} ) klz.provides :tape_deck end |