diff --git a/lib/ansible/modules/packaging/os/dnf.py b/lib/ansible/modules/packaging/os/dnf.py index d8c2e14787..02dc9edb66 100644 --- a/lib/ansible/modules/packaging/os/dnf.py +++ b/lib/ansible/modules/packaging/os/dnf.py @@ -464,10 +464,10 @@ class DnfModule(YumDnf): def _ensure_dnf(self): if not HAS_DNF: - if PY2: - package = 'python2-dnf' - else: + if not PY2: package = 'python3-dnf' + else: + package = 'python2-dnf' if self.module.check_mode: self.module.fail_json( diff --git a/test/integration/targets/dnf/tasks/main.yml b/test/integration/targets/dnf/tasks/main.yml index aba860fe5a..92e35611eb 100644 --- a/test/integration/targets/dnf/tasks/main.yml +++ b/test/integration/targets/dnf/tasks/main.yml @@ -43,3 +43,7 @@ when: - ansible_distribution == 'Fedora' and ansible_distribution_major_version|int >= 29 - ansible_distribution == 'RedHat' and ansible_distribution_major_version|int >= 8 + +- include: 'python3and2.yml' + when: + - ansible_pkg_mgr == 'dnf' diff --git a/test/integration/targets/dnf/tasks/python3and2.yml b/test/integration/targets/dnf/tasks/python3and2.yml new file mode 100644 index 0000000000..dd59b90f2b --- /dev/null +++ b/test/integration/targets/dnf/tasks/python3and2.yml @@ -0,0 +1,44 @@ +# INSTALLPYTHON3AND2 +# The module `dnf` installs python3-dnf on python3 systems and python2-dnf +# on python2 systems. Fedora 30 and newer have python3 and limited +# support for python2, for example python2-dnf is missing. +# This test proves that python3 and python2 can be installed and the module +# `dnf` works. + +- name: install python2 + dnf: + name: python2 + state: present + +- name: use python2 + set_fact: + ansible_python_interpreter: /usr/bin/python + +- name: install a sample package + dnf: + name: screen + state: present + +- name: clean up sample package + dnf: + name: screen + state: absent + +- name: install python3 + dnf: + name: python3 + state: present + +- name: use python3 + set_fact: + ansible_python_interpreter: /usr/bin/python3 + +- name: install a sample package + dnf: + name: screen + state: present + +- name: clean up sample package + dnf: + name: screen + state: absent