From f55366615e4498987e44d8e370b5829c7a414168 Mon Sep 17 00:00:00 2001 From: Kenny Woodson Date: Tue, 5 Apr 2016 17:05:52 -0400 Subject: First attempt at oadm router module --- roles/lib_openshift_api/library/oc_secret.py | 69 +++++++++++++++++++--------- 1 file changed, 48 insertions(+), 21 deletions(-) (limited to 'roles/lib_openshift_api/library/oc_secret.py') diff --git a/roles/lib_openshift_api/library/oc_secret.py b/roles/lib_openshift_api/library/oc_secret.py index a03022e35..ca58d7139 100644 --- a/roles/lib_openshift_api/library/oc_secret.py +++ b/roles/lib_openshift_api/library/oc_secret.py @@ -27,12 +27,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 @@ -65,15 +65,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 ''' @@ -81,7 +81,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'): @@ -91,10 +91,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 = {} @@ -112,18 +117,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 @@ -226,11 +234,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: @@ -239,11 +249,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): @@ -262,10 +288,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 @@ -519,7 +546,7 @@ class Secret(OpenShiftCLI): cmd = ['-n%s' % self.namespace, 'secrets', 'new', self.name] cmd.extend(secrets) - return self.oc_cmd(cmd) + return self.openshift_cmd(cmd) def update(self, files, force=False): '''run update secret @@ -550,7 +577,7 @@ class Secret(OpenShiftCLI): cmd = ['-ojson', '-n%s' % self.namespace, 'secrets', 'new', self.name] cmd.extend(secrets) - return self.oc_cmd(cmd, output=True) + return self.openshift_cmd(cmd, output=True) -- cgit v1.2.3