0
votes

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

2

2 Answers

1
votes

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.

0
votes

Berkshelf 2.0 is very old, the current version is 5.x. We only support Berkshelf installed via ChefDK so please remove all existing copies and then install via the normal ChefDK installers.