如何使用 Chef 卸载不在食谱中的陈旧(或旧包)并保持完整性?

How to uninstall stale(or old packages) that are not in the cookbook with Chef and maintain integrity?

我们似乎很久以前就通过一些旧的食谱安装了 'expect' 软件包。目前,我们这些天通过更新的食谱安装 'pexpect'。 'expect' 软件包在我不想要的系统上仍然可用。

rpm -qa | grep expect
expect-5.45
pexpect-2.3

大多数食谱都保留了他们的测试,但我们不会对不应该存在的内容或可能导致系统偏离的包进行测试。

我也明白,如果我们安装了一个带有食谱的包,我希望我们也添加了一个资源来删除那个包。

ohai 或其他一些技术(最佳实践)是否有一种简单的方法可以确定版本偏差和过时的包并报告或触发包删除过程?

重点是你不应该真正关心,如果系统安装了一些额外的包,无论是手动还是通过旧的自动化,直到它们开始干扰你的进程。在这种情况下,当多个东西提供相同的功能时,安装 pexpect 的说明书还应该删除干扰包 expect.

几乎不存在一些技术可以发现与配方的偏差,因为初始系统的配置可能不同。同时你并不真的需要那些,因为如果你的系统是自动配置的,你可以只删除现有的机器(重新安装干净 OS)并应用配方来更新它。

您的食谱和食谱正在声明您系统上的某些资源应该是什么样子,一些声明是应该存在的,而另一些则不应该存在。但是,您的食谱并不关心很多事情。例如,即使您使用 user 资源安装一些用户,您也不会注册管理 /etc/passwd 中的所有用户(假设您有一个 *nix 主机)。

因此,如果您的食谱根本没有提到 expect,则意味着您不关心它是否已安装。如果您的系统不安装 expect 很重要,那么您应该 :remove 软件包。

您的说明书不应假定这是安装给定软件包的唯一原因,因此卸载之前安装的软件包并不总是正确的做法。

最后,相信包装系统。如果 pexpect 不能在安装了 expect 的主机上运行,​​那么它应该声明它冲突或废弃 expect.