File 0001-zypper_repository-Fix-repo-parsing-for-empty-list.patch of Package ansible1

From 00a5c352ec85beb05ea83dfc5c7be3b4042c9f69 Mon Sep 17 00:00:00 2001
From: Thomas Bechtold <tbechtold@suse.com>
Date: Fri, 31 Jul 2015 16:44:01 +0200
Subject: [PATCH] zypper_repository: Fix repo parsing for empty list

When no repositories are defined in zypper, the return code
of "zypper repos" is 6. Handle that case and don't fail
if zypper_repository has to deal with an empty repo list.

Fixes https://github.com/ansible/ansible-modules-extras/issues/795
---
 .../extras/packaging/os/zypper_repository.py       | 37 ++++++++++++++--------
 1 file changed, 23 insertions(+), 14 deletions(-)

diff --git a/lib/ansible/modules/extras/packaging/os/zypper_repository.py b/lib/ansible/modules/extras/packaging/os/zypper_repository.py
index 54e2042963..446723ef04 100644
--- a/lib/ansible/modules/extras/packaging/os/zypper_repository.py
+++ b/lib/ansible/modules/extras/packaging/os/zypper_repository.py
@@ -95,21 +95,30 @@ def zypper_version(module):
 def _parse_repos(module):
     """parses the output of zypper -x lr and returns a parse repo dictionary"""
     cmd = ['/usr/bin/zypper', '-x', 'lr']
-    repos = []
-
     from xml.dom.minidom import parseString as parseXML
-    rc, stdout, stderr = module.run_command(cmd, check_rc=True)
-    dom = parseXML(stdout)
-    repo_list = dom.getElementsByTagName('repo')
-    for repo in repo_list:
-        opts = {}
-        for o in REPO_OPTS:
-            opts[o] = repo.getAttribute(o)
-        opts['url'] = repo.getElementsByTagName('url')[0].firstChild.data
-        # A repo can be uniquely identified by an alias + url
-        repos.append(opts)
-
-    return repos
+    rc, stdout, stderr = module.run_command(cmd, check_rc=False)
+    if rc == 0:
+        repos = []
+        dom = parseXML(stdout)
+        repo_list = dom.getElementsByTagName('repo')
+        for repo in repo_list:
+            opts = {}
+            for o in REPO_OPTS:
+                opts[o] = repo.getAttribute(o)
+            opts['url'] = repo.getElementsByTagName('url')[0].firstChild.data
+            # A repo can be uniquely identified by an alias + url
+            repos.append(opts)
+        return repos
+    # exit code 6 is ZYPPER_EXIT_NO_REPOS (no repositories defined)
+    elif rc == 6:
+        return []
+    else:
+        d = { 'zypper_exit_code': rc }
+        if stderr:
+            d['stderr'] = stderr
+        if stdout:
+            d['stdout'] = stdout
+        module.fail_json(msg='Failed to execute "%s"' % " ".join(cmd), **d)
 
 def _parse_repos_old(module):
     """parses the output of zypper sl and returns a parse repo dictionary"""
-- 
2.15.1

openSUSE Build Service is sponsored by