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

时间:2015-06-23 05:55:20

标签: chef knife convergence

我们在下面给出了方案,

  • 我们的节点的run_list包含“role a”和“role b”。节点收敛并运行run_list。
  • 在步骤1中的节点收敛运行期间,我们尝试使用knife命令向节点run_list添加另一个“角色c”。根据刀具命令输出成功添加。
  • 如果我们在节点收敛完成后检查刀节点状态。我们在步骤2中添加的“角色c”尚未添加到节点run_list

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

1 个答案:

答案 0 :(得分:3)

刀具命令旨在用于工作站以管理厨师服务器。它们不得在配方中用于改变行为(因为这不起作用)。

这里会发生什么:

  • 在chef-run中,有人(甚至不是节点本身)更改节点对象并修改其run_list。

  • 当节点结束运行时,它会保存回节点对象(包括运行列表)并覆盖同时执行的操作,你的刀命令是没用的。

如果您希望使用配方更改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