Chef - считывание атрибута узла и сохранение его в атрибуте другого узла при том же запуске клиента Chef завершается ошибкой - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь прочитать название текущего рецепта во время работы 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. Но и это не сработало. На совершенно новом хосте он также не работает после второго запуска шеф-клиента, если атрибуты были установлены, а затем после первого запуска.

Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 18 июня 2020

Обнаружил следующее решение:

expandedrecipe = node['expanded_run_list'].select{ |e| e.include? 'sftp-selfmade' }.first.split('::').last

Вот и все.

...