mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
zypper_repository: fix idempotency on adding repo with releasever and basearch variables (#2722)
* zypper_repository: Check idempotency on adding repo with releasever * Name required when adding non-repo files. * Initial try to fix releasever * Replace re.sub with .replace * name releaseverrepo releaseverrepo * Change to ansible_distribution_version for removing repo * improve asserts format * add changelog * Fix changelog formatting Co-authored-by: Felix Fontein <felix@fontein.de> * improve command used for retrieving releasever variable Co-authored-by: Felix Fontein <felix@fontein.de> * add basearch replace * Add basearch to changelog fragment * Check for releasever and basearch only when they are there Co-authored-by: Felix Fontein <felix@fontein.de>
This commit is contained in:
parent
4c50f1add7
commit
94a53adff1
3 changed files with 75 additions and 2 deletions
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
bugfixes:
|
||||
- zypper_repository - fix idempotency on adding repository with
|
||||
``$releasever`` and ``$basearch`` variables
|
||||
(https://github.com/ansible-collections/community.general/issues/1985).
|
|
@ -175,7 +175,7 @@ def _parse_repos(module):
|
|||
module.fail_json(msg='Failed to execute "%s"' % " ".join(cmd), rc=rc, stdout=stdout, stderr=stderr)
|
||||
|
||||
|
||||
def _repo_changes(realrepo, repocmp):
|
||||
def _repo_changes(module, realrepo, repocmp):
|
||||
"Check whether the 2 given repos have different settings."
|
||||
for k in repocmp:
|
||||
if repocmp[k] and k not in realrepo:
|
||||
|
@ -186,6 +186,16 @@ def _repo_changes(realrepo, repocmp):
|
|||
valold = str(repocmp[k] or "")
|
||||
valnew = v or ""
|
||||
if k == "url":
|
||||
if '$releasever' in valold or '$releasever' in valnew:
|
||||
cmd = ['rpm', '-q', '--qf', '%{version}', '-f', '/etc/os-release']
|
||||
rc, stdout, stderr = module.run_command(cmd, check_rc=True)
|
||||
valnew = valnew.replace('$releasever', stdout)
|
||||
valold = valold.replace('$releasever', stdout)
|
||||
if '$basearch' in valold or '$basearch' in valnew:
|
||||
cmd = ['rpm', '-q', '--qf', '%{arch}', '-f', '/etc/os-release']
|
||||
rc, stdout, stderr = module.run_command(cmd, check_rc=True)
|
||||
valnew = valnew.replace('$basearch', stdout)
|
||||
valold = valold.replace('$basearch', stdout)
|
||||
valold, valnew = valold.rstrip("/"), valnew.rstrip("/")
|
||||
if valold != valnew:
|
||||
return True
|
||||
|
@ -215,7 +225,7 @@ def repo_exists(module, repodata, overwrite_multiple):
|
|||
return (False, False, None)
|
||||
elif len(repos) == 1:
|
||||
# Found an existing repo, look for changes
|
||||
has_changes = _repo_changes(repos[0], repodata)
|
||||
has_changes = _repo_changes(module, repos[0], repodata)
|
||||
return (True, has_changes, repos)
|
||||
elif len(repos) >= 2:
|
||||
if overwrite_multiple:
|
||||
|
|
|
@ -125,3 +125,61 @@
|
|||
priority: 100
|
||||
auto_import_keys: true
|
||||
state: "present"
|
||||
|
||||
- name: add a repo by releasever
|
||||
community.general.zypper_repository:
|
||||
name: releaseverrepo
|
||||
repo: http://download.opensuse.org/repositories/devel:/languages:/ruby/openSUSE_Leap_$releasever/
|
||||
state: present
|
||||
register: add_repo
|
||||
|
||||
- name: add a repo by releasever again
|
||||
community.general.zypper_repository:
|
||||
name: releaseverrepo
|
||||
repo: http://download.opensuse.org/repositories/devel:/languages:/ruby/openSUSE_Leap_$releasever/
|
||||
state: present
|
||||
register: add_repo_again
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- add_repo is changed
|
||||
- add_repo_again is not changed
|
||||
|
||||
- name: remove added repo
|
||||
community.general.zypper_repository:
|
||||
repo: http://download.opensuse.org/repositories/devel:/languages:/ruby/openSUSE_Leap_{{ ansible_distribution_version }}/
|
||||
state: absent
|
||||
register: remove_repo
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- remove_repo is changed
|
||||
|
||||
- name: add a repo by basearch
|
||||
community.general.zypper_repository:
|
||||
name: basearchrepo
|
||||
repo: https://packagecloud.io/netdata/netdata/opensuse/13.2/$basearch
|
||||
state: present
|
||||
register: add_repo
|
||||
|
||||
- name: add a repo by basearch again
|
||||
community.general.zypper_repository:
|
||||
name: basearchrepo
|
||||
repo: https://packagecloud.io/netdata/netdata/opensuse/13.2/$basearch
|
||||
state: present
|
||||
register: add_repo_again
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- add_repo is changed
|
||||
- add_repo_again is not changed
|
||||
|
||||
- name: remove added repo
|
||||
community.general.zypper_repository:
|
||||
repo: https://packagecloud.io/netdata/netdata/opensuse/13.2/x86_64
|
||||
state: absent
|
||||
register: remove_repo
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- remove_repo is changed
|
||||
|
|
Loading…
Reference in a new issue