chef-boneyard / chef-provisioning

A library for creating machines and infrastructures idempotently in Chef.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

undefined method `[]' for nil:NilClass ()

adecarolis opened this issue · comments

Chef: 12.17.44

When running chef-provisioning under chefdk 1.1.6 (chef 12.17.44) I get the error in subject.
Specifically, execution fails on a aws_ebs_volume call.

The run is invoked with this command:

chef exec chef-client -c ~/.chef/knife.rb -r 'recipe[ec2_se::se-east-staging-5]' -E se-east-staging-5 -l debug

The full output is pasted below.

Ironically, we have been testing this same setup in a container and we have been getting inconsistent results: on some hosts the error is present, on some others it is not.
Given the cryptic nature of this error, we cannot manage to pinpoint what's causing it.

Any help to troubleshoot this would be appreciated.

Thanks!

[2018-08-31T14:03:27-04:00] INFO: Running queued delayed notifications before re-raising exception
[2018-08-31T14:03:27-04:00] DEBUG: Re-raising exception: NoMethodError - ec2_se_provision[se-east-staging-5] (ec2_se::se-east-staging-5 line 4) had an error: NoMethodError: undefined method `[]' for nil:NilClass
/opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-provisioning-aws-2.1.0/lib/chef/provisioning/aws_driver/driver.rb:116:in `initialize'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-provisioning-aws-2.1.0/lib/chef/provisioning/aws_driver/driver.rb:104:in `new'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-provisioning-aws-2.1.0/lib/chef/provisioning/aws_driver/driver.rb:104:in `from_url'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-provisioning-2.0.2/lib/chef/provisioning.rb:86:in `driver_for_url'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-provisioning-2.0.2/lib/chef/provisioning/chef_run_data.rb:105:in `driver_for_url'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-provisioning-2.0.2/lib/chef/provisioning/chef_run_data.rb:84:in `driver_for'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-provisioning-aws-2.1.0/lib/chef/provisioning/aws_driver/aws_resource.rb:50:in `block in <class:AWSResource>'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/property.rb:640:in `instance_exec'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/property.rb:640:in `exec_in_resource'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/property.rb:458:in `coerce'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/property.rb:668:in `coerce_and_validate'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/property.rb:650:in `input_to_stored_value'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/property.rb:403:in `set'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/property.rb:302:in `call'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/property.rb:526:in `driver'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-provisioning-aws-2.1.0/lib/chef/provisioning/aws_driver/aws_resource.rb:19:in `initialize'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/resource_builder.rb:48:in `new'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/resource_builder.rb:48:in `build'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/dsl/declare_resource.rb:291:in `build_resource'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/dsl/declare_resource.rb:248:in `declare_resource'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/dsl/resources.rb:40:in `aws_ebs_volume'
  /var/chef/cache/cookbooks/ec2_se/resources/provision.rb:146:in `block (3 levels) in class_from_file'
  /var/chef/cache/cookbooks/ec2_se/resources/provision.rb:119:in `upto'
  /var/chef/cache/cookbooks/ec2_se/resources/provision.rb:119:in `block (2 levels) in class_from_file'
  /var/chef/cache/cookbooks/ec2_se/resources/provision.rb:19:in `each'
  /var/chef/cache/cookbooks/ec2_se/resources/provision.rb:19:in `block in class_from_file'
  (eval):2:in `block in action_create'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/provider.rb:361:in `instance_eval'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/provider.rb:361:in `compile_and_converge_action'
  (eval):2:in `action_create'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/provider.rb:145:in `run_action'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/resource.rb:622:in `run_action'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/runner.rb:69:in `run_action'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/runner.rb:97:in `block (2 levels) in converge'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/runner.rb:97:in `each'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/runner.rb:97:in `block in converge'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/resource_collection/resource_list.rb:94:in `block in execute_each_resource'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/resource_collection/stepable_iterator.rb:114:in `call_iterator_block'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/resource_collection/stepable_iterator.rb:85:in `step'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/resource_collection/stepable_iterator.rb:103:in `iterate'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/resource_collection/stepable_iterator.rb:55:in `each_with_index'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/resource_collection/resource_list.rb:92:in `execute_each_resource'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/runner.rb:96:in `converge'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/client.rb:670:in `block in converge'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/client.rb:665:in `catch'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/client.rb:665:in `converge'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/client.rb:704:in `converge_and_save'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/client.rb:284:in `run'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/application.rb:294:in `block in fork_chef_client'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/application.rb:282:in `fork'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/application.rb:282:in `fork_chef_client'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/application.rb:247:in `block in run_chef_client'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/local_mode.rb:44:in `with_server_connectivity'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/application.rb:235:in `run_chef_client'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/application/client.rb:464:in `sleep_then_run_chef_client'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/application/client.rb:451:in `block in interval_run_chef_client'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/application/client.rb:450:in `loop'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/application/client.rb:450:in `interval_run_chef_client'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/application/client.rb:434:in `run_application'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/lib/chef/application.rb:59:in `run'
  /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.17.44/bin/chef-client:26:in `<top (required)>'
  /opt/chefdk/bin/chef-client:58:in `load'
  /opt/chefdk/bin/chef-client:58:in `<main>'

Strongly recommend a later version of chef-provisioning-aws - you should be able to grab the latest gem from rubygems, (though you might need to force your chefdk to not use the older one by editing the chef-client script and removing the "gem chef-provisioning 2.1.0" line from it). AWS have updated how a bunch of responses come back, particularly in regards to IDs and such like.

Additionally, this issue would be better filed against chef-provisioning-aws rather than chef-provisioning, however I realise that's non-obvious

Closing due to old software versions, and belief that this is fixed in current