summaryrefslogtreecommitdiffstats
path: root/roles/lib_openshift/src
diff options
context:
space:
mode:
authorJose A. Rivera <jarrpa@redhat.com>2017-06-02 13:37:46 -0500
committerJose A. Rivera <jarrpa@redhat.com>2017-06-08 15:12:58 -0500
commit67c082d7f6be9232abc6dafc20c34894edba4a21 (patch)
treec19d0761efb90942caa96dc962b82cc60a51f41f /roles/lib_openshift/src
parenta39fc605318d359533c7dba343f557f7005db17d (diff)
downloadopenshift-67c082d7f6be9232abc6dafc20c34894edba4a21.tar.gz
openshift-67c082d7f6be9232abc6dafc20c34894edba4a21.tar.bz2
openshift-67c082d7f6be9232abc6dafc20c34894edba4a21.tar.xz
openshift-67c082d7f6be9232abc6dafc20c34894edba4a21.zip
lib/base: allow for results parsing on non-zero return code
On an 'oc get' in particular, the command may return a non-zero error code while still having found valid resources. Thus, we should parse the valid output while still reporting the error. oc_obj.get(), for instance, takes care of determining if the return code should be reset to 0 in some error cases. Also do a bit of logic cleanup and output sanitizing. Signed-off-by: Jose A. Rivera <jarrpa@redhat.com>
Diffstat (limited to 'roles/lib_openshift/src')
-rw-r--r--roles/lib_openshift/src/lib/base.py44
1 files changed, 16 insertions, 28 deletions
diff --git a/roles/lib_openshift/src/lib/base.py b/roles/lib_openshift/src/lib/base.py
index b3f01008b..16770b22d 100644
--- a/roles/lib_openshift/src/lib/base.py
+++ b/roles/lib_openshift/src/lib/base.py
@@ -273,10 +273,6 @@ class OpenShiftCLI(object):
elif self.namespace is not None and self.namespace.lower() not in ['none', 'emtpy']: # E501
cmds.extend(['-n', self.namespace])
- rval = {}
- results = ''
- err = None
-
if self.verbose:
print(' '.join(cmds))
@@ -286,34 +282,26 @@ class OpenShiftCLI(object):
returncode, stdout, stderr = 1, '', 'Failed to execute {}: {}'.format(subprocess.list2cmdline(cmds), ex)
rval = {"returncode": returncode,
- "results": results,
"cmd": ' '.join(cmds)}
- if returncode == 0:
- if output:
- if output_type == 'json':
- try:
- rval['results'] = json.loads(stdout)
- except ValueError as verr:
- if "No JSON object could be decoded" in verr.args:
- err = verr.args
- elif output_type == 'raw':
- rval['results'] = stdout
-
- if self.verbose:
- print("STDOUT: {0}".format(stdout))
- print("STDERR: {0}".format(stderr))
-
- if err:
- rval.update({"err": err,
- "stderr": stderr,
- "stdout": stdout,
- "cmd": cmds})
+ if output_type == 'json':
+ rval['results'] = {}
+ if output and stdout:
+ try:
+ rval['results'] = json.loads(stdout)
+ except ValueError as verr:
+ if "No JSON object could be decoded" in verr.args:
+ rval['err'] = verr.args
+ elif output_type == 'raw':
+ rval['results'] = stdout if output else ''
- else:
+ if self.verbose:
+ print("STDOUT: {0}".format(stdout))
+ print("STDERR: {0}".format(stderr))
+
+ if 'err' in rval or returncode != 0:
rval.update({"stderr": stderr,
- "stdout": stdout,
- "results": {}})
+ "stdout": stdout})
return rval