Шеф-повар-запуск ресурса при сбое другого ресурса


У меня есть два ресурса execute, которые называются command_1 и command_2.

Если command_1 не удается, я хочу запустить command_2, а затем повторно запустить command_1.

Примерно так:

execute 'command_1' do
  command "ipa host-del #{machine_name}"
  action :run
  ignore_failure true
  on_failure { notifies :run, 'execute['command_2']', :immediately }
end

execute 'command_2' do
  command "ipa host-mod --certificate  #{machine_name}"
  action :nothing
  notifies :run, 'execute['command_1']', :immediately
end

Как я могу заменить on_failure (было бы здорово, если бы у шеф-повара был этот) чем-то, что действительно работает ?

1 4

1 ответ:

Лучше всего поставить command_2 первым, а затем охранять его, проверяя, нужно ли его запускать или нет. Я не уверен, что эта команда делает, но если можно как-то проверить, нужна она или нет, то вы могли бы сделать это таким образом.

Если нет способа проверить, нужна ли команда command_2, то вы можете сделать что-то вроде этого:

execute 'command_1' do
  command "ipa host-del #{machine_name} && touch /tmp/successful"
  action :run
  ignore_failure true
end

execute 'command_2' do
  command "ipa host-mod --certificate  #{machine_name}"
  action :run
  notifies :run, 'execute['command_1']', :immediately
  not_if { ::File.exist? '/tmp/successful' }
end

file '/tmp/successful' do
  action :delete
end

Это вызовет команду command_1, и если она будет успешной, то это будет touch /tmp/successful. команда command_2 будет запущена, но только в том случае, если /tmp/successful не существовать. Если команда command_2 все же выполняется, то она немедленно уведомит команду command_1 о необходимости повторного запуска. Чтобы очистить для следующего запуска, мы затем добавляем ресурс file, чтобы убедиться, что /tmp/successful удален