ansible.builtin.dnf 模块 - 使用 dnf 包管理器管理包

注意

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

概要

  • 使用 dnf 包管理器安装、升级、删除和列出包和组。

注意

此模块有一个对应的 操作插件

要求

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

  • python3-dnf

参数

参数

注释

allow_downgrade

布尔值

在 Ansible 2.7 中添加

指定是否允许命名的包和版本降级可能已安装的更高版本的包。请注意,设置 allow_downgrade=true 会使此模块的行为非幂等。任务最终可能得到一组不匹配要安装的完整指定包列表的包(因为降级包与其他包之间的依赖关系会导致对先前事务中存在的包进行更改)。

选择

  • false ← (默认)

  • true

allowerasing

布尔值

在 ansible-base 2.10 中添加

如果 true,它允许擦除已安装的包以解决依赖关系。

选择

  • false ← (默认)

  • true

autoremove

布尔值

如果 true,则从系统中删除所有最初作为用户安装包的依赖项安装的“叶”包,但这些包不再被任何此类包需要。应单独使用或与 state=absent 一起使用。

选择

  • false ← (默认)

  • true

best

布尔值

在 ansible-core 2.17 中添加

当设置为 true 时,要么使用可用的最高版本包,要么失败。

当设置为 false 时,如果无法安装最新版本,则使用较低版本。

默认值由操作系统发行版设置。

选择

  • false

  • true

bugfix

布尔值

在 Ansible 2.7 中添加

如果设置为 true,并且 state=latest,则仅安装被标记为与 bugfix 相关的更新。

请注意,与 dnf upgrade-minimal 类似,此过滤器也适用于依赖项。

选择

  • false ← (默认)

  • true

cacheonly

布尔值

在 ansible-core 2.12 中添加

告诉 dnf 完全从系统缓存中运行;不下载或更新元数据。

选择

  • false ← (默认)

  • true

conf_file

字符串

要用于事务的远程 dnf 配置文件。

disable_excludes

字符串

在 Ansible 2.7 中添加

禁用 DNF 配置文件中定义的排除项。

如果设置为 all,则禁用所有排除项。

如果设置为 main,则禁用在 dnf.conf 中的 [main] 中定义的排除项。

如果设置为 repoid,则禁用为给定存储库 ID 定义的排除项。

disable_gpg_check

布尔值

是否禁用对正在安装的包的签名的 GPG 检查。仅当 state=presentstate=latest 时有效。

此设置会影响从存储库安装的包以及从文件系统或 URL 安装的“本地”包。

选择

  • false ← (默认)

  • true

disable_plugin

列表 / 元素=字符串

在 Ansible 2.7 中添加

要为安装/更新操作禁用的 Plugin 名称。禁用的插件不会在事务之外持续存在。

默认值: []

disablerepo

列表 / 元素=字符串

要为安装/更新操作禁用的存储库的 Repoid。这些存储库不会在事务之外持续存在。当指定多个存储库时,用 , 分隔它们。

默认值: []

download_dir

字符串

在 Ansible 2.8 中添加

指定一个替代目录来存储包。

仅当指定了 download_only 时才有效。

download_only

布尔值

在 Ansible 2.7 中添加

仅下载包,不安装它们。

选择

  • false ← (默认)

  • true

enable_plugin

列表 / 元素=字符串

在 Ansible 2.7 中添加

要为安装/更新操作启用的 Plugin 名称。启用的插件不会在事务之外持续存在。

默认值: []

enablerepo

列表 / 元素=字符串

要为安装/更新操作启用的存储库的 Repoid。这些存储库不会在事务之外持续存在。当指定多个存储库时,用“,”分隔它们。

默认值: []

exclude

列表 / 元素=字符串

在 Ansible 2.7 中添加

state=present 或 latest 时,要排除的包名称。这可以是列表或逗号分隔的字符串。

默认值: []

install_repoquery

