![无法使用 Ansible 和 dnf check-update 显示可用更新](https://linux22.com/image/779172/%E6%97%A0%E6%B3%95%E4%BD%BF%E7%94%A8%20Ansible%20%E5%92%8C%20dnf%20check-update%20%E6%98%BE%E7%A4%BA%E5%8F%AF%E7%94%A8%E6%9B%B4%E6%96%B0.png)
我有以下 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:latest
docker 镜像进行测试,在两种情况下我都会得到相同的输出。我的情况唯一的怪癖是,如果您不想在 ansible 认为失败的情况下结束剧本,则需要忽略dnf check-updates
返回的内容。rc=100
但无论如何,我认为使用shell
或command
不是处理您的要求的正确方法。
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