我有许多 ansible playbook,用于在 Debian 和 CentOS VM 上执行某些操作。到目前为止,当我需要处理包时,我会使用 ansible 模块 apt 和 yum。因此,我必须检查安装了哪个操作系统,然后使用正确的 ansible 模块。
但是,我最近了解到有一个名为 package 的模块,它以某种方式统一了包管理器,降低了 playbook 的复杂性,所以我现在尝试只使用这个模块。
我想要执行的操作之一是更新所有包。问题是 ansible 的文档 没有说明如何使用 package 来做到这一点。然而,它确实说明了如何使用 apt 和 yum 来做到这一点:第一个使用和升级操作,后者建议编写如下内容:
yum: name=* state=latest
因此,我认为我可以使用 package 来执行以下操作:
package: name=* state=latest
当我运行此剧本时,我没有遇到任何错误,但这没有在任何地方记录,并且 apt 和 yum 的工作方式并不完全相同。所以我的问题是:上面的命令是否安全,因为它实际上做了我想要它做的事情吗?
提前致谢!
编辑:
我发现使用
package: name=* state=latest
将尝试安装或更新所有可用的软件包,而不仅仅是更新已安装的软件包。因此这对我来说不是一个有效的解决方案。或者,我可以继续使用 yum 和 apt 来执行此特定操作,但我确实想知道为什么不能使用 package 来执行此操作,或者如果我缺少某些内容。
经过进一步测试,我现在可以自己回答这个问题了,答案是否定的。在 Debian 计算机上使用
package: name=* state=latest
将尝试安装或更新存储库中可用的每个软件包,因此它不能用作 apt-get upgrade
的替代品。
截至 2024 年,模块
ansible.builtin.apt
和 ansible.builtin.yum
将 package: name=* state=latest
视为“将所有软件包更新到最新版本”
从下面的文档中,我认为很明显,您所描述的用途可以被认为是安全的。
来自package文档:
该模块实际上调用每个系统的相关包模块(apt、yum 等)。
因此,无论您传递给它什么,都应该得到带下划线的打包程序 yum 或 apt 的支持。
来自 apt 文档:
还支持名称通配符 (fnmatch),如 apt* 和版本通配符,如 foo=1.0*。
来自 yum->name 文档:
当使用state=latest时,这可以是'*',这意味着运行:yum -y update。
编辑:@Xavier Alvarez 测试后,
apt: name=* state=latest
将安装存储库中的所有软件包。