ansible.builtin.package_facts 模块 – 将软件包信息作为事实

注意

此模块是 ansible-core 的一部分,包含在所有 Ansible 安装中。在大多数情况下,即使不指定 集合关键字,您也可以使用简短的模块名称 package_facts。但是,我们建议您使用 完全限定的集合名称 (FQCN) ansible.builtin.package_facts 以便轻松链接到模块文档并避免与可能具有相同模块名称的其他集合发生冲突。

摘要

  • 返回有关已安装软件包的信息作为事实。

需求

以下需求在执行此模块的主机上是必需的。

  • 请参阅 manager 选项中每个软件包管理器的详细信息。

参数

参数

注释

manager

列表 / 元素=字符串

系统使用的软件包管理器,以便我们可以查询软件包信息。这是一个列表,可以支持每个系统上的多个软件包管理器,从版本 2.8 开始。

portagepkg 选项是在版本 2.8 中添加的。

apk 选项是在版本 2.11 中添加的。

pkg_info 选项是在版本 2.13 中添加的。

别名是在 2.18 中添加的,以支持使用 manager={{ansible_facts['pkg_mgr']}}

选择

  • "apk":Alpine Linux 软件包管理器

  • "apt":对于基于 DEB 的发行版,必须在目标主机上安装 python-apt 软件包

  • "auto" (默认):根据 strategy,将匹配提供的第一个或所有软件包管理器(按顺序)

  • "dnf":rpm 的别名

  • "dnf5":rpm 的别名

  • "openbsd_pkg":pkg_info 的别名

  • "pacman":Archlinux 软件包管理器/构建器

  • "pkg":libpkg 前端 (FreeBSD)

  • "pkg5":pkg 的别名

  • "pkg_info":OpenBSD 软件包管理器

  • "pkgng":pkg 的别名

  • "portage":处理 ebuild 软件包,它需要 qlist 实用程序,该实用程序是“app-portage/portage-utils”的一部分

  • "rpm":对于基于 RPM 的发行版,需要 RPM Python 绑定,在 Suse 上默认不安装 (python3-rpm)

  • "yum":rpm 的别名

  • "zypper":rpm 的别名

默认: ["auto"]

strategy

字符串

在 Ansible 2.8 中添加

此选项控制模块如何查询系统上的软件包管理器。

选择

  • "all":返回系统上所有受支持且可用的软件包管理器的信息。

  • "first" (默认):仅返回第一个受支持且可用的软件包管理器的信息。

属性

属性

支持

描述

check_mode

支持:完全支持

可以在 check_mode 中运行并返回更改状态预测,而无需修改目标,如果不受支持,则操作将被跳过。

diff_mode

支持:不支持

在 diff 模式下,将返回有关已更改内容(或可能需要在 check_mode 中更改的内容)的详细信息

facts

支持:完全支持

操作返回一个 ansible_facts 字典,该字典将更新现有的主机事实

platform

平台: posix

可以对其进行操作的目标操作系统/系列

示例

- name: Gather the package facts
  ansible.builtin.package_facts:
    manager: auto

- name: Print the package facts
  ansible.builtin.debug:
    var: ansible_facts.packages

- name: Check whether a package called foobar is installed
  ansible.builtin.debug:
    msg: "{{ ansible_facts.packages['foobar'] | length }} versions of foobar are installed!"
  when: "'foobar' in ansible_facts.packages"

返回的事实

此模块返回的事实会添加到 hostvars 主机事实中/更新 hostvars 主机事实,并且可以像任何其他主机事实一样按名称引用。它们不需要注册才能使用。

描述

packages

字典

将软件包名称映射到包含软件包信息的非空字典列表。

列表中的每个字典对应于软件包的一个已安装版本。

下面描述的字段适用于所有软件包管理器。根据软件包管理器,软件包可能还有更多字段。

返回:当指定操作系统级软件包管理器或自动检测管理器时

