summaryrefslogtreecommitdiffstats
path: root/roles/lib_openshift/src/lib
diff options
context:
space:
mode:
authorKenny Woodson <kwoodson@redhat.com>2017-01-29 14:21:29 -0500
committerKenny Woodson <kwoodson@redhat.com>2017-01-31 14:27:21 -0500
commit8237eebd0d24ed8577d8360bea220af70807d073 (patch)
treebc2bdce149aad94b7465a472e07c1bd8b41bbb55 /roles/lib_openshift/src/lib
parentf02c2f2de47e905c92f3fdaaf077f0bfa845a537 (diff)
downloadopenshift-8237eebd0d24ed8577d8360bea220af70807d073.tar.gz
openshift-8237eebd0d24ed8577d8360bea220af70807d073.tar.bz2
openshift-8237eebd0d24ed8577d8360bea220af70807d073.tar.xz
openshift-8237eebd0d24ed8577d8360bea220af70807d073.zip
Adding oc_service to lib_openshift.
Diffstat (limited to 'roles/lib_openshift/src/lib')
-rw-r--r--roles/lib_openshift/src/lib/service.py124
1 files changed, 124 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..4f69fca9b
--- /dev/null
+++ b/roles/lib_openshift/src/lib/service.py
@@ -0,0 +1,124 @@
+# pylint: skip-file
+
+# 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):
+ ''' return a service as a 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 wrap the oc command line tools '''
+ 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)