Шеф-повар-запуск ресурса при сбое другого ресурса
У меня есть два ресурса 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 ответ:
Лучше всего поставить 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
удален