示例: "{\n  \"packages\": {\n    \"kernel\": [\n      {\n        \"name\": \"kernel\",\n        \"source\": \"rpm\",\n        \"version\": \"3.10.0\",\n        ...\n      },\n      {\n        \"name\": \"kernel\",\n        \"source\": \"rpm\",\n        \"version\": \"3.10.0\",\n        ...\n      },\n      ...\n    ],\n    \"kernel-tools\": [\n      {\n        \"name\": \"kernel-tools\",\n        \"source\": \"rpm\",\n        \"version\": \"3.10.0\",\n        ...\n      }\n    ],\n    ...\n  }\n}\n# 示例 rpm\n{\n  \"packages\": {\n    \"kernel\": [\n      {\n        \"arch\": \"x86_64\",\n        \"epoch\": null,\n        \"name\": \"kernel\",\n        \"release\": \"514.26.2.el7\",\n        \"source\": \"rpm\",\n        \"version\": \"3.10.0\"\n      },\n      {\n        \"arch\": \"x86_64\",\n        \"epoch\": null,\n        \"name\": \"kernel\",\n        \"release\": \"514.16.1.el7\",\n        \"source\": \"rpm\",\n        \"version\": \"3.10.0\"\n      },\n      {\n        \"arch\": \"x86_64\",\n        \"epoch\": null,\n        \"name\": \"kernel\",\n        \"release\": \"514.10.2.el7\",\n        \"source\": \"rpm\",\n        \"version\": \"3.10.0\"\n      },\n      {\n        \"arch\": \"x86_64\",\n        \"epoch\": null,\n        \"name\": \"kernel\",\n        \"release\": \"514.21.1.el7\",\n        \"source\": \"rpm\",\n        \"version\": \"3.10.0\"\n      },\n      {\n        \"arch\": \"x86_64\",\n        \"epoch\": null,\n        \"name\": \"kernel\",\n        \"release\": \"693.2.2.el7\",\n        \"source\": \"rpm\",\n        \"version\": \"3.10.0\"\n      }\n    ],\n    \"kernel-tools\": [\n      {\n        \"arch\": \"x86_64\",\n        \"epoch\": null,\n        \"name\": \"kernel-tools\",\n        \"release\": \"693.2.2.el7\",\n        \"source\": \"rpm\",\n        \"version\": \"3.10.0\"\n      }\n    ],\n    \"kernel-tools-libs\": [\n      {\n        \"arch\": \"x86_64\",\n        \"epoch\": null,\n        \"name\": \"kernel-tools-libs\",\n        \"release\": \"693.2.2.el7\",\n        \"source\": \"rpm\",\n        \"version\": \"3.10.0\"\n      }\n    ],\n  }\n}\n# 示例 deb\n{\n  \"packages\": {\n    \"libbz2-1.0\": [\n      {\n        \"version\": \"1.0.6-5\",\n        \"source\": \"apt\",\n        \"arch\": \"amd64\",\n        \"name\": \"libbz2-1.0\"\n      }\n    ],\n    \"patch\": [\n      {\n        \"version\": \"2.7.1-4ubuntu1\",\n        \"source\": \"apt\",\n        \"arch\": \"amd64\",\n        \"name\": \"patch\"\n      }\n    ],\n  }\n}\n# 示例 pkg_info\n{\n  \"packages\": {\n    \"curl\": [\n      {\n          \"name\": \"curl\",\n          \"source\": \"pkg_info\",\n          \"version\": \"7.79.0\"\n      }\n    ],\n    \"intel-firmware\": [\n      {\n          \"name\": \"intel-firmware\",\n          \"source\": \"pkg_info\",\n          \"version\": \"20210608v0\"\n      }\n    ],\n  }\n}"

名称

字符串

软件包的名称。

返回值: 始终

来源

字符串

软件包信息来源。

返回值: 始终

版本

字符串

软件包的版本。

返回值: 始终

作者

  • Matthew Jones (@matburt)

  • Brian Coca (@bcoca)

  • Adam Miller (@maxamillion)