无法使用 Ansible 和 dnf check-update 显示可用更新

无法使用 Ansible 和 dnf check-update 显示可用更新

我有以下 Ansible 代码,用于检查 Rocky Linux 服务器上的可用更新并向用户显示它们:

- name: Check updates
  ansible.builtin.command:
    cmd: dnf check-update
  register: updates

- name: Show result
  ansible.builtin.debug:
    msg: '{{ updates }}'

如果我在目标机器 shell 中直接运行相同的命令,我会得到预期的结果:

[user@host ~]$ dnf check-update
Last metadata expiration check: 0:19:37 ago on 2022-08-03.

bash.x86_64                                                    4.4.20-4.el8_6                                                      baseos   
conmon.x86_64                                                  2:2.1.2-2.module+el8.6.0+997+05c9d812                               appstream
container-selinux.noarch                                       2:2.188.0-1.module+el8.6.0+997+05c9d812                             appstream
containernetworking-plugins.x86_64                             1:1.1.1-3.module+el8.6.0+997+05c9d812                               appstream
...

但是运行 Ansible 时缺少包列表:

TASK [example : Show result] *********************************************************************************
ok: [127.0.0.1] => 
  msg:
    changed: true
    cmd: dnf check-update
    delta: '0:00:01.438742'
    end: '2022-08-03 12:02:39.027193'
    failed: false
    rc: 0
    start: '2022-08-03 12:02:37.588451'
    stderr: ''
    stderr_lines: []
    stdout: 'Last metadata expiration check: 0:13:15 ago on 2022-08-03.'
stdout_lines:
- 'Last metadata expiration check: 0:13:15 ago on 2022-08-03.'

详细模式也不会显示包列表。

我正在使用 Ansible 2.11.1。 上也有相同的行为2.13.2。 我尝试使用shell模块而不是模块command,但没有什么区别。 如何在 Ansible 运行期间使可用更新列表可见?

答案1

我不知道为什么stdout您的示例中不包含相同的信息。我无法重现这一点。如果我针对fedora:latestdocker 镜像进行测试,在两种情况下我都会得到相同的输出。我的情况唯一的怪癖是,如果您不想在 ansible 认为失败的情况下结束剧本,则需要忽略dnf check-updates返回的内容。rc=100

但无论如何,我认为使用shellcommand不是处理您的要求的正确方法。

Ansible 提供了dnf模块你可以使用它来处理你的包裹。该模块有一个list范围文档有点稀疏。但它基本上接受与yum模块

这就是我获取所需信息的方式。

注意:我制作了一个 quickNdirty 模板,以便得到一个与调试任务中输出的内容大致相同的输出dnf check-update。但您可以调试整个packages已注册的变量,以查看所有可用信息并以最佳方式使用它。

---
- hosts: all
  gather_facts: false
  
  tasks:
    - name: Check packages to upgrade
      dnf:
        list: updates
      register: packages

    - name: Show packages to upgrade
      debug:
        msg: >-
          {%- set output=[] -%}
          {%- for p in packages.results -%}
          {{ output.append('%-40s' % (p.name ~ '-' ~ p.version) ~ ' | repo: ' ~ p.repo) }}
          {%- endfor -%}
          {{ output }}

fedora:latest这对我刚刚下载的图像运行:

PLAY [all] *******************************************************************************************************************************

TASK [Check packages to upgrade] *********************************************************************************************************
ok: [testfed]

TASK [Show packages to upgrade] **********************************************************************************************************
ok: [testfed] => {
    "msg": [
        "authselect-1.4.0                         | repo: updates",
        "authselect-libs-1.4.0                    | repo: updates",
        "ca-certificates-2022.2.54                | repo: updates",
        "coreutils-9.0                            | repo: updates",
        "coreutils-common-9.0                     | repo: updates",
        "crypto-policies-20220428                 | repo: updates",
        "curl-7.82.0                              | repo: updates",
        "dnf-4.13.0                               | repo: updates",
        "dnf-data-4.13.0                          | repo: updates",
        "elfutils-default-yama-scope-0.187        | repo: updates",
        "elfutils-libelf-0.187                    | repo: updates",
        "elfutils-libs-0.187                      | repo: updates",
        "fedora-release-common-36                 | repo: updates",
        "fedora-release-container-36              | repo: updates",
        "fedora-release-identity-container-36     | repo: updates",
        "filesystem-3.18                          | repo: updates",
        "glib2-2.72.3                             | repo: updates",
        "glibc-2.35                               | repo: updates",
        "glibc-common-2.35                        | repo: updates",
        "glibc-minimal-langpack-2.35              | repo: updates",
        "gnupg2-2.3.7                             | repo: updates",
        "gnutls-3.7.7                             | repo: updates",
        "krb5-libs-1.19.2                         | repo: updates",
        "libarchive-3.5.3                         | repo: updates",
        "libblkid-2.38                            | repo: updates",
        "libcap-ng-0.8.3                          | repo: updates",
        "libcurl-7.82.0                           | repo: updates",
        "libdnf-0.67.0                            | repo: updates",
        "libgcc-12.1.1                            | repo: updates",
        "libgcrypt-1.10.1                         | repo: updates",
        "libgomp-12.1.1                           | repo: updates",
        "libgpg-error-1.45                        | repo: updates",
        "libidn2-2.3.3                            | repo: updates",
        "libmount-2.38                            | repo: updates",
        "librepo-1.14.3                           | repo: updates",
        "libsmartcols-2.38                        | repo: updates",
        "libsolv-0.7.22                           | repo: updates",
        "libstdc++-12.1.1                         | repo: updates",
        "libtirpc-1.3.2                           | repo: updates",
        "libuuid-2.38                             | repo: updates",
        "libxml2-2.9.14                           | repo: updates",
        "libzstd-1.5.2                            | repo: updates",
        "lua-libs-5.4.4                           | repo: updates",
        "nettle-3.8                               | repo: updates",
        "openldap-2.6.2                           | repo: updates",
        "openldap-compat-2.6.2                    | repo: updates",
        "openssl-libs-3.0.5                       | repo: updates",
        "pam-1.5.2                                | repo: updates",
        "pam-libs-1.5.2                           | repo: updates",
        "pcre2-10.40                              | repo: updates",
        "pcre2-syntax-10.40                       | repo: updates",
        "python3-3.10.5                           | repo: updates",
        "python3-dnf-4.13.0                       | repo: updates",
        "python3-hawkey-0.67.0                    | repo: updates",
        "python3-libdnf-0.67.0                    | repo: updates",
        "python3-libs-3.10.5                      | repo: updates",
        "python3-rpm-4.17.1                       | repo: updates",
        "rpm-4.17.1                               | repo: updates",
        "rpm-build-libs-4.17.1                    | repo: updates",
        "rpm-libs-4.17.1                          | repo: updates",
        "rpm-sign-libs-4.17.1                     | repo: updates",
        "setup-2.14.1                             | repo: updates",
        "systemd-libs-250.8                       | repo: updates",
        "tpm2-tss-3.2.0                           | repo: updates",
        "tzdata-2022a                             | repo: updates",
        "util-linux-core-2.38                     | repo: updates",
        "vim-data-9.0.137                         | repo: updates",
        "vim-minimal-9.0.137                      | repo: updates",
        "yum-4.13.0                               | repo: updates",
        "zchunk-libs-1.2.2                        | repo: updates"
    ]
}

}

PLAY RECAP *******************************************************************************************************************************
testfed                    : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

相关内容