如何在收敛期间使用 knife 更新节点 run_list
How to update node run_list using knife, during convergence
我们在下面给出了场景,
- 我们的节点有 run_list,"role a" 和 "role b"。节点收敛并且 运行 成为 run_list。
- 在第 1 步的节点收敛 运行 期间,我们尝试使用 knife 命令向节点 run_list 添加另一个 "role c"。根据 knife 命令输出添加成功。
- 如果我们查看刀节点状态,节点收敛完成后。 "role c",我们在第2步添加的节点还没有添加到run_list
如何在节点收敛 运行 期间使用 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
我们在下面给出了场景,
- 我们的节点有 run_list,"role a" 和 "role b"。节点收敛并且 运行 成为 run_list。
- 在第 1 步的节点收敛 运行 期间,我们尝试使用 knife 命令向节点 run_list 添加另一个 "role c"。根据 knife 命令输出添加成功。
- 如果我们查看刀节点状态,节点收敛完成后。 "role c",我们在第2步添加的节点还没有添加到run_list
如何在节点收敛 运行 期间使用 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