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/src/lib/base.py | 76 ++++++++++++++++++++++++++++++------ roles/lib_openshift/src/lib/route.py | 25 +++++++++++- 2 files changed, 88 insertions(+), 13 deletions(-) (limited to 'roles/lib_openshift/src/lib') diff --git a/roles/lib_openshift/src/lib/base.py b/roles/lib_openshift/src/lib/base.py index cf2f1b14d..db5f4e890 100644 --- a/roles/lib_openshift/src/lib/base.py +++ b/roles/lib_openshift/src/lib/base.py @@ -48,7 +48,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) @@ -65,11 +65,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) @@ -83,8 +83,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: @@ -105,17 +104,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']) @@ -189,6 +184,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'] @@ -207,7 +206,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 = [] @@ -216,6 +215,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 = {} @@ -341,6 +345,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 diff --git a/roles/lib_openshift/src/lib/route.py b/roles/lib_openshift/src/lib/route.py index df062b0dd..3130e7358 100644 --- a/roles/lib_openshift/src/lib/route.py +++ b/roles/lib_openshift/src/lib/route.py @@ -17,7 +17,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 @@ -30,6 +32,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() @@ -54,14 +62,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" @@ -93,6 +106,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) @@ -100,3 +117,7 @@ class Route(Yedit): def get_host(self): ''' return host ''' return self.get(Route.host_path) + + def get_wildcard_policy(self): + ''' return wildcardPolicy ''' + return self.get(Route.wildcard_policy) -- cgit v1.2.3