With the following software versions installed: Berkshelf - 2.0.18 Ruby - 2.2.2 Vagrant - 1.9.3 test-kitchen - 1.15.0 kitchen-vagrant - 1.1.0 Chef Server API version - 11.0.2
I am attempting to run test kitchen on my local system. In doing so, I have a berksfile that points to a chef_api :config with a single recipe apt
chef_api :config
cookbook 'apt'
The config is based on my knife.rb configuration. I do most of my gem installs via bundler Here is my gem file
source 'https://artifactory.mia.ucloud.int/artifactory/api/gems/rubygems' do
gem 'berkshelf', '~> 2.0.18'
gem 'celluloid', '~> 0.16.0'
gem 'celluloid-io', '~> 0.16.1'
gem 'net-http-persistent', '~> 2.9.0'
gem 'test-kitchen'
gem 'kitchen-vagrant'
end
Here is the .kitchen.yml:
---
driver:
name: vagrant
provisioner:
name: chef_solo
platforms:
- name: ubuntu-14.04
driver:
box: ubuntu/trusty64
suites:
- name: default
run_list:
- recipe[apt::default]
- recipe[git::server]
attributes:
- name: core
run_list:
- recipe[ultimate_metadefender_core::default]
I am able to get the bundle install to work and run the berks install to work fine. However, when I run a kitchen converge the system deploys but then gets to the point of deploying the cookbooks and fails with the following message:
-----> Starting Kitchen (v1.15.0)
-----> Converging <core-ubuntu-1404>...
Preparing files for transfer
Preparing dna.json
Resolving cookbook dependencies with Berkshelf 2.0.18...
>>>>>> ------Exception-------
>>>>>> Class: Kitchen::ActionFailed
>>>>>> Message: 1 actions failed.
>>>>>> Failed to complete #converge action: [undefined method `vendor' for
#<Berkshelf::Berksfile:0x007fdd3d161620>] on core-ubuntu-1404
>>>>>> ----------------------
>>>>>> Please see .kitchen/logs/kitchen.log for more details
>>>>>> Also try running `kitchen diagnose --all` for configuration
I then reviewed the logs and it appears to be coming from the test-kitchen gem:
-----> Converging <core-ubuntu-1404>...
Preparing files for transfer
Preparing dna.json
Resolving cookbook dependencies with Berkshelf 2.0.18...
Converge failed on instance <core-ubuntu-1404>.
------Exception-------
Class: NoMethodError
Message: undefined method `vendor' for #
<Berkshelf::Berksfile:0x007fdd3d161620>
----------------------
------Backtrace-------
/Users/miker/Projects/hp/cav/infrastructure/configuration/vendor/gems/ruby/2.2.0/gems/test-kitchen-1.15.0/lib/kitchen/provisioner/chef/berkshelf.rb:66:in `block in resolve'
/Users/miker/Projects/hp/cav/infrastructure/configuration/vendor/gems/ruby/2.2.0/gems/thor-0.18.1/lib/thor/shell/basic.rb:19:in `mute'
/Users/miker/Projects/hp/cav/infrastructure/configuration/vendor/gems/ruby/2.2.0/gems/test-kitchen-1.15.0/lib/kitchen/provisioner/chef/berkshelf.rb:61:in `resolve'
/Users/miker/Projects/hp/cav/infrastructure/configuration/vendor/gems/ruby/2.2.0/gems/test-kitchen-1.15.0/lib/kitchen/provisioner/chef/common_sandbox.rb:329:in `block in resolve_with_berkshelf'
/Users/miker/Projects/hp/cav/infrastructure/configuration/vendor/gems/ruby/2.2.0/gems/test-kitchen-1.15.0/lib/kitchen/provisioner/chef/common_sandbox.rb:326:in `synchronize'
/Users/miker/Projects/hp/cav/infrastructure/configuration/vendor/gems/ruby/2.2.0/gems/test-kitchen-1.15.0/lib/kitchen/provisioner/chef/common_sandbox.rb:326:in `resolve_with_berkshelf'
/Users/miker/Projects/hp/cav/infrastructure/configuration/vendor/gems/ruby/2.2.0/gems/test-kitchen-1.15.0/lib/kitchen/provisioner/chef/common_sandbox.rb:260:in `prepare_cookbooks'
/Users/miker/Projects/hp/cav/infrastructure/configuration/vendor/gems/ruby/2.2.0/gems/test-kitchen-1.15.0/lib/kitchen/provisioner/chef/common_sandbox.rb:48:in `populate'
/Users/miker/Projects/hp/cav/infrastructure/configuration/vendor/gems/ruby/2.2.0/gems/test-kitchen-1.15.0/lib/kitchen/provisioner/chef_base.rb:126:in `create_sandbox'
/Users/miker/Projects/hp/cav/infrastructure/configuration/vendor/gems/ruby/2.2.0/gems/test-kitchen-1.15.0/lib/kitchen/provisioner/chef_solo.rb:41:in `create_sandbox'
/Users/miker/Projects/hp/cav/infrastructure/configuration/vendor/gems/ruby/2.2.0/gems/test-kitchen-1.15.0/lib/kitchen/provisioner/base.rb:65:in `call'
/Users/miker/Projects/hp/cav/infrastructure/configuration/vendor/gems/ruby/2.2.0/gems/test-kitchen-1.15.0/lib/kitchen/instance.rb:384:in `block in converge_action'
/Users/miker/Projects/hp/cav/infrastructure/configuration/vendor/gems/ruby/2.2.0/g
ems/test-kitchen-1.15.0/lib/kitchen/instance.rb:527:in `synchronize_or_call'
/Users/miker/Projects/hp/cav/infrastructure/configuration/vendor/gems/ruby/2.2.0/gems/test-kitchen-1.15.0/lib/kitchen/instance.rb:489:in `block in action'
/Users/miker/.rvm/rubies/ruby-2.2.2/lib/ruby/2.2.0/benchmark.rb:288:in `measure'
/Users/miker/Projects/hp/cav/infrastructure/configuration/vendor/gems/ruby/2.2.0/gems/test-kitchen-1.15.0/lib/kitchen/instance.rb:488:in `action'
/Users/miker/Projects/hp/cav/infrastructure/configuration/vendor/gems/ruby/2.2.0/gems/test-kitchen-1.15.0/lib/kitchen/instance.rb:380:in `converge_action'
/Users/miker/Projects/hp/cav/infrastructure/configuration/vendor/gems/ruby/2.2.0/gems/test-kitchen-1.15.0/lib/kitchen/instance.rb:359:in `block in transition_to'
/Users/miker/Projects/hp/cav/infrastructure/configuration/vendor/gems/ruby/2.2.0/gems/test-kitchen-1.15.0/lib/kitchen/instance.rb:358:in `each'
/Users/miker/Projects/hp/cav/infrastructure/configuration/vendor/gems/ruby/2.2.0/gems/test-kitchen-1.15.0/lib/kitchen/instance.rb:358:in `transition_to'
/Users/miker/Projects/hp/cav/infrastructure/configuration/vendor/gems/ruby/2.2.0/gems/test-kitchen-1.15.0/lib/kitchen/instance.rb:135:in `converge'
/Users/miker/Projects/hp/cav/infrastructure/configuration/vendor/gems/ruby/2.2.0/gems/test-kitchen-1.15.0/lib/kitchen/command.rb:197:in `public_send'
/Users/miker/Projects/hp/cav/infrastructure/configuration/vendor/gems/ruby/2.2.0/gems/test-kitchen-1.15.0/lib/kitchen/command.rb:197:in `run_action_in_thread'
/Users/miker/Projects/hp/cav/infrastructure/configuration/vendor/gems/ruby/2.2.0/gems/test-kitchen-1.15.0/lib/kitchen/command.rb:169:in `block (2 levels) in run_action'
/Users/miker/Projects/hp/cav/infrastructure/configuration/vendor/gems/ruby/2.2.0/gems/logging-1.8.2/lib/logging/diagnostic_context.rb:323:in `call'
/Users/miker/Projects/hp/cav/infrastructure/configuration/vendor/gems/ruby/2.2.0/gems/logging-1.8.2/lib/logging/diagnostic_context.rb:323:in `block in create_with_logging_context'
----End Backtrace-----
In reviewing the gem berksfile.rb file there is a object created using the berksfile and then this object is eventually called with the vendor method, which does not exists. I am not sure where to take this at this point. If anyone can provide some assistance on this issue, it would be greatly appreciated. I am stuck on these specific versions due to the chef server version we are on.
Based on what I have read in the docs, the latter versions of Berkshelf require a Berkshelf API version or Chef API version 12.4 or higher. Unfortunately neither is possible to attain in my situation
After some research and digging around, I was able to get this to work with the following
Gemfile:
gem 'rspec', '~> 3.1.0'
gem 'test-kitchen', '~> 1.0'
gem 'berkshelf', '~> 2.0.0' # DO NOT UPDATE to 3.00
gem 'celluloid', '~> 0.16.0' # Added due to bug in bundler ignoring lock file
gem 'kitchen-vagrant', '~> 0.15.0'
gem 'rest-client', '~> 1.6.7'
gem 'json-schema', '~> 2.2.5'
gem 'rb-fsevent', '0.9.5' # Added due to ruby restriction with ruby_dep
gem 'rb-inotify', '0.9.5' # Added due to ruby restriction with ruby_dep
gem 'rack', '1.6.0' #needed to force
Gemfile.lock:
GEM
remote: http://artifactory.mia.ucloud.int/artifactory/api/gems/rubygems/
specs:
activesupport (3.2.22.2)
i18n (~> 0.6, >= 0.6.4)
multi_json (~> 1.0)
addressable (2.3.8)
akami (1.3.1)
gyoku (>= 0.4.0)
nokogiri
artifactory (2.3.2)
berkshelf (2.0.18)
activesupport (~> 3.2.0)
addressable (~> 2.3.4)
buff-shell_out (~> 0.1)
chozo (>= 0.6.1)
faraday (~> 0.8.5)
hashie (~> 2.0)
minitar (~> 0.5.4)
rbzip2 (~> 0.2.0)
retryable (~> 1.3.3)
ridley (~> 1.7.0)
solve (~> 0.8.2)
thor (~> 0.18.0)
buff-config (0.4.0)
buff-extensions (~> 0.3)
varia_model (~> 0.1)
buff-extensions (0.5.0)
buff-ignore (1.1.1)
buff-ruby_engine (0.1.0)
buff-shell_out (0.2.0)
buff-ruby_engine (~> 0.1.0)
builder (3.2.2)
celluloid (0.16.0)
timers (~> 4.0.0)
celluloid-io (0.16.2)
celluloid (>= 0.16.0)
nio4r (>= 1.1.0)
chozo (0.6.1)
activesupport (>= 3.2.0)
hashie (>= 2.0.2)
multi_json (>= 1.3.0)
diff-lcs (1.2.5)
erubis (2.7.0)
faraday (0.8.11)
multipart-post (~> 1.2.0)
ffi (1.9.10)
gssapi (1.0.3)
ffi (>= 1.0.1)
gyoku (1.3.1)
builder (>= 2.1.2)
hashie (2.1.2)
hitimes (1.2.4)
httpclient (2.8.0)
httpi (0.9.7)
rack (= 1.6.0)
i18n (0.7.0)
json (1.8.1)
json-schema (2.2.5)
kitchen-vagrant (0.15.0)
test-kitchen (~> 1.0)
little-plugger (1.1.4)
logging (1.8.2)
little-plugger (>= 1.1.3)
multi_json (>= 1.8.4)
mime-types (1.25.1)
mini_portile2 (2.0.0)
minitar (0.5.4)
mixlib-authentication (1.3.0)
mixlib-log
mixlib-install (1.0.11)
artifactory
mixlib-shellout
mixlib-versioning
mixlib-log (1.6.0)
mixlib-shellout (1.6.1)
mixlib-versioning (1.1.0)
multi_json (1.12.0)
multipart-post (1.2.0)
net-http-persistent (2.9.4)
net-scp (1.2.1)
net-ssh (>= 2.6.5)
net-ssh (2.9.4)
nio4r (1.2.1)
nokogiri (1.6.7.2)
mini_portile2 (~> 2.0.0.rc2)
nori (1.1.5)
rack (1.6.0)
rb-fsevent (0.9.5)
rb-inotify (0.9.5)
ffi (>= 0.5.0)
rbzip2 (0.2.0)
rest-client (1.6.9)
mime-types (~> 1.16)
retryable (1.3.6)
ridley (1.7.1)
addressable
buff-config (~> 0.2)
buff-extensions (~> 0.3)
buff-ignore (~> 1.1)
buff-shell_out (~> 0.1)
celluloid (~> 0.15)
celluloid-io (~> 0.15)
erubis
faraday (>= 0.8.4)
hashie (>= 2.0.2)
json (>= 1.7.7)
mixlib-authentication (>= 1.3.0)
net-http-persistent (>= 2.8)
net-ssh
retryable
solve (>= 0.4.4)
varia_model (~> 0.1)
winrm (~> 1.1.0)
rspec (3.1.0)
rspec-core (~> 3.1.0)
rspec-expectations (~> 3.1.0)
rspec-mocks (~> 3.1.0)
rspec-core (3.1.7)
rspec-support (~> 3.1.0)
rspec-expectations (3.1.2)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.1.0)
rspec-mocks (3.1.3)
rspec-support (~> 3.1.0)
rspec-support (3.1.2)
rubyntlm (0.1.1)
safe_yaml (1.0.4)
savon (0.9.5)
akami (~> 1.0)
builder (>= 2.1.2)
gyoku (>= 0.4.0)
httpi (~> 0.9)
nokogiri (>= 1.4.0)
nori (~> 1.0)
wasabi (~> 1.0)
solve (0.8.2)
test-kitchen (1.7.3)
mixlib-install (~> 1.0, >= 1.0.4)
mixlib-shellout (>= 1.2, < 3.0)
net-scp (~> 1.1)
net-ssh (>= 2.9, < 4.0)
safe_yaml (~> 1.0)
thor (~> 0.18)
thor (0.18.1)
timers (4.0.4)
hitimes
uuidtools (2.1.5)
varia_model (0.3.2)
buff-extensions (~> 0.2)
hashie (>= 2.0.2)
wasabi (1.0.0)
nokogiri (>= 1.4.0)
winrm (1.1.3)
gssapi (~> 1.0.0)
httpclient (~> 2.2, >= 2.2.0.2)
logging (~> 1.6, >= 1.6.1)
nokogiri (~> 1.5)
rubyntlm (~> 0.1.1)
savon (= 0.9.5)
uuidtools (~> 2.1.2)
PLATFORMS
ruby
DEPENDENCIES
berkshelf (~> 2.0.0)!
celluloid (~> 0.16.0)!
json-schema (~> 2.2.5)!
kitchen-vagrant (~> 0.15.0)!
rack (= 1.6.0)!
rb-fsevent (= 0.9.5)!
rb-inotify (= 0.9.5)!
rest-client (~> 1.6.7)!
rspec (~> 3.1.0)!
test-kitchen (~> 1.0)!
BUNDLED WITH
1.14.6
It is not ideal but for anyone in a similar situation. This is works as expected.