2017-01-24 2 views
0

Еще одно разочарование в работе по тестированию не в prod.в шеф-поваре: неопределенный атрибут узла или метод `<< 'на` node'

Код вопроса добавляет строку к атрибуту узла.

if node['tom-ssh']['allow_groups'] 
    if !node['tom-ssh']['allow_groups'].include?("bots") 
    node.normal['tom-ssh']['allow_groups'] << "bots" 
    end 
else 
    node.normal['tom-ssh']['allow_groups'] = ["bots"] 
end 

Это, как уже упоминалось выше, работает в тестовом кухне, в шеф-оболочки в производстве, но работает рецепт в прод бросает следующие:

NoMethodError 
------------- 
Undefined node attribute or method `<<' on `node'. To set an attribute, use `<<=value' instead. 

Cookbook Trace: 
--------------- 
    /var/chef/cache/cookbooks/tom-users/recipes/reboot_bot.rb:22:in `from_file' 
    /var/chef/cache/cookbooks/compat_resource/files/lib/chef_compat/monkeypatches/chef/run_context.rb:347:in `load_recipe' 
    /var/chef/cache/cookbooks/compat_resource/files/lib/chef_compat/monkeypatches/chef/run_context.rb:303:in `block in include_recipe' 
    /var/chef/cache/cookbooks/compat_resource/files/lib/chef_compat/monkeypatches/chef/run_context.rb:302:in `each' 
    /var/chef/cache/cookbooks/compat_resource/files/lib/chef_compat/monkeypatches/chef/run_context.rb:302:in `include_recipe' 
    /var/chef/cache/cookbooks/tom-security-patches/recipes/default.rb:8:in `from_file' 
    /var/chef/cache/cookbooks/compat_resource/files/lib/chef_compat/monkeypatches/chef/run_context.rb:347:in `load_recipe' 

Relevant File Content: 
---------------------- 
/var/chef/cache/cookbooks/tom-users/recipes/reboot_bot.rb: 

15:  '/sbin/reboot' 
16: ] 
17: end 
18: 
19: # allow 'bots' to ssh log in 
20: if node['tom-ssh']['allow_groups'] 
21: if !node['tom-ssh']['allow_groups'].include?("bots") 
22>>  node.normal['tom-ssh']['allow_groups'] << "bots" 
23: end 
24: else 
25:  node.normal['tom-ssh']['allow_groups'] = ["bots"] 
26: end 
27: 

Рассмотрены вопросы, которые я нашел по этой теме (для пример Chef: Undefined node attribute or method `<<' on `node' when trying to add) ссылаются на не использование приоритета на объекте node, но я делаю это совсем другое, как показано в ссылке.

Возможно, мне здесь не хватает чего-то глупого, но оно работало до этого, и все еще работает на кухне, поэтому я выбежал из мест, чтобы посмотреть. Может ли это быть какой-то странной проблемой компиляции, которая не реплицируется в chef-zero?

+0

Какую версию шеф-повара вы используете? – coderanger

+0

последние (12.17.44). но я попытался перейти на другие версии, и результат такой же –

ответ

0

Я думаю, что логика вы хотите больше нравится эта

node.normal['tom-ssh']['allow_groups'] ||= [] 
node.normal['tom-ssh']['allow_groups'] |= %w{bots} 
+0

, похоже, не работает. 'chef (12.17.44)> node.normal ['blah'] ['boo'] | =% w {bots} NoMethodError: Неопределенный атрибут или метод узла' | ' на 'node '. Чтобы установить атрибут, вместо этого используйте '| = значение '. –

1

, что вы, вероятно, нужно сделать, это:

node.normal [ 'том- SSH'] [ 'allow_groups'] = DeepMerge .merge (node.normal ['tom-ssh'] ['allow_groups']. to_hash, ["bots"]. to_hash)

Смежные вопросы