diff options
Diffstat (limited to 'test/integration/targets/yum/tasks/yum.yml')
-rw-r--r-- | test/integration/targets/yum/tasks/yum.yml | 873 |
1 files changed, 873 insertions, 0 deletions
diff --git a/test/integration/targets/yum/tasks/yum.yml b/test/integration/targets/yum/tasks/yum.yml new file mode 100644 index 00000000..9ed00af8 --- /dev/null +++ b/test/integration/targets/yum/tasks/yum.yml @@ -0,0 +1,873 @@ +# Setup by setup_rpm_repo +- set_fact: + package1: dinginessentail + package2: dinginessentail-olive + +# UNINSTALL +- name: uninstall {{ package1 }} + yum: name={{ package1 }} state=removed + register: yum_result + +- name: check {{ package1 }} with rpm + shell: rpm -q {{ package1 }} + ignore_errors: True + register: rpm_result + +- name: verify uninstallation of {{ package1 }} + assert: + that: + - "yum_result is success" + - "rpm_result is failed" + +# UNINSTALL AGAIN +- name: uninstall {{ package1 }} again in check mode + yum: name={{ package1 }} state=removed + check_mode: true + register: yum_result + +- name: verify no change on re-uninstall in check mode + assert: + that: + - "not yum_result is changed" + +- name: uninstall {{ package1 }} again + yum: name={{ package1 }} state=removed + register: yum_result + +- name: verify no change on re-uninstall + assert: + that: + - "not yum_result is changed" + +# INSTALL +- name: install {{ package1 }} in check mode + yum: name={{ package1 }} state=present + check_mode: true + register: yum_result + +- name: verify installation of {{ package1 }} in check mode + assert: + that: + - "yum_result is changed" + +- name: install {{ package1 }} + yum: name={{ package1 }} state=present + register: yum_result + +- name: verify installation of {{ package1 }} + assert: + that: + - "yum_result is success" + - "yum_result is changed" + +- name: verify yum module outputs + assert: + that: + - "'changed' in yum_result" + - "'msg' in yum_result" + - "'results' in yum_result" + +- name: check {{ package1 }} with rpm + shell: rpm -q {{ package1 }} + +# INSTALL AGAIN +- name: install {{ package1 }} again in check mode + yum: name={{ package1 }} state=present + check_mode: true + register: yum_result +- name: verify no change on second install in check mode + assert: + that: + - "not yum_result is changed" + +- name: install {{ package1 }} again + yum: name={{ package1 }} state=present + register: yum_result +- name: verify no change on second install + assert: + that: + - "not yum_result is changed" + +- name: install {{ package1 }} again with empty string enablerepo + yum: name={{ package1 }} state=present enablerepo="" + register: yum_result +- name: verify no change on third install with empty string enablerepo + assert: + that: + - "yum_result is success" + - "not yum_result is changed" + +# This test case is unfortunately distro specific because we have to specify +# repo names which are not the same across Fedora/RHEL/CentOS for base/updates +- name: install {{ package1 }} again with missing repo enablerepo + yum: + name: '{{ package1 }}' + state: present + enablerepo: '{{ repos + ["thisrepodoesnotexist"] }}' + disablerepo: "*" + register: yum_result + when: ansible_distribution == 'CentOS' +- name: verify no change on fourth install with missing repo enablerepo (yum) + assert: + that: + - "yum_result is success" + - "yum_result is not changed" + when: ansible_distribution == 'CentOS' + +# This test case is unfortunately distro specific because we have to specify +# repo names which are not the same across Fedora/RHEL/CentOS for base/updates +- name: install repos again with disable all and enable select repo(s) + yum: + name: '{{ package1 }}' + state: present + enablerepo: '{{ repos }}' + disablerepo: "*" + register: yum_result + when: ansible_distribution == 'CentOS' +- name: verify no change on fourth install with missing repo enablerepo (yum) + assert: + that: + - "yum_result is success" + - "yum_result is not changed" + when: ansible_distribution == 'CentOS' + +- name: install {{ package1 }} again with only missing repo enablerepo + yum: + name: '{{ package1 }}' + state: present + enablerepo: "thisrepodoesnotexist" + ignore_errors: true + register: yum_result +- name: verify no change on fifth install with only missing repo enablerepo (yum) + assert: + that: + - "yum_result is not success" + when: ansible_pkg_mgr == 'yum' +- name: verify no change on fifth install with only missing repo enablerepo (dnf) + assert: + that: + - "yum_result is success" + when: ansible_pkg_mgr == 'dnf' + +# INSTALL AGAIN WITH LATEST +- name: install {{ package1 }} again with state latest in check mode + yum: name={{ package1 }} state=latest + check_mode: true + register: yum_result +- name: verify install {{ package1 }} again with state latest in check mode + assert: + that: + - "not yum_result is changed" + +- name: install {{ package1 }} again with state latest idempotence + yum: name={{ package1 }} state=latest + register: yum_result +- name: verify install {{ package1 }} again with state latest idempotence + assert: + that: + - "not yum_result is changed" + +# INSTALL WITH LATEST +- name: uninstall {{ package1 }} + yum: name={{ package1 }} state=removed + register: yum_result +- name: verify uninstall {{ package1 }} + assert: + that: + - "yum_result is successful" + +- name: copy yum.conf file in case it is missing + copy: + src: yum.conf + dest: /etc/yum.conf + force: False + register: yum_conf_copy + +- block: + - name: install {{ package1 }} with state latest in check mode with config file param + yum: name={{ package1 }} state=latest conf_file=/etc/yum.conf + check_mode: true + register: yum_result + - name: verify install {{ package1 }} with state latest in check mode with config file param + assert: + that: + - "yum_result is changed" + + always: + - name: remove tmp yum.conf file if we created it + file: + path: /etc/yum.conf + state: absent + when: yum_conf_copy is changed + +- name: install {{ package1 }} with state latest in check mode + yum: name={{ package1 }} state=latest + check_mode: true + register: yum_result +- name: verify install {{ package1 }} with state latest in check mode + assert: + that: + - "yum_result is changed" + +- name: install {{ package1 }} with state latest + yum: name={{ package1 }} state=latest + register: yum_result +- name: verify install {{ package1 }} with state latest + assert: + that: + - "yum_result is changed" + +- name: install {{ package1 }} with state latest idempotence + yum: name={{ package1 }} state=latest + register: yum_result +- name: verify install {{ package1 }} with state latest idempotence + assert: + that: + - "not yum_result is changed" + +- name: install {{ package1 }} with state latest idempotence with config file param + yum: name={{ package1 }} state=latest + register: yum_result +- name: verify install {{ package1 }} with state latest idempotence with config file param + assert: + that: + - "not yum_result is changed" + + +# Multiple packages +- name: uninstall {{ package1 }} and {{ package2 }} + yum: name={{ package1 }},{{ package2 }} state=removed + +- name: check {{ package1 }} with rpm + shell: rpm -q {{ package1 }} + ignore_errors: True + register: rpm_package1_result + +- name: check {{ package2 }} with rpm + shell: rpm -q {{ package2 }} + ignore_errors: True + register: rpm_package2_result + +- name: verify packages installed + assert: + that: + - "rpm_package1_result is failed" + - "rpm_package2_result is failed" + +- name: install {{ package1 }} and {{ package2 }} as comma separated + yum: name={{ package1 }},{{ package2 }} state=present + register: yum_result + +- name: verify packages installed + assert: + that: + - "yum_result is success" + - "yum_result is changed" + +- name: check {{ package1 }} with rpm + shell: rpm -q {{ package1 }} + +- name: check {{ package2 }} with rpm + shell: rpm -q {{ package2 }} + +- name: uninstall {{ package1 }} and {{ package2 }} + yum: name={{ package1 }},{{ package2 }} state=removed + register: yum_result + +- name: install {{ package1 }} and {{ package2 }} as list + yum: + name: + - '{{ package1 }}' + - '{{ package2 }}' + state: present + register: yum_result + +- name: verify packages installed + assert: + that: + - "yum_result is success" + - "yum_result is changed" + +- name: check {{ package1 }} with rpm + shell: rpm -q {{ package1 }} + +- name: check {{ package2 }} with rpm + shell: rpm -q {{ package2 }} + +- name: uninstall {{ package1 }} and {{ package2 }} + yum: name={{ package1 }},{{ package2 }} state=removed + register: yum_result + +- name: install {{ package1 }} and {{ package2 }} as comma separated with spaces + yum: + name: "{{ package1 }}, {{ package2 }}" + state: present + register: yum_result + +- name: verify packages installed + assert: + that: + - "yum_result is success" + - "yum_result is changed" + +- name: check {{ package1 }} with rpm + shell: rpm -q {{ package1 }} + +- name: check {{ package2 }} with rpm + shell: rpm -q {{ package2 }} + +- name: uninstall {{ package1 }} and {{ package2 }} + yum: name={{ package1 }},{{ package2 }} state=removed + +- name: install non-existent rpm + yum: + name: 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='/' +- name: install {{ package1 }} + yum: name={{ package1 }} state=present installroot='/' + register: yum_result + +- name: verify installation of {{ package1 }} + assert: + that: + - "yum_result is success" + - "yum_result is changed" + +- name: verify yum module outputs + assert: + that: + - "'changed' in yum_result" + - "'msg' in yum_result" + - "'results' in yum_result" + +- name: check {{ package1 }} with rpm + shell: rpm -q {{ package1 }} --root=/ + +- name: uninstall {{ package1 }} + yum: + name: '{{ package1 }}' + installroot: '/' + state: removed + register: yum_result + +# Seems like some yum versions won't download a package from local file repository, continue to use sos for this test. +# https://stackoverflow.com/questions/58295660/yum-downloadonly-ignores-packages-in-local-repo +- name: Test download_only + yum: + name: sos + state: latest + download_only: true + register: yum_result + +- name: verify download of sos (part 1 -- yum "install" succeeded) + assert: + that: + - "yum_result is success" + - "yum_result is changed" + +- name: uninstall sos (noop) + yum: + name: sos + state: removed + register: yum_result + +- name: verify download of sos (part 2 -- nothing removed during uninstall) + assert: + that: + - "yum_result is success" + - "not yum_result is changed" + +- name: uninstall sos for downloadonly/downloaddir test + yum: + name: sos + state: absent + +- name: Test download_only/download_dir + yum: + name: sos + state: latest + download_only: true + download_dir: "/var/tmp/packages" + register: yum_result + +- name: verify yum output + assert: + that: + - "yum_result is success" + - "yum_result is changed" + +- command: "ls /var/tmp/packages" + register: ls_out + +- name: Verify specified download_dir was used + assert: + that: + - "'sos' in ls_out.stdout" + +- name: install group + yum: + name: "@Custom Group" + state: present + register: yum_result + +- name: verify installation of the group + assert: + that: + - "yum_result is success" + - "yum_result is changed" + +- name: verify yum module outputs + assert: + that: + - "'changed' in yum_result" + - "'msg' in yum_result" + - "'results' in yum_result" + +- name: install the group again + yum: + name: "@Custom Group" + state: present + register: yum_result + +- name: verify nothing changed + assert: + that: + - "yum_result is success" + - "not yum_result is changed" + +- name: verify yum module outputs + assert: + that: + - "'changed' in yum_result" + - "'msg' in yum_result" + - "'results' in yum_result" + +- name: install the group again but also with a package that is not yet installed + yum: + name: + - "@Custom Group" + - '{{ package2 }}' + state: present + register: yum_result + +- name: verify {{ package3 }} is installed + assert: + that: + - "yum_result is success" + - "yum_result is changed" + +- name: verify yum module outputs + assert: + that: + - "'changed' in yum_result" + - "'msg' in yum_result" + - "'results' in yum_result" + +- name: try to install the group again, with --check to check 'changed' + yum: + name: "@Custom Group" + state: present + check_mode: yes + register: yum_result + +- name: verify nothing changed + assert: + that: + - "not yum_result is changed" + +- name: verify yum module outputs + assert: + that: + - "'changed' in yum_result" + - "'msg' in yum_result" + - "'results' in yum_result" + +- name: try to install non existing group + yum: + name: "@non-existing-group" + state: present + register: yum_result + ignore_errors: True + +- name: verify installation of the non existing group failed + assert: + that: + - "yum_result is failed" + - "not yum_result is changed" + - "yum_result is failed" + +- name: verify yum module outputs + assert: + that: + - "'changed' in yum_result" + - "'msg' in yum_result" + - "'results' in yum_result" + +- name: try to install non existing file + yum: + name: /tmp/non-existing-1.0.0.fc26.noarch.rpm + state: present + register: yum_result + ignore_errors: yes + +- name: verify installation failed + assert: + that: + - "yum_result is failed" + - "not yum_result is changed" + +- name: verify yum module outputs + assert: + that: + - "'changed' in yum_result" + - "'msg' in yum_result" + +- name: try to install from non existing url + yum: + name: https://s3.amazonaws.com/ansible-ci-files/test/integration/targets/yum/non-existing-1.0.0.fc26.noarch.rpm + state: present + register: yum_result + ignore_errors: yes + +- name: verify installation failed + assert: + that: + - "yum_result is failed" + - "not yum_result is changed" + +- name: verify yum module outputs + assert: + that: + - "'changed' in yum_result" + - "'msg' in yum_result" + +- name: use latest to install httpd + yum: + name: httpd + state: latest + register: yum_result + +- name: verify httpd was installed + assert: + that: + - "'changed' in yum_result" + +- name: uninstall httpd + yum: + name: httpd + state: removed + +- name: update httpd only if it exists + yum: + name: httpd + state: latest + update_only: yes + register: yum_result + +- name: verify httpd not installed + assert: + that: + - "not yum_result is changed" + - "'Packages providing httpd not installed due to update_only specified' in yum_result.results" + +- name: try to install uncompatible arch rpm on non-ppc64le, should fail + yum: + name: https://s3.amazonaws.com/ansible-ci-files/test/integration/targets/yum/banner-1.3.4-3.el7.ppc64le.rpm + state: present + register: yum_result + ignore_errors: True + when: + - ansible_architecture not in ['ppc64le'] + +- name: verify that yum failed on non-ppc64le + assert: + that: + - "not yum_result is changed" + - "yum_result is failed" + when: + - ansible_architecture not in ['ppc64le'] + +- name: try to install uncompatible arch rpm on ppc64le, should fail + yum: + name: https://s3.amazonaws.com/ansible-ci-files/test/integration/targets/yum/tinyproxy-1.10.0-3.el7.x86_64.rpm + state: present + register: yum_result + ignore_errors: True + when: + - ansible_architecture in ['ppc64le'] + +- name: verify that yum failed on ppc64le + assert: + that: + - "not yum_result is changed" + - "yum_result is failed" + when: + - ansible_architecture in ['ppc64le'] + +# setup for testing installing an RPM from url + +- set_fact: + pkg_name: fpaste + +- name: cleanup + yum: + name: "{{ pkg_name }}" + state: absent + +- set_fact: + pkg_url: https://s3.amazonaws.com/ansible-ci-files/test/integration/targets/yum/fpaste-0.3.7.4.1-2.el7.noarch.rpm + when: ansible_python.version.major == 2 + +- set_fact: + pkg_url: https://s3.amazonaws.com/ansible-ci-files/test/integration/targets/yum/fpaste-0.3.9.2-1.fc28.noarch.rpm + when: ansible_python.version.major == 3 +# setup end + +- name: download an rpm + get_url: + url: "{{ pkg_url }}" + dest: "/tmp/{{ pkg_name }}.rpm" + +- name: install the downloaded rpm + yum: + name: "/tmp/{{ pkg_name }}.rpm" + state: present + disable_gpg_check: true + register: yum_result + +- name: verify installation + assert: + that: + - "yum_result is success" + - "yum_result is changed" + - "yum_result is not failed" + +- name: verify yum module outputs + assert: + that: + - "'changed' in yum_result" + - "'msg' in yum_result" + - "'results' in yum_result" + +- name: install the downloaded rpm again + yum: + name: "/tmp/{{ pkg_name }}.rpm" + state: present + register: yum_result + +- name: verify installation + assert: + that: + - "yum_result is success" + - "not yum_result is changed" + - "yum_result is not failed" + +- name: verify yum module outputs + assert: + that: + - "'changed' in yum_result" + - "'msg' in yum_result" + - "'results' in yum_result" + +- name: clean up + yum: + name: "{{ pkg_name }}" + state: absent + +- name: install from url + yum: + name: "{{ pkg_url }}" + state: present + disable_gpg_check: true + register: yum_result + +- name: verify installation + assert: + that: + - "yum_result is success" + - "yum_result is changed" + - "yum_result is not failed" + +- name: verify yum module outputs + assert: + that: + - "'changed' in yum_result" + - "'msg' in yum_result" + - "'results' in yum_result" + +- name: Create a temp RPM file which does not contain nevra information + file: + name: "/tmp/non_existent_pkg.rpm" + state: touch + +- name: Try installing RPM file which does not contain nevra information + yum: + name: "/tmp/non_existent_pkg.rpm" + state: present + register: no_nevra_info_result + ignore_errors: yes + +- name: Verify RPM failed to install + assert: + that: + - "'changed' in no_nevra_info_result" + - "'msg' in no_nevra_info_result" + +- name: Delete a temp RPM file + file: + name: "/tmp/non_existent_pkg.rpm" + state: absent + +- name: get yum version + yum: + list: yum + register: yum_version + +- name: set yum_version of installed version + set_fact: + yum_version: "{%- if item.yumstate == 'installed' -%}{{ item.version }}{%- else -%}{{ yum_version }}{%- endif -%}" + with_items: "{{ yum_version.results }}" + +- name: Ensure double uninstall of wildcard globs works + block: + - name: "Install lohit-*-fonts" + yum: + name: "lohit-*-fonts" + state: present + + - name: "Remove lohit-*-fonts (1st time)" + yum: + name: "lohit-*-fonts" + state: absent + register: remove_lohit_fonts_1 + + - name: "Verify lohit-*-fonts (1st time)" + assert: + that: + - "remove_lohit_fonts_1 is changed" + - "'msg' in remove_lohit_fonts_1" + - "'results' in remove_lohit_fonts_1" + + - name: "Remove lohit-*-fonts (2nd time)" + yum: + name: "lohit-*-fonts" + state: absent + register: remove_lohit_fonts_2 + + - name: "Verify lohit-*-fonts (2nd time)" + assert: + that: + - "remove_lohit_fonts_2 is not changed" + - "'msg' in remove_lohit_fonts_2" + - "'results' in remove_lohit_fonts_2" + - "'lohit-*-fonts is not installed' in remove_lohit_fonts_2['results']" + +- block: + - name: uninstall {{ package2 }} + yum: name={{ package2 }} state=removed + + - name: check {{ package2 }} with rpm + shell: rpm -q {{ package2 }} + ignore_errors: True + register: rpm_package2_result + + - name: verify {{ package2 }} is uninstalled + assert: + that: + - "rpm_package2_result is failed" + + - name: exclude {{ package2 }} (yum backend) + lineinfile: + dest: /etc/yum.conf + regexp: (^exclude=)(.)* + line: "exclude={{ package2 }}*" + state: present + when: ansible_pkg_mgr == 'yum' + + - name: exclude {{ package2 }} (dnf backend) + lineinfile: + dest: /etc/dnf/dnf.conf + regexp: (^excludepkgs=)(.)* + line: "excludepkgs={{ package2 }}*" + state: present + when: ansible_pkg_mgr == 'dnf' + + # begin test case where disable_excludes is supported + - name: Try install {{ package2 }} without disable_excludes + yum: name={{ package2 }} state=latest + register: yum_package2_result + ignore_errors: True + + - name: verify {{ package2 }} did not install because it is in exclude list + assert: + that: + - "yum_package2_result is failed" + + - name: install {{ package2 }} with disable_excludes + yum: name={{ package2 }} state=latest disable_excludes=all + register: yum_package2_result_using_excludes + + - name: verify {{ package2 }} did install using disable_excludes=all + assert: + that: + - "yum_package2_result_using_excludes is success" + - "yum_package2_result_using_excludes is changed" + - "yum_package2_result_using_excludes is not failed" + + - name: remove exclude {{ package2 }} (cleanup yum.conf) + lineinfile: + dest: /etc/yum.conf + regexp: (^exclude={{ package2 }}*) + line: "exclude=" + state: present + when: ansible_pkg_mgr == 'yum' + + - name: remove exclude {{ package2 }} (cleanup dnf.conf) + lineinfile: + dest: /etc/dnf/dnf.conf + regexp: (^excludepkgs={{ package2 }}*) + line: "excludepkgs=" + state: present + when: ansible_pkg_mgr == 'dnf' + + # Fedora < 26 has a bug in dnf where package excludes in dnf.conf aren't + # actually honored and those releases are EOL'd so we have no expectation they + # will ever be fixed + when: not ((ansible_distribution == "Fedora") and (ansible_distribution_major_version|int < 26)) + +- name: Check that packages with Provides are handled correctly in state=absent + block: + - name: Install test packages + yum: + name: + - https://ansible-ci-files.s3.amazonaws.com/test/integration/targets/yum/test-package-that-provides-toaster-1.3.3.7-1.el7.noarch.rpm + - https://ansible-ci-files.s3.amazonaws.com/test/integration/targets/yum/toaster-1.2.3.4-1.el7.noarch.rpm + disable_gpg_check: true + register: install + + - name: Remove toaster + yum: + name: toaster + state: absent + register: remove + + - name: rpm -qa + command: rpm -qa + register: rpmqa + + - assert: + that: + - install is successful + - install is changed + - remove is successful + - remove is changed + - "'toaster-1.2.3.4' not in rpmqa.stdout" + - "'test-package-that-provides-toaster' in rpmqa.stdout" |