# make a installroot - name: Create installroot command: mktemp -d "{{ remote_tmp_dir }}/ansible.test.XXXXXX" register: yumroot #- name: Populate directory # file: # path: "/{{ yumroot.stdout }}/etc/" # state: directory # mode: 0755 # #- name: Populate directory2 # copy: # content: "[main]\ndistropkgver={{ ansible_distribution_version }}\n" # dest: "/{{ yumroot.stdout }}/etc/yum.conf" - name: Make a necessary directory file: path: "{{ yumroot.stdout }}/etc/yum/vars/" state: directory mode: 0755 - name: get yum releasever command: "{{ ansible_python_interpreter }} -c 'import yum; yb = yum.YumBase(); print(yb.conf.yumvar[\"releasever\"])'" register: releasever ignore_errors: yes - name: Populate directory copy: content: "{{ releasever.stdout_lines[-1] }}\n" dest: "/{{ yumroot.stdout }}/etc/yum/vars/releasever" when: releasever is successful # This will drag in > 200 MB. - name: attempt installroot yum: name=zlib installroot="{{ yumroot.stdout }}/" disable_gpg_check=yes register: yum_result - name: check sos with rpm in installroot shell: rpm -q zlib --root="{{ yumroot.stdout }}/" failed_when: False register: rpm_result - name: verify installation of sos assert: that: - "yum_result.rc == 0" - "yum_result.changed" - "rpm_result.rc == 0" - name: verify yum module outputs assert: that: - "'changed' in yum_result" - "'msg' in yum_result" - "'rc' in yum_result" - "'results' in yum_result" - name: cleanup installroot file: path: "{{ yumroot.stdout }}/" state: absent # Test for releasever working correctly # # Bugfix: https://github.com/ansible/ansible/issues/67050 # # This test case is based on a reproducer originally reported on Reddit: # https://www.reddit.com/r/ansible/comments/g2ps32/ansible_yum_module_throws_up_an_error_when/ # # NOTE: For the Ansible upstream CI we can only run this for RHEL7 because the # containerized runtimes in shippable don't allow the nested mounting of # buildah container volumes. - name: perform yuminstallroot in a buildah mount with releasever when: - ansible_facts["distribution_major_version"] == "7" - ansible_facts["distribution"] == "RedHat" block: - name: install required packages for buildah test yum: state: present name: - buildah - name: create buildah container from scratch command: "buildah --name yum_installroot_releasever_test from scratch" - name: mount the buildah container command: "buildah mount yum_installroot_releasever_test" register: buildah_mount - name: figure out yum value of $releasever shell: python -c 'import yum; yb = yum.YumBase(); print(yb.conf.yumvar["releasever"])' | tail -1 register: buildah_host_releasever - name: test yum install of python using releasever yum: name: 'python' state: present installroot: "{{ buildah_mount.stdout }}" releasever: "{{ buildah_host_releasever.stdout }}" register: yum_result - name: verify installation of python assert: that: - "yum_result.rc == 0" - "yum_result.changed" - "rpm_result.rc == 0" - name: remove python before another test yum: name: 'python' state: absent installroot: "{{ buildah_mount.stdout }}" releasever: "{{ buildah_host_releasever.stdout }}" - name: test yum install of python using releasever with latest yum: name: 'python' state: latest installroot: "{{ buildah_mount.stdout }}" releasever: "{{ buildah_host_releasever.stdout }}" register: yum_result - name: verify installation of python assert: that: - "yum_result.rc == 0" - "yum_result.changed" - "rpm_result.rc == 0" always: - name: remove buildah container command: "buildah rm yum_installroot_releasever_test" ignore_errors: yes - name: remove buildah from CI system yum: state: absent name: - buildah