Как добавить условие на действие блока ресурсов в CHEF? - PullRequest
0 голосов
/ 22 ноября 2018

Я создал один ресурс, который имеет два действия.

Скажем, действие: A1 и действие: A2.Я могу вызывать их в одном блоке ресурсов ( test ) следующим образом:

test 'Testing the actions' do
    action [:a1 ,:a2]
    only_if {::File.exists?"/tmp/action_exist.txt"}
end

Это работает нормально. Но что, если я хочу добавить условие к действию следующим образом

Проверьте условие только для действия: A1.и просто запустите действие: A2 независимо от условия.

Я пытался так:

test 'Testing the actions' do
    action [:A1 ,:A2]
    if (action.first=="A1")
            puts "yes"
            only_if {::File.exists?"/tmp/action_exist.txt" }
    end

end

Но это не работает.Это условие выполняется для обоих действий

Ответы [ 2 ]

0 голосов
/ 25 декабря 2018

Это зависит от того, известно ли условие во время компиляции.Если условие известно во время компиляции, вы можете написать что-то вроде:

test 'Testing the action' do
  if ::File.exists?('/tmp/action_exist.txt')
    action [:A1, :A2]
  else
    action [:A2]
  end
end

Но это только , если ваши рецепты не играют с /tmp/action_exist.txt во время выполнения.Если во время конвергенции статус /tmp/action_exist.txt может измениться, возможно, вам придется заняться чем-то более необычным.Например, вы могли бы уведомить ресурс о немедленном выполнении :A1 в каком-то ресурсе, предшествующем ресурсу.Это не то, что я сделал, поэтому вам, вероятно, нужно будет поэкспериментировать.

0 голосов
/ 23 ноября 2018

Шеф-повар работает не так.Тело ресурса - это не скрипт, который запускает каждое действие.

...