Я пытаюсь прочитать название текущего рецепта во время работы chef-client и сохранить его в переменной или атрибуте узла с рецептом. Пока я только что нашел способ сохранить его в атрибуте узла, но он всегда терпит неудачу. Это мой код:
ruby_block "Fetch Recipe Name From Run List" do
block do
Chef::Resource::RubyBlock.send(:include, Chef::Mixin::ShellOut)
s = shell_out("echo \"#{node['expanded_run_list']}\" | awk -F '::' '{print substr($3, 1, length($3)-1)}'" )
node.default['sftp-selfmade']['extracted_recipe'] = s.stdout
end
end
extracted_recipe = node['sftp-selfmade']['extracted_recipe']
# To debug the output of the node attribute.
execute 'TEST' do
command "echo \"TEST #{extracted_recipe}\""
end
Вывод:
* execute[TEST] action run
[execute] TEST
- execute echo "TEST "
Вывод должен быть:
- execute echo "TEST <Name-Of-Extracted-Recipe>"
Я пробовал много вещей, а также сохранял s.stdout
вывод в переменной, но это вызывает NoMethodError
на этапе компиляции. Также пытался использовать более сильные значения, такие как node.override
- это работает, но только если сначала установить node.normal
и установить его на node.override
, но это не удовлетворительное решение, чтобы делать это каждый раз в коде поваренной книги снова для развертывания на новых хостах. Пробовал также решение перезагрузки OHAI. Но и это не сработало. На совершенно новом хосте он также не работает после второго запуска шеф-клиента, если атрибуты были установлены, а затем после первого запуска.
Кто-нибудь может мне помочь?