dnf/yum - added install_weak_deps option (#50525)

* dnf/yum - added install_weak_deps option

* skip creating weak dep packages if rpm doesn't support it

* fix rpm check for older hosts
This commit is contained in:
Jordan Borean
2019-01-05 02:37:59 +10:00
committed by ansibot
parent 555732f8bb
commit b967f4dcc1
7 changed files with 97 additions and 31 deletions

View File

@@ -208,8 +208,59 @@
- "not dnf_result.changed"
- "dnf_result is failed"
# ============================================================================
# Should install foo-with-weak-dep and foo-weak-dep
- name: Install package with defaults
dnf:
name: foo-with-weak-dep
state: present
- name: Check if foo-with-weak-dep is installed
shell: rpm -q foo-with-weak-dep
register: rpm_main_result
- name: Check if foo-weak-dep is installed
shell: rpm -q foo-weak-dep
register: rpm_weak_result
- name: Verify install with weak deps
assert:
that:
- rpm_main_result.rc == 0
- rpm_weak_result.rc == 0
- name: Uninstall foo weak dep packages
dnf:
name:
- foo-with-weak-dep
- foo-weak-dep
state: absent
- name: Install package with weak deps but skip weak deps
dnf:
name: foo-with-weak-dep
install_weak_deps: False
state: present
- name: Check if foo-with-weak-dep is installed
shell: rpm -q foo-with-weak-dep
register: rpm_main_result
- name: Check if foo-weak-dep is installed
shell: rpm -q foo-weak-dep
register: rpm_weak_result
ignore_errors: yes
- name: Verify install without weak deps
assert:
that:
- rpm_main_result.rc == 0
- rpm_weak_result.rc == 1 # the weak dependency shouldn't be installed
always:
- name: Clean up
dnf:
name: foo
name:
- foo
- foo-with-weak-dep
- foo-weak-dep
state: absent

View File

@@ -43,28 +43,12 @@
with_items: "{{mysql_packages}}"
when: ansible_pkg_mgr == 'yum'
- block:
# This is required as mariadb-server has a weak dependency on Python 2 which causes the test to break on Py3 hosts
- name: create test dnf.conf file to ignore weak dependencies
copy:
content: |
[main]
install_weak_deps=False
dest: '{{ output_dir }}/dnf.conf'
register: test_dnf_conf_copy
- name: install mysqldb_test rpm dependencies
dnf:
name: '{{ item }}'
state: latest
conf_file: '{{ test_dnf_conf_copy.dest }}'
with_items: "{{mysql_packages}}"
always:
- name: remove test dnf.conf file
file:
path: '{{ test_dnf_conf_copy.dest }}'
state: absent
- name: install mysqldb_test rpm dependencies
dnf:
name: '{{ item }}'
state: latest
install_weak_deps: False # mariadb-server has a weak dep on python2 which break Python 3 test environments
with_items: "{{mysql_packages}}"
when: ansible_pkg_mgr == 'dnf'
- name: install mysqldb_test debian dependencies

View File

@@ -6,17 +6,19 @@ from collections import namedtuple
import rpmfluff
RPM = namedtuple('RPM', ['name', 'version', 'release', 'epoch'])
RPM = namedtuple('RPM', ['name', 'version', 'release', 'epoch', 'recommends'])
SPECS = [
RPM('foo', '1.0', '1', None),
RPM('foo', '1.0', '2', '1'),
RPM('foo', '1.1', '1', '1'),
RPM('foo-bar', '1.0', '1', None),
RPM('foo-bar', '1.1', '1', None),
RPM('bar', '1.0', '1', None),
RPM('bar', '1.1', '1', None),
RPM('foo', '1.0', '1', None, None),
RPM('foo', '1.0', '2', '1', None),
RPM('foo', '1.1', '1', '1', None),
RPM('foo-bar', '1.0', '1', None, None),
RPM('foo-bar', '1.1', '1', None, None),
RPM('bar', '1.0', '1', None, None),
RPM('bar', '1.1', '1', None, None),
RPM('foo-with-weak-dep', '1.0', '1', None, ['foo-weak-dep']),
RPM('foo-weak-dep', '1.0', '1', None, None),
]
@@ -30,6 +32,15 @@ def main():
for spec in SPECS:
pkg = rpmfluff.SimpleRpmBuild(spec.name, spec.version, spec.release, [arch])
pkg.epoch = spec.epoch
if spec.recommends:
# Skip packages that require weak deps but an older version of RPM is being used
if not hasattr(rpmfluff, "can_use_rpm_weak_deps") or not rpmfluff.can_use_rpm_weak_deps():
continue
for recommend in spec.recommends:
pkg.add_recommends(recommend)
pkgs.append(pkg)
repo = rpmfluff.YumRepoBuild(pkgs)