Add --installroot to YUM and DNF modules, issue #11310 (#19861)

* Add --installroot to YUM and DNF modules, issue #11310

This continues ansible-modules-core#1558, and
ansible-modules-core#1669

Allow specifying installroot for the yum and dnf modules
to install and remove packages in a location other than /.

* Remove empty aliases

* Simpler installroot set default logic
This commit is contained in:
berenddeschouwer 2017-01-05 05:20:00 +02:00 committed by Toshio Kuratomi
commit 1fdcda0996
8 changed files with 265 additions and 43 deletions

View file

@ -19,4 +19,14 @@
# Note: We install the yum package onto Fedora so that this will work on dnf systems
# We want to test that for people who don't want to upgrade their systems.
- include: 'yum.yml'
when: ansible_distribution in ['RedHat', 'CentOS', 'ScientificLinux', 'Fedora'] and ansible_python.version.major == 2
when: ansible_distribution in ['RedHat', 'CentOS', 'ScientificLinux', 'Fedora'] and
ansible_python.version.major == 2
# We can't run yum --installroot tests on dnf systems. Dnf systems revert to
# yum-deprecated, and yum-deprecated refuses to run if yum.conf exists
# so we cannot configure yum-deprecated correctly in an empty /tmp/fake.root/
# It will always run with $releasever unset
- include: 'yuminstallroot.yml'
when: (ansible_distribution in ['RedHat', 'CentOS', 'ScientificLinux'] or
(ansible_distribution in ['Fedora'] and ansible_distribution_major_version < 23)) and
ansible_python.version.major == 2

View file

@ -197,3 +197,35 @@
assert:
that:
- non_existent_rpm|failed
# Install in installroot='/'
- name: install sos
yum: name=sos state=present installroot='/'
register: yum_result
- name: check sos with rpm
shell: rpm -q sos --root=/
failed_when: False
register: rpm_result
- debug: var=yum_result
- debug: var=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: uninstall sos
yum: name=sos installroot='/'
register: yum_result

View file

@ -0,0 +1,60 @@
# make a installroot
- name: Create installroot
local_action:
module: command mktemp -d "{{ lookup('env', 'TMPDIR') | default('/tmp', true) }}/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: Populate directory
copy:
content: "{{ ansible_lsb.major_release }}\n"
dest: "/{{ yumroot.stdout }}/etc/yum/vars/releasever"
# This will drag in > 200 MB.
- name: attempt installroot
yum: name=sos installroot="/{{ yumroot.stdout }}/" disable_gpg_check=yes
register: yum_result
- name: check sos with rpm in installroot
shell: rpm -q sos --root="/{{ yumroot.stdout }}/"
failed_when: False
register: rpm_result
- debug: var=yum_result
- debug: var=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