使用ansible的包模块升级所有包是否安全?
Is it safe to use ansible's package module to upgrade all packages?
我有许多 ansible playbook,用于在 Debian 和 CentOS VM 上执行某些操作。直到现在,当我需要处理包时,我会使用 ansible 模块 apt and yum。因此,我必须检查安装了哪个 OS,然后使用正确的 ansible 模块。
不过,我最近了解到有一个名为 package 的模块,它以某种方式统一了包管理器,降低了 playbook 的复杂性,所以我现在只尝试使用这个模块。
我要执行的操作之一是更新所有包。问题是 ansible's documentation 没有说明如何使用 package 来做到这一点。但是,它确实说明了如何使用 apt 和 yum 来做到这一点:第一个使用和升级操作,后者建议编写如下内容:
yum: name=* state=latest
出于这个原因,我认为我可以使用 package 来执行以下操作:
package: name=* state=latest
当我 运行 这个剧本时,我没有遇到任何错误,但这在任何地方都没有记录,apt 和 yum 不以完全相同的方式工作。所以我的问题是:上面的命令是否安全,因为它实际上做了我想要它做的事情吗?
提前致谢!
编辑:
我发现使用 package: name=* state=latest
会尝试安装或更新所有可用的包,而不是只更新已安装的包。因此,这对我来说不是一个有效的解决方案。或者,我可以继续使用 yum 和 apt 来执行此特定操作,但我想知道为什么无法使用 包,或者如果我遗漏了什么。
根据下面的文档,我认为很明显您所描述的使用可以被认为是安全的。
来自 package 文档:
This module actually calls the pertinent package modules for each system (apt, yum, etc).
因此,无论您传递给它什么,都应该受到带下划线的包装程序 yum 或 apt 的支持。
来自 apt 文档:
Name wildcards (fnmatch) like apt* and version wildcards like foo=1.0* are also supported.
来自 yum->name 文档:
When using state=latest, this can be '*' which means run: yum -y update.
编辑:@Xavier Alvarez 测试后 apt: name=* state=latest
将安装 repo 中的所有软件包。
嗯,经过进一步测试,我现在可以自己回答这个问题了,答案是否定的。在 Debian 机器上使用 package: name=* state=latest
将尝试安装或更新存储库中可用的每个软件包,因此它不能用作 apt-get upgrade
.
的替代品
我有许多 ansible playbook,用于在 Debian 和 CentOS VM 上执行某些操作。直到现在,当我需要处理包时,我会使用 ansible 模块 apt and yum。因此,我必须检查安装了哪个 OS,然后使用正确的 ansible 模块。
不过,我最近了解到有一个名为 package 的模块,它以某种方式统一了包管理器,降低了 playbook 的复杂性,所以我现在只尝试使用这个模块。
我要执行的操作之一是更新所有包。问题是 ansible's documentation 没有说明如何使用 package 来做到这一点。但是,它确实说明了如何使用 apt 和 yum 来做到这一点:第一个使用和升级操作,后者建议编写如下内容:
yum: name=* state=latest
出于这个原因,我认为我可以使用 package 来执行以下操作:
package: name=* state=latest
当我 运行 这个剧本时,我没有遇到任何错误,但这在任何地方都没有记录,apt 和 yum 不以完全相同的方式工作。所以我的问题是:上面的命令是否安全,因为它实际上做了我想要它做的事情吗?
提前致谢!
编辑:
我发现使用 package: name=* state=latest
会尝试安装或更新所有可用的包,而不是只更新已安装的包。因此,这对我来说不是一个有效的解决方案。或者,我可以继续使用 yum 和 apt 来执行此特定操作,但我想知道为什么无法使用 包,或者如果我遗漏了什么。
根据下面的文档,我认为很明显您所描述的使用可以被认为是安全的。
来自 package 文档:
This module actually calls the pertinent package modules for each system (apt, yum, etc).
因此,无论您传递给它什么,都应该受到带下划线的包装程序 yum 或 apt 的支持。
来自 apt 文档:
Name wildcards (fnmatch) like apt* and version wildcards like foo=1.0* are also supported.
来自 yum->name 文档:
When using state=latest, this can be '*' which means run: yum -y update.
编辑:@Xavier Alvarez 测试后 apt: name=* state=latest
将安装 repo 中的所有软件包。
嗯,经过进一步测试,我现在可以自己回答这个问题了,答案是否定的。在 Debian 机器上使用 package: name=* state=latest
将尝试安装或更新存储库中可用的每个软件包,因此它不能用作 apt-get upgrade
.