关于厨师食谱/食谱处理和重启行为的问题

时间:2015-06-28 23:49:44

标签: chef chef-recipe

我不清楚,但想要了解,Chef如何处理这样的示例:

https://docs.chef.io/resource_reboot.html

reboot 'Restart Computer' do
  action :nothing
end

powershell_script 'Rename and Join Domain' do
  code <<-EOH
    ...your rename and domain join logic here...
  EOH
  not_if <<-EOH
    $ComputerSystem = gwmi win32_computersystem
    ($ComputerSystem.Name -like '#{node['some_attribute_that_has_the_new_name']}') -and
      $ComputerSystem.partofdomain)
  EOH
  notifies :reboot_now, 'reboot[Restart Computer]', :immediately
end

我的意思是:如果我在分配给节点的运行列表中有如上所述的配方,那么该配方是否由Chef-client反复“执行”,但由于not_if,它只会“重命名和域加入”部分是ONCE,但即使这样,配方也一直在反复运行?

另外,我希望可以同时问这个问题,如果我在运行列表中有几个食谱(例如,在一个角色中),请说配方是食谱A,B,C和D,并且说,配方B导致配方结束时重新启动,配方C和D会发生什么?

如果所有食谱都有“警卫”,那么它们每次都会重新运行,如果A和B做出了他们应该做的改变,那么下一次,他们会跳过他们的处理,因为警卫,然后C(然后D)将被处理(这是假设在节点上运行的Chef-client服务)?

谢谢, 吉姆

1 个答案:

答案 0 :(得分:1)

在当前资源运行后,将调用

:immediately个通知。如果添加not_if/only_if条件,则仅在资源运行时才会执行通知。跳过的资源不会触发通知。

Chef 12+ reboot资源的操作:reboot_now将完全正确,它的名字是什么。重启后你必须重新运行chef-client并重新开始收敛。

如果您想在厨师运行结束时触发重启,并且有多个地方必须拉动此触发器,请使用:request_reboot

由于您不想定期重新启动系统,因此您几乎总是希望为重新启动或发送重新启动通知的操作设置防护。