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

注意

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

概要

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

要求

执行此模块的主机需要满足以下要求。

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

参数

参数

注释

manager

列表 / 元素=字符串

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

在 2.8 版本中添加了 portagepkg 选项。

在 2.11 版本中添加了 apk 选项。

在 2.13 版本中添加了 pkg_info 选项。

在 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 或 Fedora 41+ 上 (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 主机事实中,并且可以像任何其他主机事实一样按名称引用。它们无需注册即可使用。

描述

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)