Details
-
Type:
Bug
-
Status:
Closed
-
Priority:
Blocker
-
Resolution: Fixed
-
Affects Version/s: 0.8.16
-
Fix Version/s: 0.9.0
-
Component/s: Chef Client
-
Labels:None
-
Environment:
ruby-1.8.7-p249 on macosX (also exists on Ubuntu)
-
Triage Status:Triaged
Description
Some of my recipes fails to run properly on our 0.8 test cluster. I've isolated an issue in DeepMerge with our data and managed to extract a test case:
21/05 16:50 ~/test_case% ruby bug.rb
/Users/oct/.rvm/gems/ruby-1.8.7-p249@chef0.8/gems/chef-0.8.16/lib/chef/node/attribute.rb:338:in `auto_vivifiy': You tried to set a nested key, where the parent is not a hash-like object: fotonauts/balancers/search_server_host/search_server_host (ArgumentError)
from /Users/oct/.rvm/gems/ruby-1.8.7-p249@chef0.8/gems/chef-0.8.16/lib/chef/node/attribute.rb:243:in `get_value'
from /Users/oct/.rvm/gems/ruby-1.8.7-p249@chef0.8/gems/chef-0.8.16/lib/chef/node/attribute.rb:232:in `upto'
from /Users/oct/.rvm/gems/ruby-1.8.7-p249@chef0.8/gems/chef-0.8.16/lib/chef/node/attribute.rb:232:in `get_value'
from /Users/oct/.rvm/gems/ruby-1.8.7-p249@chef0.8/gems/chef-0.8.16/lib/chef/node/attribute.rb:94:in `each'
from /Users/oct/.rvm/gems/ruby-1.8.7-p249@chef0.8/gems/chef-0.8.16/lib/chef/node/attribute.rb:91:in `each'
from /Users/oct/.rvm/gems/ruby-1.8.7-p249@chef0.8/gems/chef-0.8.16/lib/chef/mixin/deep_merge.rb:114:in `deep_merge!'
from /Users/oct/.rvm/gems/ruby-1.8.7-p249@chef0.8/gems/chef-0.8.16/lib/chef/mixin/deep_merge.rb:128:in `deep_merge!'
from /Users/oct/.rvm/gems/ruby-1.8.7-p249@chef0.8/gems/chef-0.8.16/lib/chef/mixin/deep_merge.rb:114:in `each'
from /Users/oct/.rvm/gems/ruby-1.8.7-p249@chef0.8/gems/chef-0.8.16/lib/chef/mixin/deep_merge.rb:114:in `deep_merge!'
from /Users/oct/.rvm/gems/ruby-1.8.7-p249@chef0.8/gems/chef-0.8.16/lib/chef/mixin/deep_merge.rb:32:in `merge'
from bug.rb:8
Please see attached bug.rb and a.yml
(no attachement in Jira ?!)
bug.rb:
require 'rubygems'
require 'yaml'
require 'chef'
require 'chef/mixin/deep_merge'
a_value = YAML.load(File.open('a.yml'))
value = Chef::Mixin::DeepMerge.merge(nil, a_value)
a.yml:
— &id007 !map:Mash
merge!: &id006 !ruby/object:Chef::Node::Attribute
attribute: !map:Mash
fotonauts: !map:Mash
balancers: &id001 !map:Mash
search_server_host: search.
auto_vivifiy_on_read: false
current_attribute: *id001
current_default: !map:Mash {}
current_override: &id005 !map:Mash {}
default: !map:Mash
fotonauts: !map:Mash
balancers: !map:Mash {}
has_been_read: false
override: !map:Mash {}
set_unless_value_present: false
state:
internal: false