如何从Node for Chef中删除配方

时间:2014-11-03 07:36:44

标签: chef chef-recipe

我在节点上运行了sudo chef-client,它有节点内的文件。但是现在我想从节点中删除包。如果我从chef-server中删除run_list中的recipie,它将不会从节点中删除。

请告诉我在节点上删除软件包的最佳方法是什么。

2 个答案:

答案 0 :(得分:2)

Chef中的每个资源都有一个或多个操作。通常默认操作类似于installcreate,但它们通常也提供相反的操作。在这种情况下,您可能希望使用以下资源创建新配方(或更改现有配方):

package 'foo' do
  action :remove
end

答案 1 :(得分:0)

我的第一个想法是卸载配方,但感觉有点像反模式真的因为我们只想卸载一次真的不是我们每次运行它都会有点怪异

这是一个可重复的服务器定义,您可能想要旋转其他副本吗?如果是这样,我会说手动删除可能是最干净的,让你的角色定义或运行列表定义在机器上保持一致。

另一个选项,如果你真的想要编码并将它放在厨师的默认配方中有一个属性,表明它是否应该启用'或者'已安装'

if node['your_package']['enabled'].eql?("false")
   uninstall_it_if_installed()
else
   install_it_if_missing()
end

我再也不确定这是否真的是最干净的,或者厨师的目标是什么,但它可能会让你到达你想去的地方。

另一种选择是吹掉盒子,然后使用你希望保存为角色" myServerType"的运行列表定义再次启动它。我认为在纸面上这是最干净的解决方案,但当然有很多理由不适合