我有两个名为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(如果Chef有这个很好的话)?
最佳答案 最好的办法是先将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,如果成功,它将触发/ tmp / success.然后command_2将运行,但仅当/ tmp / successful不存在时才会运行.如果command_2运行,它将立即通知command_1再次运行.要清理下一次运行,我们然后添加文件资源以确保删除/ tmp / successful