如何在收敛期间使用 knife 更新节点 run_list

How to update node run_list using knife, during convergence

我们在下面给出了场景,

如何在节点收敛 运行 期间使用 knife 命令更新节点 run_list?

Knife 命令旨在用于在工作站上管理 chef-server。不得在食谱中使用它们来改变行为(因为这不会起作用)。

这里发生了什么:

  • 在chef-运行内部,有人(甚至不是节点本身)更改节点对象并修改其run_list.

  • 当节点结束它的运行时,它保存回节点对象(包括运行列表)并覆盖同时完成的内容,你的knife命令是没用。

如果您希望使用配方更改 run_list,您应该使用 node.run_list 方法,该方法将允许为将来的 运行 修改 run_list。

鉴于您的示例,您可以使用:

ruby_block 'remove ntp::undo from run list' do
  block do
    node.run_list.add('role[role c]')
  end
  only_if { !node.run_list.include?('role[role c]') }
end