state=latest now installs modules when missing. Fixes #73457 (#86328)

This commit is contained in:
sivel / Matt Martz 2025-12-15 12:08:59 -06:00 committed by GitHub
parent 039b94c23d
commit 85d20838ce
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 65 additions and 1 deletions

View file

@ -0,0 +1,2 @@
bugfixes:
- dnf - When installing a dnf module, install and enable when missing, upgrade when present (https://github.com/ansible/ansible/issues/73457)

View file

@ -1013,8 +1013,12 @@ class DnfModule(YumDnf):
for module in module_specs:
try:
if self._is_module_installed(module):
self.module_base.upgrade([module])
response['results'].append("Module {0} upgraded.".format(module))
self.module_base.upgrade([module])
else:
self.module_base.install([module])
self.module_base.enable([module])
response['results'].append("Module {0} installed.".format(module))
except dnf.exceptions.MarkingErrors as e:
failure_response['failures'].append(' '.join((module, to_native(e))))

View file

@ -93,3 +93,61 @@
that:
- "not dnf_result.failed"
- "not dnf_result.changed"
- name: install "{{ astream_name }}" module with state=latest
dnf:
name: "{{ astream_name }}"
state: latest
register: dnf_result
- name: verify installation of "{{ astream_name }}" module with state=latest
assert:
that:
- dnf_result is not failed
- dnf_result is changed
- name: install "{{ astream_name }}" module with state=latest again (idempotency)
dnf:
name: "{{ astream_name }}"
state: latest
register: dnf_result
- name: verify installation of "{{ astream_name }}" module with state=latest again (idempotency)
assert:
that:
- dnf_result is not failed
- dnf_result is not changed
- name: uninstall "{{ astream_name }}" module
dnf:
name: "{{ astream_name }}"
state: absent
- name: install "{{ astream_name_no_stream }}" module with state=latest without providing stream
dnf:
name: "{{ astream_name_no_stream }}"
state: latest
register: dnf_result
- name: verify installation of "{{ astream_name_no_stream }}" module with state=latest without providing stream
assert:
that:
- dnf_result is not failed
- dnf_result is changed
- name: install "{{ astream_name_no_stream }}" module with state=latest again without providing stream (idempotency)
dnf:
name: "{{ astream_name_no_stream }}"
state: latest
register: dnf_result
- name: verify installation of "{{ astream_name_no_stream }}" module with state=latest again without providing stream (idempotency)
assert:
that:
- dnf_result is not failed
- dnf_result is not changed
- name: uninstall "{{ astream_name_no_stream }}" module
dnf:
name: "{{ astream_name_no_stream }}"
state: absent