【问题标题】:Chef - Run resource on other resource's failureChef - 在其他资源失败时运行资源
【发布时间】:2016-02-24 04:49:06
【问题描述】:

我有两个 execute 资源,分别称为 command_1command_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


【解决方案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

【讨论】:

  • 不错。代码没有显示为代码块,你能解决这个问题吗?
  • 没问题@JahMyst。不确定那里发生了什么,因为我之前确实有正确的格式。哦,好吧。
  • 在阅读更多内容后,我想补充一点,更好的做法是在execute 资源中使用creates '/tmp/successful' 来创建临时文件。 createsexecute 资源的一个属性,如下所示:docs.chef.io/resource_execute.html
  • @OlivierCervello creates 实际上并没有创建文件。它只是not_if { ::File.exist?(<file path>) } 的一个快捷方式,您可以在execute 'command_2' 上使用它,但您的意图会不太清楚,因为command_2 不会以任何方式创建该文件。
  • 你是对的,我完全错了。不过这有点误导。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多