From 0aeb1b7bb22b9aa8330a5027a1ace40a9a51399b Mon Sep 17 00:00:00 2001 From: Martin Wilck Date: Sun, 15 Jun 2025 13:02:10 +0200 Subject: [PATCH] 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 Co-authored-by: Felix Fontein --------- 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