【发布时间】:2016-02-24 04:49:06
【问题描述】:
我有两个 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(如果厨师有这个会很棒)替换为实际有效的东西?
【问题讨论】:
-
我看不到直接的方法。当第一个资源成功时,您是否可以使用
not_if/only_if阻止第二个资源运行的块来保护第二个资源? IE。当host-del失败时,我希望类似的ipa host-list #{machine_name}包含主机。在not_if { mixlib shellout blabla contains #{machine_name}中检查这一点。 -
我假设 command_1 有一个守卫不会在每次厨师运行时执行,所以我认为你最好的选择是在 ruby_block 中直接使用shell_out 并在这个块中实现逻辑。
标签: ruby chef-infra chef-recipe