ruby_block条件语句并等待重启

时间:2016-04-28 00:11:37

标签: ruby chef

我从主厨IRC的代码陌生人那里得到了一些很好的指导,但我并不想进一步欺骗他,但这是我的问题:

我的目标是运行食谱一,然后运行两个,然后重新启动,同时保持厨师运行,然后执行食谱三。我想我已经关闭但仍然遇到错误。我不确定它是我的代码块还是Windows的行为方式。

这是我的代码块:

ruby_block "test" do
  block do
    run_context.include_recipe "stuff::reboot"
        while reboot_pending? == true do
            run_context.include_recipe "stuff::three"
     end
  end
end

该块执行没有问题,但它似乎很快就移动到stuff :: three recipe导致此错误,因为PowerShell不可用,因为机器仍在启动:

==> default: The argument 'c:/tmp/vagrant-elevated-shell.ps1' to the -File parameter does not exist. Provide the path to an existing '.ps1' file as an argument to the -File parameter.

我认为一旦发出reboot命令,几秒钟后就不再有挂起的重启了。那么,是否有一个不同的红宝石助手可以使用我的同时?或者这块只是废话?

1 个答案:

答案 0 :(得分:2)

Sooooo我也在这里回答了很多问题。谢谢你的想法。

你一直试图把include_recipe放在while循环的主体中,这不是你想要的我想不到的。这表示“在重启正在等待时反复包含此内容”。

你想要的是这个:

include_recipe 'stuff::reboot'

ruby_block 'wait for reboot' do
  block do
    true while reboot_pending?
  end
end

include_recipe 'stuff::three'

如果重启正在等待,那么会在两个配方中的东西之间放置一个资源来停止收敛,否则它会继续。