布尔值

在 Ansible 2.7 中添加

这在 DNF 中实际上是一个无操作,因为它在 DNF 中不需要。

此选项已弃用,将在 ansible-core 2.20 中删除。

选择

  • false

  • true ← (默认)

install_weak_deps

布尔值

在 Ansible 2.8 中添加

还将安装由弱依赖关系链接的所有包。

选择

  • false

  • true ← (默认)

installroot

字符串

指定一个相对于它将安装所有包的替代 installroot。

默认值: "/"

list

字符串

用于与 /usr/bin/ansible(而不是剧本)一起使用的各种(非幂等)命令。使用 ansible.builtin.package_facts 而不是 list 参数作为最佳实践。

lock_timeout

整数

在 Ansible 2.8 中添加

等待 dnf 锁定文件释放的时间。

默认值: 30

name

别名:pkg

列表 / 元素=字符串

包名称或包规范符(包含版本),例如 name-1.0。使用 state=latest 时,这可以是“*”,这意味着运行:dnf -y update。您还可以传递指向 rpm 文件的 URL 或本地路径。若要对多个包进行操作,这可以接受逗号分隔的包字符串或包列表。

包版本的比较运算符在此处有效 ><>=<=。示例 - name >= 1.0。运算符周围需要空格。

您还可以传递由要安装的包提供的二进制文件的绝对路径。有关更多信息,请参见示例。

默认值: []

nobest

布尔值

在 ansible-core 2.11 中添加

这是 best 选项的相反选项,出于向后兼容性的目的而保留。

从 ansible-core 2.17 开始,默认值由操作系统发行版设置。

选择

  • false

  • true

releasever

字符串

指定一个替代发行版,从中将安装所有包。

security

布尔值

在 Ansible 2.7 中添加

如果设置为 true,并且 state=latest,则仅安装被标记为与安全相关的更新。

请注意,与 dnf upgrade-minimal 类似,此过滤器也适用于依赖项。

选择

  • false ← (默认)

  • true

skip_broken

布尔值

在 Ansible 2.7 中添加

跳过所有不可用或依赖关系已损坏的软件包,不会引发错误。等同于传递 --skip-broken 选项。

选择

  • false ← (默认)

  • true

sslverify

布尔值

在 ansible-core 2.13 中添加

禁用此事务中存储库服务器的 SSL 验证。

如果配置的存储库之一使用不受信任或自签名证书,则应将此设置为 false

选择

  • false

  • true ← (默认)

state

字符串

是安装 (present, latest),还是删除 (absent) 软件包。

默认值为 None,但实际上,默认操作为 present,除非 autoremove=true,在这种情况下,会推断为 absent

选择

  • "absent"

  • "present"

  • "installed"

  • "removed"

  • "latest"

update_cache

别名: expire-cache

布尔值

在 Ansible 2.7 中添加

强制 dnf 检查缓存是否已过期,并在需要时重新下载。仅当 state=presentstate=latest 时才有效。

选择

  • false ← (默认)

  • true

update_only

布尔值

在 Ansible 2.7 中添加

在使用最新版本时,仅更新已安装的软件包。不要安装软件包。

仅当 state=presentstate=latest 时才有效。

选择

  • false ← (默认)

  • true

use_backend

字符串

在 ansible-core 2.15 中添加

要使用的后端模块。

选择

  • "auto" (默认): 根据 ansible_facts.pkg_mgr 事实自动选择后端。

  • "dnf": ansible.builtin.dnf

  • "dnf4": dnf 的别名

  • "dnf5": ansible.builtin.dnf5

  • "yum": auto 的别名(参见备注)

  • "yum4": dnf 的别名

validate_certs

布尔值

在 Ansible 2.7 中添加

这仅适用于将 https url 用作 rpm 来源的情况。例如,对于 localinstall。如果设置为 false,则不会验证 SSL 证书。

