From 1b8fe94e5a51f888edededed0278eb7361cbc828 Mon Sep 17 00:00:00 2001 From: Jiri Tyr Date: Tue, 15 Aug 2017 16:51:33 +0100 Subject: [PATCH] Support list for baseurl and gpgkey params in yum_repository (fixes #24948) (#24967) * Support list for baseurl and gpgkey params in yum_repository * Adding tests --- .../modules/packaging/os/yum_repository.py | 22 +++++++++++---- .../tasks/yum_repository_centos.yml | 28 +++++++++++++++++++ 2 files changed, 44 insertions(+), 6 deletions(-) diff --git a/lib/ansible/modules/packaging/os/yum_repository.py b/lib/ansible/modules/packaging/os/yum_repository.py index 2773a6a9199..c9c7818e97e 100644 --- a/lib/ansible/modules/packaging/os/yum_repository.py +++ b/lib/ansible/modules/packaging/os/yum_repository.py @@ -9,10 +9,11 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.0', - 'status': ['stableinterface'], - 'supported_by': 'core'} - +ANSIBLE_METADATA = { + 'metadata_version': '1.0', + 'status': ['stableinterface'], + 'supported_by': 'core' +} DOCUMENTATION = ''' --- @@ -47,6 +48,7 @@ options: description: - URL to the directory where the yum repository's 'repodata' directory lives. + - It can also be a list of multiple URLs. - This or the I(mirrorlist) parameter is required if I(state) is set to C(present). cost: @@ -130,6 +132,7 @@ options: default: null description: - A URL pointing to the ASCII-armored GPG key file for the repository. + - It can also be a list of multiple URLs. http_caching: required: false choices: [all, packages, none] @@ -635,7 +638,7 @@ def main(): argument_spec=dict( async=dict(type='bool'), bandwidth=dict(), - baseurl=dict(), + baseurl=dict(type='list'), cost=dict(), deltarpm_metadata_percentage=dict(), deltarpm_percentage=dict(), @@ -647,7 +650,7 @@ def main(): file=dict(), gpgcakey=dict(), gpgcheck=dict(type='bool'), - gpgkey=dict(), + gpgkey=dict(type='list'), http_caching=dict(choices=['all', 'packages', 'none']), include=dict(), includepkgs=dict(), @@ -717,6 +720,13 @@ def main(): module.params['name'] = module.params['description'] del module.params['description'] + # Change list type to string for baseurl and gpgkey + for list_param in ['baseurl', 'gpgkey']: + if ( + list_param in module.params and + module.params[list_param] is not None): + module.params[list_param] = "\n".join(module.params[list_param]) + # Define repo file name if it doesn't exist if module.params['file'] is None: module.params['file'] = module.params['repoid'] diff --git a/test/integration/targets/yum_repository/tasks/yum_repository_centos.yml b/test/integration/targets/yum_repository/tasks/yum_repository_centos.yml index 4393fbf2fc1..596c3c730d2 100644 --- a/test/integration/targets/yum_repository/tasks/yum_repository_centos.yml +++ b/test/integration/targets/yum_repository/tasks/yum_repository_centos.yml @@ -146,3 +146,31 @@ - name: check Idempotant assert: that: not epel_add.changed + +- name: Test list for baseurl and gpgkey + yum_repository: + name: listtest + description: Testing list feature + baseurl: + - https://download.fedoraproject.org/pub/epel/{{ ansible_distribution_major_version }}/{{ ansible_architecture }}/ + - https://download2.fedoraproject.org/pub/epel/{{ ansible_distribution_major_version }}/{{ ansible_architecture }}/ + gpgkey: + - gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-{{ ansible_distribution_major_version }} + - gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG2-KEY-EPEL-{{ ansible_distribution_major_version }} + +- set_fact: + repofile: "{{ lookup('file', '/etc/yum.repos.d/listtest.repo') }}" + +- name: Assert that lists were properly inserted + assert: + that: + - "'download.fedoraproject.org' in repofile" + - "'download2.fedoraproject.org' in repofile" + - "'RPM-GPG-KEY-EPEL' in repofile" + - "'RPM-GPG2-KEY-EPEL' in repofile" + value: + +- name: Cleanup list test repo + yum_repository: + name: listtest + state: absent