diff options
Diffstat (limited to 'roles/lib_openshift/src/lib')
-rw-r--r-- | roles/lib_openshift/src/lib/base.py | 98 | ||||
-rw-r--r-- | roles/lib_openshift/src/lib/route.py | 25 |
2 files changed, 105 insertions, 18 deletions
diff --git a/roles/lib_openshift/src/lib/base.py b/roles/lib_openshift/src/lib/base.py index 915a7caca..db5f4e890 100644 --- a/roles/lib_openshift/src/lib/base.py +++ b/roles/lib_openshift/src/lib/base.py @@ -47,14 +47,14 @@ class OpenShiftCLI(object): return {'returncode': 0, 'updated': False} def _replace(self, fname, force=False): - '''return all pods ''' - cmd = ['-n', self.namespace, 'replace', '-f', fname] + '''replace the current object with oc replace''' + cmd = ['replace', '-f', fname] if force: cmd.append('--force') return self.openshift_cmd(cmd) def _create_from_content(self, rname, content): - '''return all pods ''' + '''create a temporary file and then call oc create on it''' fname = '/tmp/%s' % rname yed = Yedit(fname, content=content) yed.write() @@ -64,20 +64,26 @@ class OpenShiftCLI(object): return self._create(fname) def _create(self, fname): - '''return all pods ''' - return self.openshift_cmd(['create', '-f', fname, '-n', self.namespace]) + '''call oc create on a filename''' + return self.openshift_cmd(['create', '-f', fname]) def _delete(self, resource, rname, selector=None): - '''return all pods ''' - cmd = ['delete', resource, rname, '-n', self.namespace] + '''call oc delete on a resource''' + cmd = ['delete', resource, rname] if selector: cmd.append('--selector=%s' % selector) return self.openshift_cmd(cmd) def _process(self, template_name, create=False, params=None, template_data=None): # noqa: E501 - '''return all pods ''' - cmd = ['process', '-n', self.namespace] + '''process a template + + template_name: the name of the template to process + create: whether to send to oc create after processing + params: the parameters for the template + template_data: the incoming template's data; instead of a file + ''' + cmd = ['process'] if template_data: cmd.extend(['-f', '-']) else: @@ -98,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']) @@ -138,7 +140,12 @@ class OpenShiftCLI(object): return self.openshift_cmd(cmd, oadm=True, output=True, output_type='raw') # noqa: E501 def _list_pods(self, node=None, selector=None, pod_selector=None): - ''' perform oadm manage-node evacuate ''' + ''' perform oadm list pods + + node: the node in which to list pods + selector: the label selector filter if provided + pod_selector: the pod selector filter if provided + ''' cmd = ['manage-node'] if node: cmd.extend(node) @@ -177,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'] @@ -195,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 = [] @@ -204,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 = {} @@ -329,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) |