仅应在使用自签名证书的个人控制站点上将此设置为 false,因为它避免了验证源站点。

选择

  • false

  • true ← (默认)

属性

属性

支持

描述

action

支持: 部分

dnf 有 2 个在后台使用它的操作插件,ansible.builtin.dnfansible.builtin.package

表明这有一个对应操作插件,因此选项的某些部分可以在控制器上执行

async

支持:

支持与 async 关键字一起使用

bypass_host_loop

支持:

强制执行“全局”任务,该任务不会按主机执行,这将绕过按主机模板化和串行、节流以及其他循环注意事项

条件将按使用 run_once 时的方式工作,使用的变量将来自第一个可用主机

此操作在锁步策略之外将无法正常工作

check_mode

支持: 完整

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

diff_mode

支持: 完整

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

platform

平台: rhel

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

备注

注意

  • loop: 一起使用时,每个软件包都将单独处理,将列表直接传递给 name 选项效率更高。

  • 如果组是使用 Ansible 安装的,则组删除不起作用,因为上游 dnf 的 API 无法正确地将组标记为已安装,因此在删除时,模块无法检测到组是否已安装 https://bugzilla.redhat.com/show_bug.cgi?id=1620324

  • 虽然为语法兼容性提供了 use_backend=yum 和将操作插件称为 ansible.builtin.yum 的功能,但 YUM 后端已在 ansible-core 2.17 中删除,因为任何受支持的 Python 版本都无法使用所需的库。如果您依赖此功能,请使用旧版本的 Ansible。

示例

- name: Install the latest version of Apache
  ansible.builtin.dnf:
    name: httpd
    state: latest

- name: Install Apache >= 2.4
  ansible.builtin.dnf:
    name: httpd >= 2.4
    state: present

- name: Install the latest version of Apache and MariaDB
  ansible.builtin.dnf:
    name:
      - httpd
      - mariadb-server
    state: latest

- name: Remove the Apache package
  ansible.builtin.dnf:
    name: httpd
    state: absent

- name: Install the latest version of Apache from the testing repo
  ansible.builtin.dnf:
    name: httpd
    enablerepo: testing
    state: present

- name: Upgrade all packages
  ansible.builtin.dnf:
    name: "*"
    state: latest

- name: Update the webserver, depending on which is installed on the system. Do not install the other one
  ansible.builtin.dnf:
    name:
      - httpd
      - nginx
    state: latest
    update_only: yes

- name: Install the nginx rpm from a remote repo
  ansible.builtin.dnf:
    name: 'https://nginx.ac.cn/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm'
    state: present

- name: Install nginx rpm from a local file
  ansible.builtin.dnf:
    name: /usr/local/src/nginx-release-centos-6-0.el6.ngx.noarch.rpm
    state: present

- name: Install Package based upon the file it provides
  ansible.builtin.dnf:
    name: /usr/bin/cowsay
    state: present

- name: Install the 'Development tools' package group
  ansible.builtin.dnf:
    name: '@Development tools'
    state: present

- name: Autoremove unneeded packages installed as dependencies
  ansible.builtin.dnf:
    autoremove: yes

- name: Uninstall httpd but keep its dependencies
  ansible.builtin.dnf:
    name: httpd
    state: absent
    autoremove: no

- name: Install a modularity appstream with defined stream and profile
  ansible.builtin.dnf:
    name: '@postgresql:9.6/client'
    state: present

- name: Install a modularity appstream with defined stream
  ansible.builtin.dnf:
    name: '@postgresql:9.6'
    state: present

- name: Install a modularity appstream with defined profile
  ansible.builtin.dnf:
    name: '@postgresql/client'
    state: present

作者

  • Igor Gnatenko (@ignatenkobrain)

  • Cristian van Ee (@DJMuggs) <cristian at cvee.org>

  • Berend De Schouwer (@berenddeschouwer)

  • Adam Miller (@maxamillion)