# UNINSTALL 'python2-dnf' # The `dnf` module has the smarts to auto-install the relevant python # bindings. To test, we will first uninstall python2-dnf (so that the tests # on python2 will require python2-dnf) - name: check python2-dnf with rpm shell: rpm -q python2-dnf register: rpm_result ignore_errors: true # Don't uninstall python2-dnf with the `dnf` module in case it needs to load # some dnf python files after the package is uninstalled. - name: uninstall python2-dnf with shell shell: dnf -y remove python2-dnf when: rpm_result is successful # UNINSTALL # With 'python2-dnf' uninstalled, the first call to 'dnf' should install # python2-dnf. - name: uninstall sos dnf: name: sos state: removed register: dnf_result - name: check sos with rpm shell: rpm -q sos failed_when: False register: rpm_result - name: verify uninstallation of sos assert: that: - "not dnf_result.failed | default(False)" - "rpm_result.rc == 1" # UNINSTALL AGAIN - name: uninstall sos dnf: name: sos state: removed register: dnf_result - name: verify no change on re-uninstall assert: that: - "not dnf_result.changed" # INSTALL - name: install sos dnf: name: sos state: present register: dnf_result - name: check sos with rpm shell: rpm -q sos failed_when: False register: rpm_result - name: verify installation of sos assert: that: - "not dnf_result.failed | default(False)" - "dnf_result.changed" - "rpm_result.rc == 0" - name: verify dnf module outputs assert: that: - "'changed' in dnf_result" - "'results' in dnf_result" # INSTALL AGAIN - name: install sos again dnf: name: sos state: present register: dnf_result - name: verify no change on second install assert: that: - "not dnf_result.changed" # Multiple packages - name: uninstall sos and sharutils dnf: name=sos,sharutils state=removed register: dnf_result - name: check sos with rpm shell: rpm -q sos failed_when: False register: rpm_sos_result - name: check sharutils with rpm shell: rpm -q sharutils failed_when: False register: rpm_sharutils_result - name: verify packages installed assert: that: - "rpm_sos_result.rc != 0" - "rpm_sharutils_result.rc != 0" - name: install sos and sharutils as comma separated dnf: name=sos,sharutils state=present register: dnf_result - name: check sos with rpm shell: rpm -q sos failed_when: False register: rpm_sos_result - name: check sharutils with rpm shell: rpm -q sharutils failed_when: False register: rpm_sharutils_result - name: verify packages installed assert: that: - "not dnf_result.failed | default(False)" - "dnf_result.changed" - "rpm_sos_result.rc == 0" - "rpm_sharutils_result.rc == 0" - name: uninstall sos and sharutils dnf: name=sos,sharutils state=removed register: dnf_result - name: install sos and sharutils as list dnf: name: - sos - sharutils state: present register: dnf_result - name: check sos with rpm shell: rpm -q sos failed_when: False register: rpm_sos_result - name: check sharutils with rpm shell: rpm -q sharutils failed_when: False register: rpm_sharutils_result - name: verify packages installed assert: that: - "not dnf_result.failed | default(False)" - "dnf_result.changed" - "rpm_sos_result.rc == 0" - "rpm_sharutils_result.rc == 0" - name: uninstall sos and sharutils dnf: name: "sos,sharutils" state: removed register: dnf_result - name: install sos and sharutils as comma separated with spaces dnf: name: "sos, sharutils" state: present register: dnf_result - name: check sos with rpm shell: rpm -q sos failed_when: False register: rpm_sos_result - name: check sos with rpm shell: rpm -q sharutils failed_when: False register: rpm_sharutils_result - name: verify packages installed assert: that: - "not dnf_result.failed | default(False)" - "dnf_result.changed" - "rpm_sos_result.rc == 0" - "rpm_sharutils_result.rc == 0" - name: uninstall sos and sharutils dnf: name: - sos - sharutils state: removed - name: install non-existent rpm dnf: name: "{{ item }}" with_items: - does-not-exist register: non_existent_rpm ignore_errors: True - name: check non-existent rpm install failed assert: that: - non_existent_rpm is failed # Install in installroot='/'. This should be identical to default - name: install sos in / dnf: name=sos state=present installroot='/' register: dnf_result - name: check sos with rpm in / shell: rpm -q sos --root=/ failed_when: False register: rpm_result - name: verify installation of sos in / assert: that: - "not dnf_result.failed | default(False)" - "dnf_result.changed" - "rpm_result.rc == 0" - name: verify dnf module outputs in / assert: that: - "'changed' in dnf_result" - "'results' in dnf_result" - name: uninstall sos in / dnf: name=sos installroot='/' register: dnf_result # GROUP INSTALL # Using 'Books and Guides' because it is only 5 packages and a 7.3 M download on Fedora 26. # It also doesn't install anything that will tamper with our Python environment. - name: install Books and Guides group dnf: name: "@Books and Guides" state: present register: dnf_result - name: verify installation of the group assert: that: - "not dnf_result.failed | default(False)" - "dnf_result.changed" - name: verify dnf module outputs assert: that: - "'changed' in dnf_result" - "'results' in dnf_result" - name: install the group again dnf: name: "@Books and Guides" state: present register: dnf_result - name: verify nothing changed assert: that: - "not dnf_result.changed" - name: verify dnf module outputs assert: that: - "'changed' in dnf_result" - "'msg' in dnf_result" - name: install the group again but also with a package that is not yet installed dnf: name: - "@Books and Guides" - bc state: present register: dnf_result - name: verify bc is installed assert: that: - "dnf_result.changed" - name: verify dnf module outputs assert: that: - "'changed' in dnf_result" - "'results' in dnf_result" - name: try to install the group again, with --check to check 'changed' dnf: name: "@Books and Guides" state: present check_mode: yes register: dnf_result - name: verify nothing changed assert: that: - "not dnf_result.changed" - name: verify dnf module outputs assert: that: - "'changed' in dnf_result" - "'msg' in dnf_result" # cleanup until https://github.com/ansible/ansible/issues/27377 is resolved - shell: dnf -y group install "Books and Guides" && dnf -y group remove "Books and Guides" # GROUP UPGRADE - this will go to the same method as group install # but through group_update - it is its invocation we're testing here # see commit 119c9e5d6eb572c4a4800fbe8136095f9063c37b - name: install latest Books and Guides dnf: name: "@Books and Guides" state: latest register: dnf_result - name: verify installation of the group assert: that: - "not dnf_result.failed | default(False)" - "dnf_result.changed" - name: verify dnf module outputs assert: that: - "'changed' in dnf_result" - "'results' in dnf_result" # cleanup until https://github.com/ansible/ansible/issues/27377 is resolved - shell: dnf -y group install "Books and Guides" && dnf -y group remove "Books and Guides" - name: try to install non existing group dnf: name: "@non-existing-group" state: present register: dnf_result ignore_errors: True - name: verify installation of the non existing group failed assert: that: - "not dnf_result.changed" - "dnf_result is failed" - name: verify dnf module outputs assert: that: - "'changed' in dnf_result" - "'msg' in dnf_result" - name: try to install non existing file dnf: name: /tmp/non-existing-1.0.0.fc26.noarch.rpm state: present register: dnf_result ignore_errors: yes - name: verify installation failed assert: that: - "dnf_result is failed" - "not dnf_result.changed" - name: verify dnf module outputs assert: that: - "'changed' in dnf_result" - "'msg' in dnf_result" - name: try to install from non existing url dnf: name: http://non-existing.com/non-existing-1.0.0.fc26.noarch.rpm state: present register: dnf_result ignore_errors: yes - name: verify installation failed assert: that: - "dnf_result is failed" - "not dnf_result.changed" - name: verify dnf module outputs assert: that: - "'changed' in dnf_result" - "'msg' in dnf_result" # ENVIRONMENT UPGRADE # see commit de299ef77c03a64a8f515033a79ac6b7db1bc710 - name: install Web Server environment dnf: name: "@Web Server" state: latest register: dnf_result - name: verify installation of the environment assert: that: - "not dnf_result.failed | default(False)" - "dnf_result.changed" - name: verify dnf module outputs assert: that: - "'changed' in dnf_result" - "'results' in dnf_result" # https://github.com/ansible/ansible/issues/39704 - name: install non-existent rpm, state=latest dnf: name: non-existent-rpm state: latest ignore_errors: yes register: dnf_result - name: verify the result assert: that: - "dnf_result is failed" - "'non-existent-rpm' in dnf_result['failures'][0]" - "'no package matched' in dnf_result['failures'][0]" - "'Failed to install some of the specified packages' in dnf_result['msg']"