From cfee3284cdd60fdb285688258bd5be8f797f416f Mon Sep 17 00:00:00 2001
From: "patchback[bot]" <45432694+patchback[bot]@users.noreply.github.com>
Date: Sun, 15 Jun 2025 13:17:58 +0200
Subject: [PATCH] [PR #10225/0aeb1b7b backport][stable-10] zypper_repository:
handle repositories without element (#10251)
zypper_repository: handle repositories without element (#10225)
* zypper_repository: handle repositories without element
zypper_repository identifies repos using a combination of "alias"
and "url". Recently, openSUE has begun using "metalink" attributes
instead of "url" elements, causing errors like this:
File "/tmp/ansible_zypper_repository_payload_euim_nod/ansible_zypper_repository_payload.zip/ansible_collections/community/general/plugins/modules/zypper_repository.py", line 475, in
File "/tmp/ansible_zypper_repository_payload_euim_nod/ansible_zypper_repository_payload.zip/ansible_collections/community/general/plugins/modules/zypper_repository.py", line 448, in main
File "/tmp/ansible_zypper_repository_payload_euim_nod/ansible_zypper_repository_payload.zip/ansible_collections/community/general/plugins/modules/zypper_repository.py", line 223, in repo_exists
File "/tmp/ansible_zypper_repository_payload_euim_nod/ansible_zypper_repository_payload.zip/ansible_collections/community/general/plugins/modules/zypper_repository.py", line 177, in _parse_repos
IndexError: list index out of range
Fix this by using the "metalink" attribute instead of the value
of the "url" element if the latter is missing.
* Update changelogs/fragments/10224-zypper_repository-metalink.yml
---------
(cherry picked from commit 0aeb1b7bb22b9aa8330a5027a1ace40a9a51399b)
Co-authored-by: Martin Wilck
Co-authored-by: Felix Fontein
---
changelogs/fragments/10224-zypper_repository-metalink.yml | 2 ++
plugins/modules/zypper_repository.py | 5 ++++-
2 files changed, 6 insertions(+), 1 deletion(-)
create mode 100644 changelogs/fragments/10224-zypper_repository-metalink.yml
diff --git a/changelogs/fragments/10224-zypper_repository-metalink.yml b/changelogs/fragments/10224-zypper_repository-metalink.yml
new file mode 100644
index 0000000000..8dd1987a4e
--- /dev/null
+++ b/changelogs/fragments/10224-zypper_repository-metalink.yml
@@ -0,0 +1,2 @@
+bugfixes:
+ - zypper_repository - use ``metalink`` attribute to identify repositories without ```` element (https://github.com/ansible-collections/community.general/issues/10224, https://github.com/ansible-collections/community.general/pull/10225).
diff --git a/plugins/modules/zypper_repository.py b/plugins/modules/zypper_repository.py
index 94f2c504fc..17de63bb6d 100644
--- a/plugins/modules/zypper_repository.py
+++ b/plugins/modules/zypper_repository.py
@@ -174,7 +174,10 @@ def _parse_repos(module):
opts = {}
for o in REPO_OPTS:
opts[o] = repo.getAttribute(o)
- opts['url'] = repo.getElementsByTagName('url')[0].firstChild.data
+ try:
+ opts['url'] = repo.getElementsByTagName('url')[0].firstChild.data
+ except IndexError:
+ opts['url'] = repo.getAttribute('metalink')
# A repo can be uniquely identified by an alias + url
repos.append(opts)
return repos