From 6218b9938b523c545a7610a3c77d6a19aea81e1a Mon Sep 17 00:00:00 2001 From: Kenny Woodson Date: Thu, 19 Jan 2017 12:24:52 -0500 Subject: Adding version to lib_openshift --- roles/lib_openshift/library/oc_route.py | 115 +++++++++++++++++++++++++++----- 1 file changed, 97 insertions(+), 18 deletions(-) (limited to 'roles/lib_openshift/library/oc_route.py') diff --git a/roles/lib_openshift/library/oc_route.py b/roles/lib_openshift/library/oc_route.py index b08858567..19c7462ea 100644 --- a/roles/lib_openshift/library/oc_route.py +++ b/roles/lib_openshift/library/oc_route.py @@ -769,7 +769,7 @@ class OpenShiftCLI(object): def _replace(self, fname, force=False): '''replace the current object with oc replace''' - cmd = ['-n', self.namespace, 'replace', '-f', fname] + cmd = ['replace', '-f', fname] if force: cmd.append('--force') return self.openshift_cmd(cmd) @@ -786,11 +786,11 @@ class OpenShiftCLI(object): def _create(self, fname): '''call oc create on a filename''' - return self.openshift_cmd(['create', '-f', fname, '-n', self.namespace]) + return self.openshift_cmd(['create', '-f', fname]) def _delete(self, resource, rname, selector=None): '''call oc delete on a resource''' - cmd = ['delete', resource, rname, '-n', self.namespace] + cmd = ['delete', resource, rname] if selector: cmd.append('--selector=%s' % selector) @@ -804,8 +804,7 @@ class OpenShiftCLI(object): params: the parameters for the template template_data: the incoming template's data; instead of a file ''' - - cmd = ['process', '-n', self.namespace] + cmd = ['process'] if template_data: cmd.extend(['-f', '-']) else: @@ -826,17 +825,13 @@ class OpenShiftCLI(object): atexit.register(Utils.cleanup, [fname]) - return self.openshift_cmd(['-n', self.namespace, 'create', '-f', fname]) + return self.openshift_cmd(['create', '-f', fname]) def _get(self, resource, rname=None, selector=None): '''return a resource by name ''' cmd = ['get', resource] if selector: cmd.append('--selector=%s' % selector) - if self.all_namespaces: - cmd.extend(['--all-namespaces']) - elif self.namespace: - cmd.extend(['-n', self.namespace]) cmd.extend(['-o', 'json']) @@ -910,6 +905,10 @@ class OpenShiftCLI(object): return self.openshift_cmd(cmd, oadm=True, output=True, output_type='raw') + def _version(self): + ''' return the openshift version''' + return self.openshift_cmd(['version'], output=True, output_type='raw') + def _import_image(self, url=None, name=None, tag=None): ''' perform image import ''' cmd = ['import-image'] @@ -928,7 +927,7 @@ class OpenShiftCLI(object): cmd.append('--confirm') return self.openshift_cmd(cmd) - # pylint: disable=too-many-arguments + # pylint: disable=too-many-arguments,too-many-branches def openshift_cmd(self, cmd, oadm=False, output=False, output_type='json', input_data=None): '''Base command for oc ''' cmds = [] @@ -937,6 +936,11 @@ class OpenShiftCLI(object): else: cmds = ['/usr/bin/oc'] + if self.all_namespaces: + cmds.extend(['--all-namespaces']) + elif self.namespace: + cmds.extend(['-n', self.namespace]) + cmds.extend(cmd) rval = {} @@ -1062,6 +1066,56 @@ class Utils(object): return contents + @staticmethod + def filter_versions(stdout): + ''' filter the oc version output ''' + + version_dict = {} + version_search = ['oc', 'openshift', 'kubernetes'] + + for line in stdout.strip().split('\n'): + for term in version_search: + if not line: + continue + if line.startswith(term): + version_dict[term] = line.split()[-1] + + # horrible hack to get openshift version in Openshift 3.2 + # By default "oc version in 3.2 does not return an "openshift" version + if "openshift" not in version_dict: + version_dict["openshift"] = version_dict["oc"] + + return version_dict + + @staticmethod + def add_custom_versions(versions): + ''' create custom versions strings ''' + + versions_dict = {} + + for tech, version in versions.items(): + # clean up "-" from version + if "-" in version: + version = version.split("-")[0] + + if version.startswith('v'): + versions_dict[tech + '_numeric'] = version[1:].split('+')[0] + # "v3.3.0.33" is what we have, we want "3.3" + versions_dict[tech + '_short'] = version[1:4] + + return versions_dict + + @staticmethod + def openshift_installed(): + ''' check if openshift is installed ''' + import yum + + yum_base = yum.YumBase() + if yum_base.rpmdb.searchNevra(name='atomic-openshift'): + return True + + return False + # Disabling too-many-branches. This is a yaml dictionary comparison function # pylint: disable=too-many-branches,too-many-return-statements,too-many-statements @staticmethod @@ -1204,7 +1258,9 @@ class RouteConfig(object): key=None, host=None, tls_termination=None, - service_name=None): + service_name=None, + wildcard_policy=None, + weight=None): ''' constructor for handling route options ''' self.kubeconfig = kubeconfig self.name = sname @@ -1217,6 +1273,12 @@ class RouteConfig(object): self.key = key self.service_name = service_name self.data = {} + self.wildcard_policy = wildcard_policy + if wildcard_policy is None: + self.wildcard_policy = 'None' + self.weight = weight + if weight is None: + self.weight = 100 self.create_dict() @@ -1241,14 +1303,19 @@ class RouteConfig(object): self.data['spec']['tls']['certificate'] = self.cert self.data['spec']['tls']['termination'] = self.tls_termination - self.data['spec']['to'] = {'kind': 'Service', 'name': self.service_name} + self.data['spec']['to'] = {'kind': 'Service', + 'name': self.service_name, + 'weight': self.weight} + self.data['spec']['wildcardPolicy'] = self.wildcard_policy # pylint: disable=too-many-instance-attributes,too-many-public-methods class Route(Yedit): ''' Class to wrap the oc command line tools ''' + wildcard_policy = "spec.wildcardPolicy" host_path = "spec.host" service_path = "spec.to.name" + weight_path = "spec.to.weight" cert_path = "spec.tls.certificate" cacert_path = "spec.tls.caCertificate" destcacert_path = "spec.tls.destinationCACertificate" @@ -1280,6 +1347,10 @@ class Route(Yedit): ''' return service name ''' return self.get(Route.service_path) + def get_weight(self): + ''' return service weight ''' + return self.get(Route.weight_path) + def get_termination(self): ''' return tls termination''' return self.get(Route.termination_path) @@ -1288,6 +1359,10 @@ class Route(Yedit): ''' return host ''' return self.get(Route.host_path) + def get_wildcard_policy(self): + ''' return wildcardPolicy ''' + return self.get(Route.wildcard_policy) + # pylint: disable=too-many-instance-attributes class OCRoute(OpenShiftCLI): @@ -1375,7 +1450,9 @@ class OCRoute(OpenShiftCLI): files['key']['value'], params['host'], params['tls_termination'], - params['service_name']) + params['service_name'], + params['wildcard_policy'], + params['weight']) oc_route = OCRoute(rconfig, verbose=params['debug']) @@ -1418,13 +1495,13 @@ class OCRoute(OpenShiftCLI): api_rval = oc_route.create() if api_rval['returncode'] != 0: - return {'failed': True, 'results': api_rval, 'state': "present"} # noqa: E501 + return {'failed': True, 'msg': api_rval, 'state': "present"} # noqa: E501 # return the created object api_rval = oc_route.get() if api_rval['returncode'] != 0: - return {'failed': True, 'results': api_rval, 'state': "present"} # noqa: E501 + return {'failed': True, 'msg': api_rval, 'state': "present"} # noqa: E501 return {'changed': True, 'results': api_rval, 'state': "present"} # noqa: E501 @@ -1439,13 +1516,13 @@ class OCRoute(OpenShiftCLI): api_rval = oc_route.update() if api_rval['returncode'] != 0: - return {'failed': True, 'results': api_rval, 'state': "present"} # noqa: E501 + return {'failed': True, 'msg': api_rval, 'state': "present"} # noqa: E501 # return the created object api_rval = oc_route.get() if api_rval['returncode'] != 0: - return {'failed': True, 'results': api_rval, 'state': "present"} # noqa: E501 + return {'failed': True, 'msg': api_rval, 'state': "present"} # noqa: E501 return {'changed': True, 'results': api_rval, 'state': "present"} # noqa: E501 @@ -1493,6 +1570,8 @@ def main(): key_content=dict(default=None, type='str'), service_name=dict(default=None, type='str'), host=dict(default=None, type='str'), + wildcard_policy=dict(default=None, type='str'), + weight=dict(default=None, type='int'), ), mutually_exclusive=[('dest_cacert_path', 'dest_cacert_content'), ('cacert_path', 'cacert_content'), -- cgit v1.2.3