diff options
author | Kenny Woodson <kwoodson@redhat.com> | 2017-02-01 15:04:48 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-02-01 15:04:48 -0500 |
commit | 287282e3a1c36ea2c7bc9eb14e463fd347c7d95a (patch) | |
tree | 7a3875c397479c70106d8fbd8a032620075e17ac /roles/lib_openshift/src/lib/service.py | |
parent | 4431d38b412470f3e20564333afea7cf99ecb298 (diff) | |
parent | 9ef0eb0e1e25b2f4cf6c3cc72d838edf1cfafdf5 (diff) | |
download | openshift-287282e3a1c36ea2c7bc9eb14e463fd347c7d95a.tar.gz openshift-287282e3a1c36ea2c7bc9eb14e463fd347c7d95a.tar.bz2 openshift-287282e3a1c36ea2c7bc9eb14e463fd347c7d95a.tar.xz openshift-287282e3a1c36ea2c7bc9eb14e463fd347c7d95a.zip |
Merge pull request #3224 from kwoodson/oc_service
Adding oc_service to lib_openshift.
Diffstat (limited to 'roles/lib_openshift/src/lib/service.py')
-rw-r--r-- | roles/lib_openshift/src/lib/service.py | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/roles/lib_openshift/src/lib/service.py b/roles/lib_openshift/src/lib/service.py new file mode 100644 index 000000000..ffe27da47 --- /dev/null +++ b/roles/lib_openshift/src/lib/service.py @@ -0,0 +1,126 @@ +# pylint: skip-file +# flake8: noqa + + +# pylint: disable=too-many-instance-attributes +class ServiceConfig(object): + ''' Handle service options ''' + # pylint: disable=too-many-arguments + def __init__(self, + sname, + namespace, + ports, + selector=None, + labels=None, + cluster_ip=None, + portal_ip=None, + session_affinity=None, + service_type=None): + ''' constructor for handling service options ''' + self.name = sname + self.namespace = namespace + self.ports = ports + self.selector = selector + self.labels = labels + self.cluster_ip = cluster_ip + self.portal_ip = portal_ip + self.session_affinity = session_affinity + self.service_type = service_type + self.data = {} + + self.create_dict() + + def create_dict(self): + ''' instantiates a service dict ''' + self.data['apiVersion'] = 'v1' + self.data['kind'] = 'Service' + self.data['metadata'] = {} + self.data['metadata']['name'] = self.name + self.data['metadata']['namespace'] = self.namespace + if self.labels: + for lab, lab_value in self.labels.items(): + self.data['metadata'][lab] = lab_value + self.data['spec'] = {} + + if self.ports: + self.data['spec']['ports'] = self.ports + else: + self.data['spec']['ports'] = [] + + if self.selector: + self.data['spec']['selector'] = self.selector + + self.data['spec']['sessionAffinity'] = self.session_affinity or 'None' + + if self.cluster_ip: + self.data['spec']['clusterIP'] = self.cluster_ip + + if self.portal_ip: + self.data['spec']['portalIP'] = self.portal_ip + + if self.service_type: + self.data['spec']['type'] = self.service_type + +# pylint: disable=too-many-instance-attributes,too-many-public-methods +class Service(Yedit): + ''' Class to model the oc service object ''' + port_path = "spec.ports" + portal_ip = "spec.portalIP" + cluster_ip = "spec.clusterIP" + kind = 'Service' + + def __init__(self, content): + '''Service constructor''' + super(Service, self).__init__(content=content) + + def get_ports(self): + ''' get a list of ports ''' + return self.get(Service.port_path) or [] + + def add_ports(self, inc_ports): + ''' add a port object to the ports list ''' + if not isinstance(inc_ports, list): + inc_ports = [inc_ports] + + ports = self.get_ports() + if not ports: + self.put(Service.port_path, inc_ports) + else: + ports.extend(inc_ports) + + return True + + def find_ports(self, inc_port): + ''' find a specific port ''' + for port in self.get_ports(): + if port['port'] == inc_port['port']: + return port + + return None + + def delete_ports(self, inc_ports): + ''' remove a port from a service ''' + if not isinstance(inc_ports, list): + inc_ports = [inc_ports] + + ports = self.get(Service.port_path) or [] + + if not ports: + return True + + removed = False + for inc_port in inc_ports: + port = self.find_ports(inc_port) + if port: + ports.remove(port) + removed = True + + return removed + + def add_cluster_ip(self, sip): + '''add cluster ip''' + self.put(Service.cluster_ip, sip) + + def add_portal_ip(self, pip): + '''add cluster ip''' + self.put(Service.portal_ip, pip) |