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)))
Пример #2
0
    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
Пример #4
0
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)
Пример #5
0
    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
Пример #6
0
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)
Пример #7
0
def fake_endpoinds():
    return client.V1Endpoints(
        api_version='v1',
        kind='Endpoints',
        metadata=client.V1ObjectMeta(namespace='default'))