ruby – Chef – 运行其他资源失败的资源

我有两个名为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

点赞