summaryrefslogtreecommitdiffstats
path: root/roles/lib_openshift_api/build/src/base.py
diff options
context:
space:
mode:
Diffstat (limited to 'roles/lib_openshift_api/build/src/base.py')
-rw-r--r--roles/lib_openshift_api/build/src/base.py65
1 files changed, 46 insertions, 19 deletions
diff --git a/roles/lib_openshift_api/build/src/base.py b/roles/lib_openshift_api/build/src/base.py
index 66831c4e2..257379d92 100644
--- a/roles/lib_openshift_api/build/src/base.py
+++ b/roles/lib_openshift_api/build/src/base.py
@@ -20,12 +20,12 @@ yaml.add_constructor(u'tag:yaml.org,2002:timestamp', timestamp_constructor)
# pylint: disable=too-few-public-methods
class OpenShiftCLI(object):
- ''' Class to wrap the oc command line tools '''
+ ''' Class to wrap the command line tools '''
def __init__(self,
namespace,
kubeconfig='/etc/origin/master/admin.kubeconfig',
verbose=False):
- ''' Constructor for OpenshiftOC '''
+ ''' Constructor for OpenshiftCLI '''
self.namespace = namespace
self.verbose = verbose
self.kubeconfig = kubeconfig
@@ -58,15 +58,15 @@ class OpenShiftCLI(object):
cmd = ['-n', self.namespace, 'replace', '-f', fname]
if force:
cmd.append('--force')
- return self.oc_cmd(cmd)
+ return self.openshift_cmd(cmd)
def _create(self, fname):
'''return all pods '''
- return self.oc_cmd(['create', '-f', fname, '-n', self.namespace])
+ return self.openshift_cmd(['create', '-f', fname, '-n', self.namespace])
def _delete(self, resource, rname):
'''return all pods '''
- return self.oc_cmd(['delete', resource, rname, '-n', self.namespace])
+ return self.openshift_cmd(['delete', resource, rname, '-n', self.namespace])
def _get(self, resource, rname=None):
'''return a secret by name '''
@@ -74,7 +74,7 @@ class OpenShiftCLI(object):
if rname:
cmd.append(rname)
- rval = self.oc_cmd(cmd, output=True)
+ rval = self.openshift_cmd(cmd, output=True)
# Ensure results are retuned in an array
if rval.has_key('items'):
@@ -84,10 +84,15 @@ class OpenShiftCLI(object):
return rval
- def oc_cmd(self, cmd, output=False):
+ def openshift_cmd(self, cmd, oadm=False, output=False, output_type='json'):
'''Base command for oc '''
#cmds = ['/usr/bin/oc', '--config', self.kubeconfig]
- cmds = ['/usr/bin/oc']
+ cmds = []
+ if oadm:
+ cmds = ['/usr/bin/oadm']
+ else:
+ cmds = ['/usr/bin/oc']
+
cmds.extend(cmd)
rval = {}
@@ -105,18 +110,21 @@ class OpenShiftCLI(object):
proc.wait()
stdout = proc.stdout.read()
stderr = proc.stderr.read()
-
rval = {"returncode": proc.returncode,
"results": results,
+ "cmd": ' '.join(cmds),
}
if proc.returncode == 0:
if output:
- try:
- rval['results'] = json.loads(stdout)
- except ValueError as err:
- if "No JSON object could be decoded" in err.message:
- err = err.message
+ if output_type == 'json':
+ try:
+ rval['results'] = json.loads(stdout)
+ except ValueError as err:
+ if "No JSON object could be decoded" in err.message:
+ err = err.message
+ elif output_type == 'raw':
+ rval['results'] = stdout
if self.verbose:
print stdout
@@ -219,11 +227,13 @@ class Utils(object):
# Disabling too-many-branches. This is a yaml dictionary comparison function
# pylint: disable=too-many-branches,too-many-return-statements
@staticmethod
- def check_def_equal(user_def, result_def, debug=False):
+ def check_def_equal(user_def, result_def, skip_keys=None, debug=False):
''' Given a user defined definition, compare it with the results given back by our query. '''
# Currently these values are autogenerated and we do not need to check them
skip = ['metadata', 'status']
+ if skip_keys:
+ skip.extend(skip_keys)
for key, value in result_def.items():
if key in skip:
@@ -232,11 +242,27 @@ class Utils(object):
# Both are lists
if isinstance(value, list):
if not isinstance(user_def[key], list):
+ if debug:
+ print 'user_def[key] is not a list'
return False
- # lists should be identical
- if value != user_def[key]:
- return False
+ for values in zip(user_def[key], value):
+ if isinstance(values[0], dict) and isinstance(values[1], dict):
+ if debug:
+ print 'sending list - list'
+ print type(values[0])
+ print type(values[1])
+ result = Utils.check_def_equal(values[0], values[1], skip_keys=skip_keys, debug=debug)
+ if not result:
+ print 'list compare returned false'
+ return False
+
+ elif value != user_def[key]:
+ if debug:
+ print 'value should be identical'
+ print value
+ print user_def[key]
+ return False
# recurse on a dictionary
elif isinstance(value, dict):
@@ -255,10 +281,11 @@ class Utils(object):
print "keys are not equal in dict"
return False
- result = Utils.check_def_equal(user_def[key], value, debug=debug)
+ result = Utils.check_def_equal(user_def[key], value, skip_keys=skip_keys, debug=debug)
if not result:
if debug:
print "dict returned false"
+ print result
return False
# Verify each key, value pair is the same