【发布时间】:2014-11-04 06:38:30
【问题描述】:
我在节点上运行了 sudo chef-client,它在节点内有文件。但现在我想从节点中删除包。如果我从chef-server 中删除run_list 中的recipie,它将不会从节点中删除。
请告诉我在节点上删除包的最佳方法是什么。
【问题讨论】:
我在节点上运行了 sudo chef-client,它在节点内有文件。但现在我想从节点中删除包。如果我从chef-server 中删除run_list 中的recipie,它将不会从节点中删除。
请告诉我在节点上删除包的最佳方法是什么。
【问题讨论】:
Chef 中的每个资源都有一个或多个操作。通常默认操作类似于install 或create,但它们通常也提供相反的操作。在这种情况下,您可能希望使用以下资源制作新配方(或更改现有配方):
package 'foo' do
action :remove
end
【讨论】:
我的第一个想法是卸载配方,但这感觉有点像反模式,因为我们只想卸载一次,真的不是吗,所以每次都运行它会有点奇怪。
这是一个可重复的服务器定义,您可能想要旋转其他副本?如果是这样,我会说手动删除可能是最干净的,并让您的角色定义或运行列表定义在机器之间保持一致。
如果您真的想将其编码并在厨师中使用,另一个选项是在您的默认食谱中具有指示它应该“启用”还是“已安装”的属性
if node['your_package']['enabled'].eql?("false")
uninstall_it_if_installed()
else
install_it_if_missing()
end
同样,我不确定这是否真的是最干净的或 Chef 必须要做的事情,但它可能会让您到达您想去的地方。
另一种选择是吹走该框并使用您希望保存为角色“myServerType”的运行列表定义重新启动它。我认为在纸面上这是最干净的解决方案,但当然可能有很多不适合的原因
【讨论】: