Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make yum_repository test more reliable #73467

Merged
merged 7 commits into from Feb 4, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions test/integration/targets/setup_rpm_repo/defaults/main.yml
@@ -0,0 +1 @@
install_repos: yes
5 changes: 5 additions & 0 deletions test/integration/targets/setup_rpm_repo/handlers/main.yml
@@ -0,0 +1,5 @@
- name: remove repos
yum_repository:
state: absent
name: "{{ item }}"
loop: "{{ repos }}"
94 changes: 94 additions & 0 deletions test/integration/targets/setup_rpm_repo/library/create_repo.py
@@ -0,0 +1,94 @@
#!/usr/bin/python

from __future__ import (absolute_import, division, print_function)
__metaclass__ = type

import os
import sys
import tempfile

from collections import namedtuple

from ansible.module_utils.basic import AnsibleModule

try:
from rpmfluff import SimpleRpmBuild
from rpmfluff import YumRepoBuild
except ImportError:
from rpmfluff.rpmbuild import SimpleRpmBuild
from rpmfluff.yumrepobuild import YumRepoBuild

try:
from rpmfluff import can_use_rpm_weak_deps
except ImportError:
try:
from rpmfluff.utils import can_use_rpm_weak_deps
except ImportError:
can_use_rpm_weak_deps = None

RPM = namedtuple('RPM', ['name', 'version', 'release', 'epoch', 'recommends'])


SPECS = [
RPM('dinginessentail', '1.0', '1', None, None),
RPM('dinginessentail', '1.0', '2', '1', None),
RPM('dinginessentail', '1.1', '1', '1', None),
RPM('dinginessentail-olive', '1.0', '1', None, None),
RPM('dinginessentail-olive', '1.1', '1', None, None),
RPM('landsidescalping', '1.0', '1', None, None),
RPM('landsidescalping', '1.1', '1', None, None),
RPM('dinginessentail-with-weak-dep', '1.0', '1', None, ['dinginessentail-weak-dep']),
RPM('dinginessentail-weak-dep', '1.0', '1', None, None),
]


def create_repo(arch='x86_64'):
pkgs = []
for spec in SPECS:
pkg = 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 can_use_rpm_weak_deps or not can_use_rpm_weak_deps():
continue

for recommend in spec.recommends:
pkg.add_recommends(recommend)

pkgs.append(pkg)

repo = YumRepoBuild(pkgs)
repo.make(arch)

for pkg in pkgs:
pkg.clean()

return repo.repoDir


def main():
module = AnsibleModule(
argument_spec={
'arch': {'required': True},
'tempdir': {'type': 'path'},
}
)

arch = module.params['arch']
tempdir = module.params['tempdir']

# Save current temp dir so we can set it back later
original_tempdir = tempfile.tempdir
tempfile.tempdir = tempdir

try:
repo_dir = create_repo(arch)
finally:
tempfile.tempdir = original_tempdir

module.exit_json(repo_dir=repo_dir, tmpfile=tempfile.gettempdir())


if __name__ == "__main__":
main()
2 changes: 2 additions & 0 deletions test/integration/targets/setup_rpm_repo/meta/main.yml
@@ -0,0 +1,2 @@
dependencies:
- setup_remote_tmp_dir
39 changes: 22 additions & 17 deletions test/integration/targets/setup_rpm_repo/tasks/main.yml
Expand Up @@ -31,25 +31,30 @@
- ansible_facts.distribution in ['RedHat', 'CentOS']
- ansible_facts.distribution_major_version is version('8', '>=')

- name: Copy script for creating a repo
copy:
src: create-repo.py
dest: /tmp/create-repo.py
mode: 0755
- set_fact:
repos:
- "fake-{{ ansible_architecture }}"
- "fake-i686"
- "fake-ppc64"
changed_when: yes
notify: remove repos

- name: Create RPMs and put them into a repo
shell: "{{ansible_python_interpreter}} /tmp/create-repo.py {{ ansible_architecture }}"
create_repo:
arch: "{{ ansible_architecture }}"
tempdir: "{{ remote_tmp_dir }}"
register: repo

- set_fact:
repodir: "{{ repo.stdout_lines[-1] }}"
repodir: "{{ repo.repo_dir }}"

- name: Install the repo
yum_repository:
name: "fake-{{ ansible_architecture }}"
description: "fake-{{ ansible_architecture }}"
baseurl: "file://{{ repodir }}"
gpgcheck: no
when: install_repos | bool

- name: Copy comps.xml file
copy:
Expand All @@ -61,37 +66,37 @@
command: createrepo -g {{ repodir_comps.dest | quote }} {{ repodir | quote }}

- name: Create RPMs and put them into a repo (i686)
shell: "{{ansible_python_interpreter}} /tmp/create-repo.py i686"
create_repo:
arch: i686
tempdir: "{{ remote_tmp_dir }}"
register: repo_i686

- set_fact:
repodir_i686: "{{ repo_i686.stdout_lines[-1] }}"
repodir_i686: "{{ repo_i686.repo_dir }}"

- name: Install the repo (i686)
yum_repository:
name: "fake-i686"
description: "fake-i686"
baseurl: "file://{{ repodir_i686 }}"
gpgcheck: no
when: install_repos | bool

- name: Create RPMs and put them into a repo (ppc64)
shell: "{{ansible_python_interpreter}} /tmp/create-repo.py ppc64"
create_repo:
arch: ppc64
tempdir: "{{ remote_tmp_dir }}"
register: repo_ppc64

- set_fact:
repodir_ppc64: "{{ repo_ppc64.stdout_lines[-1] }}"
repodir_ppc64: "{{ repo_ppc64.repo_dir }}"

- name: Install the repo (ppc64)
yum_repository:
name: "fake-ppc64"
description: "fake-ppc64"
baseurl: "file://{{ repodir_ppc64 }}"
gpgcheck: no

- set_fact:
repos:
- "fake-{{ ansible_architecture }}"
- "fake-i686"
- "fake-ppc64"
when: install_repos | bool

when: ansible_distribution in ['RedHat', 'CentOS', 'ScientificLinux', 'Fedora']
5 changes: 5 additions & 0 deletions test/integration/targets/yum_repository/defaults/main.yml
@@ -0,0 +1,5 @@
yum_repository_test_package: dinginessentail
yum_repository_test_repo:
name: fakerepo
description: Fake Repo
baseurl: "file://{{ repodir }}"
4 changes: 4 additions & 0 deletions test/integration/targets/yum_repository/handlers/main.yml
@@ -0,0 +1,4 @@
- name: remove listtest repo
yum_repository:
name: listtest
state: absent
4 changes: 4 additions & 0 deletions test/integration/targets/yum_repository/meta/main.yml
@@ -0,0 +1,4 @@
dependencies:
- role: setup_rpm_repo
vars:
install_repos: no
33 changes: 1 addition & 32 deletions test/integration/targets/yum_repository/tasks/main.yml
@@ -1,17 +1,6 @@
- name: Run tests
when: ansible_facts.distribution in ['CentOS', 'Fedora']
block:
- name: Include distribution specific variables
include_vars: "{{ lookup('first_found', params) }}"
vars:
params:
files:
- "{{ ansible_facts.distribution }}-{{ ansible_facts.distribution_major_version }}.yml"
- "{{ ansible_facts.distribution }}.yml"
- default.yml
paths:
- vars

- name: ensure {{ yum_repository_test_package }} is uninstalled to begin with
action: "{{ ansible_facts.pkg_mgr }}"
args:
Expand Down Expand Up @@ -184,6 +173,7 @@
includepkgs:
- ccc
- ddd
notify: remove listtest repo

- name: Assert that lists were properly inserted
assert:
Expand All @@ -198,24 +188,3 @@
repofile: "{{ lookup('file', '/etc/yum.repos.d/listtest.repo') }}"
url_hostname: "{{ yum_repository_test_repo.baseurl | urlsplit('hostname') }}"
url_hostname2: "{{ url_hostname | replace('download[0-9]?\\.', 'download2\\.', 1) }}"

- name: CLEANUP | Remove list test repo
yum_repository:
name: listtest
state: absent

- name: CLEANUP | Remove {{ yum_repository_test_repo.name }}
yum_repository:
name: "{{ yum_repository_test_repo.name }}"
state: absent

- name: CLEANUP | Enable EPEL
yum_repository:
name: epel
state: present
description: "{{ yum_repository_epel.description | default(omit) }}"
metalink: "{{ yum_repository_epel.metalink | default(omit) }}"
mirrorlist: "{{ yum_repository_epel.mirrorlist | default(omit) }}"
gpgkey: "{{ yum_repository_epel.gpgkey }}"
gpgcheck: yes
when: ansible_facts.distribution == 'CentOS'
10 changes: 0 additions & 10 deletions test/integration/targets/yum_repository/vars/CentOS-6.yml

This file was deleted.

10 changes: 0 additions & 10 deletions test/integration/targets/yum_repository/vars/CentOS-8.yml

This file was deleted.

10 changes: 0 additions & 10 deletions test/integration/targets/yum_repository/vars/CentOS.yml

This file was deleted.

5 changes: 0 additions & 5 deletions test/integration/targets/yum_repository/vars/Fedora.yml

This file was deleted.

Empty file.