def addNewServiceEndpoints(v1, serviceName, hostNames, hostPorts): try: metadata = {"name": serviceName, "labels": {LABEL_KEY: LABEL}} ports = [{"name": "metrics", "port": port} for port in hostPorts] service = client.V1Service() service.metadata = metadata service.spec = {"clusterIP": "None", "ports": ports} v1.create_namespaced_service(NAMESPACE, service) log.info("Create service %s" % str(service)) except Exception as e: log.exception( "Cannot create Kubernates service and endpoint for cluster %s, details: %s" % (serviceName, str(e))) try: endpoint = client.V1Endpoints() endpoint.metadata = metadata endpointHosts = [{'ip': host} for host in hostNames] endpoint.subsets = [{"addresses": endpointHosts, 'ports': ports}] v1.create_namespaced_endpoints(NAMESPACE, endpoint) log.info("Create endpoint %s" % str(endpoint)) except Exception as e: log.exception( "Cannot create Kubernates service and endpoint for cluster %s, details: %s" % (serviceName, str(e)))
def patch_or_create(self, name, annotations, resource_version=None, patch=False, retry=True, subsets=None): metadata = { 'namespace': self._namespace, 'name': name, 'labels': self._labels, 'annotations': annotations } if patch or resource_version: if resource_version is not None: metadata['resource_version'] = resource_version func = functools.partial(self._api.patch_namespaced_kind, name) else: func = functools.partial(self._api.create_namespaced_kind) # skip annotations with null values metadata['annotations'] = { k: v for k, v in metadata['annotations'].items() if v is not None } metadata = k8s_client.V1ObjectMeta(**metadata) if subsets is not None and self.__subsets: endpoints = {'metadata': metadata} if self.subsets_changed(self._leader_observed_subsets, subsets): endpoints['subsets'] = subsets body = k8s_client.V1Endpoints(**endpoints) else: body = k8s_client.V1ConfigMap(metadata=metadata) return self.retry(func, self._namespace, body) if retry else func( self._namespace, body)
def create_endpoint(endpoint_name: str, namespace: str) -> client.V1Endpoints: metadata = client.V1ObjectMeta() metadata.name = endpoint_name metadata.namespace = namespace new_endpoint = client.V1Endpoints(api_version='v1', kind='Endpoints', metadata=metadata) return new_endpoint
def patch_master_endpoint(api, namespace, cluster): addresses = [k8s_client.V1EndpointAddress(ip=os.environ['POD_IP'])] logger.info("from callback addresses") logger.info(addresses) ports = [k8s_client.V1EndpointPort(port=5432)] logger.info("from callback ports") logger.info(ports) subsets = [k8s_client.V1EndpointSubset(addresses=addresses, ports=ports)] logger.info("from callback subsets") logger.info(subsets) body = k8s_client.V1Endpoints(subsets=subsets) logger.info("from callback body") logger.info([cluster, namespace, body]) return api.patch_namespaced_endpoints(cluster, namespace, body)
def _patch_or_create(self, name, annotations, resource_version=None, patch=False, retry=None, ips=None): metadata = {'namespace': self._namespace, 'name': name, 'labels': self._labels, 'annotations': annotations} if patch or resource_version: if resource_version is not None: metadata['resource_version'] = resource_version func = functools.partial(self._api.patch_namespaced_kind, name) else: func = functools.partial(self._api.create_namespaced_kind) # skip annotations with null values metadata['annotations'] = {k: v for k, v in metadata['annotations'].items() if v is not None} metadata = k8s_client.V1ObjectMeta(**metadata) if ips is not None and self._api.use_endpoints: endpoints = {'metadata': metadata} self._map_subsets(endpoints, ips) body = k8s_client.V1Endpoints(**endpoints) else: body = k8s_client.V1ConfigMap(metadata=metadata) ret = retry(func, self._namespace, body) if retry else func(self._namespace, body) if ret: self._kinds.set(name, ret) return ret
def patch_master_endpoint(api, namespace, cluster): addresses = [k8s_client.V1EndpointAddress(ip=os.environ['POD_IP'])] ports = [k8s_client.V1EndpointPort(name='postgresql', port=5432)] subsets = [k8s_client.V1EndpointSubset(addresses=addresses, ports=ports)] body = k8s_client.V1Endpoints(subsets=subsets) return api.patch_namespaced_endpoints(cluster, namespace, body)
def fake_endpoinds(): return client.V1Endpoints( api_version='v1', kind='Endpoints', metadata=client.V1ObjectMeta(namespace='default'))