Шеф-повар - чтение атрибута узла и сохранение его в другом атрибуте узла в том же запуске клиента шеф-повара завершается неудачно.

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

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

Есть ли кто-нибудь, кто может мне помочь?


person Pegasus1985    schedule 17.06.2020    source источник


Ответы (1)


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

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

Это делает свое дело.

person Pegasus1985    schedule 18.06.2020