【问题标题】:Questions about Chef cookbook/recipes processing and reboot behavior关于厨师食谱/食谱处理和重启行为的问题
【发布时间】:2015-06-29 22:34:10
【问题描述】:

我不清楚但想了解 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,它只会“重命名和域加入”部分一次,但即便如此,配方仍然会一遍又一遍地运行,永远?

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

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

谢谢, 吉姆

【问题讨论】:

    标签: chef-infra chef-recipe


    【解决方案1】:

    :immediately 通知将在当前资源运行后被调用。如果添加not_if/only_if 条件,则只有在资源运行时才会执行通知。跳过的资源不会触发通知。

    Chef 12+ 重启资源的操作:reboot_now 将完全按照其名称所说的那样执行。您必须在重启后重新运行 chef-client 并重新启动融合。

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

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

    【讨论】:

    • @Roland-感谢您的解释,但只想澄清以下内容 - 因此,节点上的 Chef-client 的想法是,并假设 Chef-client 服务正在运行,如果节点有一个运行列表,其中包含配方 A、B、C 和 D,并且配方 A 中的资源 A1 和 A2 以及配方 B 中的 B1 和 B2,以及配方 D 中的...D1 和 D2,我只希望每个资源触发一次,然后我在每个资源中放置某种保护,例如检查文件或其他东西的存在。然后服务会一直尝试永远重新运行运行列表,但是守卫会阻止重新运行我不想要的东西?
    • @user555303 是的,警卫会阻止进一步的通知。将其留在原地的原因是,例如自我修复。如果某些条件开始失败,守卫将确保修复它。这就像拥有一个测试套件,可以在每次运行时检查系统的状态,除了修复损坏的设置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    相关资源
    最近更新 更多