コード例 #1
0
 def put(self, namespace, name, ignore_exception=False, **kwargs):
     url = self.api("/namespaces/{}/middlewares/{}", namespace, name)
     if kwargs.get("resource_version") is None:
         response = self.get(namespace, name)
         if self.unhealthy(response.status_code):
             raise KubeHTTPException(response,
                                     "get middleware {}".format(name))
         resource_version = response.json()["metadata"]["resourceVersion"]
         kwargs["resource_version"] = resource_version
     data = self.manifest(name, **kwargs)
     response = self.http_put(url, json=data)
     if not ignore_exception and self.unhealthy(response.status_code):
         raise KubeHTTPException(response,
                                 "put middleware {}".format(namespace))
     return response
コード例 #2
0
    def create(self, ingress, namespace, hostname, ingress_class):
        url = "/apis/extensions/v1beta1/namespaces/%s/ingresses" % namespace

        data = {
            "kind": "Ingress",
            "apiVersion": "extensions/v1beta1",
            "metadata": {
                "name": ingress,
                "annotations": {
                    "kubernetes.io/ingress.class": ingress_class
                }
            },
            "spec": {
                "rules": [{
                    "host": ingress + "." + hostname,
                    "http": {
                        "paths": [{
                            "path": "/",
                            "backend": {
                                "serviceName": ingress,
                                "servicePort": 80
                            }
                        }]
                    }
                }]
            }
        }
        response = self.http_post(url, json=data)

        if not response.status_code == 201:
            raise KubeHTTPException(response,
                                    "create Ingress {}".format(namespace))

        return response
コード例 #3
0
    def delete(self, namespace, ingress):
        url = "/apis/extensions/v1beta1/namespaces/%s/ingresses/%s" % (namespace, ingress)
        response = self.http_delete(url)
        if self.unhealthy(response.status_code):
            raise KubeHTTPException(response, 'delete Ingress "{}"', namespace)

        return response
コード例 #4
0
ファイル: quota.py プロジェクト: zinuzoid/controller
    def create(self, namespace_name, name, **kwargs):
        """
        Create resource quota for namespace
        """
        url = self.api("/namespaces/{}/resourcequotas".format(namespace_name))
        manifest = {
            "kind": "ResourceQuota",
            "apiVersion": "v1",
            "metadata": {
                "namespace": namespace_name,
                "name": name,
                'labels': {
                    'app': namespace_name,
                    'heritage': 'deis'
                },
            },
            'spec': {}
        }

        data = dict_merge(manifest, kwargs.get('data', {}))
        response = self.http_post(url, json=data)
        if not response.status_code == 201:
            raise KubeHTTPException(
                response, "create quota {} for namespace {}".format(
                    name, namespace_name))

        return response
コード例 #5
0
ファイル: pod.py プロジェクト: ess/hephy-controller
    def delete(self, namespace, name):
        # get timeout info from pod
        pod = self.pod.get(namespace, name).json()
        # 30 seconds is the kubernetes default
        timeout = pod['spec'].get('terminationGracePeriodSeconds', 30)

        # delete pod
        url = self.api("/namespaces/{}/pods/{}", namespace, name)
        response = self.http_delete(url)
        if self.unhealthy(response.status_code):
            raise KubeHTTPException(response,
                                    'delete Pod "{}" in Namespace "{}"', name,
                                    namespace)

        # Verify the pod has been deleted
        # Only wait as long as the grace period is - k8s will eventually GC
        for _ in range(timeout):
            try:
                pod = self.pod.get(namespace, name).json()
                # hide pod if it is passed the graceful termination period
                if self.deleted(pod):
                    return
            except KubeHTTPException as e:
                if e.response.status_code == 404:
                    break

            time.sleep(1)

        return response
コード例 #6
0
    def create(self, namespace, name, message, **kwargs):
        url = self.api('/namespaces/{}/events'.format(namespace))
        data = {
            'kind': 'Event',
            'apiVersion': 'v1',
            'count': kwargs.get('count', 1),
            'metadata': {
                'creationTimestamp': datetime.now().strftime(DATETIME_FORMAT),
                'namespace': namespace,
                'name': name,
                'resourceVersion': kwargs.get('resourceVersion', ''),
                'uid': str(uuid.uuid4()),
            },
            'message': message,
            'type': kwargs.get('type', 'Normal'),
            'firstTimestamp': datetime.now().strftime(DATETIME_FORMAT),
            'lastTimestamp': datetime.now().strftime(DATETIME_FORMAT),
            'reason': kwargs.get('reason', ''),
            'source': {
                'component': kwargs.get('component', ''),
            },
            'involvedObject': kwargs.get('involvedObject', {})
        }

        response = self.http_post(url, json=data)
        if not response.status_code == 201:
            raise KubeHTTPException(
                response,
                'create Event for namespace {}'.format(namespace))  # noqa

        return response
コード例 #7
0
    def update(self, namespace, name, data):
        url = self.api("/namespaces/{}/replicationcontrollers/{}", namespace, name)
        response = self.http_put(url, json=data)
        if self.unhealthy(response.status_code):
            raise KubeHTTPException(response, 'scale ReplicationController "{}"', name)

        return response
コード例 #8
0
    def create(self, ingress, namespace, hostname):
        # Ingress API will be deprecated in 1.20 to use networking.k8s.io/v1beta1
        # https://kubernetes.io/blog/2019/07/18/api-deprecations-in-1-16/
        url = "/apis/extensions/v1beta1/namespaces/%s/ingresses" % namespace

        data = {
            "kind": "Ingress",
            "apiVersion": "extensions/v1beta1",
            "metadata": {
                "name": ingress
            },
            "spec": {
                "rules": [{
                    "host": ingress + "." + hostname,
                    "http": {
                        "paths": [{
                            "path": "/",
                            "backend": {
                                "serviceName": ingress,
                                "servicePort": 80
                            }
                        }]
                    }
                }]
            }
        }
        response = self.http_post(url, json=data)

        if not response.status_code == 201:
            raise KubeHTTPException(response,
                                    "create Ingress {}".format(namespace))

        return response
コード例 #9
0
    def delete(self, namespace, ingress):
        url = self.api("/namespaces/{}/ingresses/{}", namespace, ingress)
        response = self.http_delete(url)
        if self.unhealthy(response.status_code):
            raise KubeHTTPException(response, 'delete Ingress "{}"', namespace)

        return response
コード例 #10
0
ファイル: namespace.py プロジェクト: inglemr/controller
    def events(self, namespace, **kwargs):
        url = self.api("/namespaces/{}/events", namespace)
        response = self.http_get(url, params=self.query_params(**kwargs))
        if self.unhealthy(response.status_code):
            raise KubeHTTPException(response, "get Events in Namespace {}",
                                    namespace)

        return response
コード例 #11
0
    def delete(self, namespace, name, ignore_exception=True):
        url = self.api("/namespaces/{}/middlewares/{}", namespace, name)
        response = self.http_delete(url)
        if not ignore_exception and self.unhealthy(response.status_code):
            raise KubeHTTPException(response, 'delete middlewares "{}"',
                                    namespace)

        return response
コード例 #12
0
 def create(self, namespace, ignore_exception=False, **kwargs):
     url = self.api("/namespaces/{}/middlewares", namespace)
     data = self.manifest(**kwargs)
     response = self.http_post(url, json=data)
     if not ignore_exception and self.unhealthy(response.status_code):
         raise KubeHTTPException(response,
                                 "create middleware {}".format(namespace))
     return response
コード例 #13
0
    def version(self):
        """Get Kubernetes version as a float"""
        response = self.http_get('/version')
        if self.unhealthy(response.status_code):
            raise KubeHTTPException(response, 'fetching Kubernetes version')

        data = response.json()
        return float('{}.{}'.format(data['major'], data['minor']))
コード例 #14
0
 def delete_binding(self, namespace, name):
     """
     Delete servicebindings
     """
     url = self.api('/namespaces/{}/servicebindings/{}', namespace, name)
     response = self.http_delete(url)
     if self.unhealthy(response.status_code):
         raise KubeHTTPException(response, 'delete servicebindings ' + name)
     return response
コード例 #15
0
ファイル: deployment.py プロジェクト: dekhtyarev/controller
    def delete(self, namespace, name):
        url = self.api("/namespaces/{}/deployments/{}", namespace, name)
        response = self.http_delete(url)
        if self.unhealthy(response.status_code):
            raise KubeHTTPException(
                response, 'delete Deployment "{}" in Namespace "{}"', name,
                namespace)

        return response
コード例 #16
0
    def update(self, namespace, name, data):
        url = self.api("/namespaces/{}/services/{}", namespace, name)
        response = self.http_put(url, json=data)
        if self.unhealthy(response.status_code):
            raise KubeHTTPException(response,
                                    'update Service "{}" in Namespace "{}"',
                                    namespace, name)

        return response
コード例 #17
0
    def put(self, namespace, name, hosts, version):
        url = self.api('/namespaces/{}/certificates/{}', namespace, name)
        data = self.manifest(self.api_version, namespace, name, hosts, version)
        response = self.http_put(url, json=data)

        if self.unhealthy(response.status_code):
            raise KubeHTTPException(response,
                                    "put certificate {}".format(namespace))
        return response
コード例 #18
0
 def delete(self, namespace, name):
     """
     Delete certificate
     """
     url = self.api('/namespaces/{}/certificates/{}', namespace, name)
     response = self.http_delete(url)
     if self.unhealthy(response.status_code):
         raise KubeHTTPException(response, 'delete certificate ' + name)
     return response
コード例 #19
0
ファイル: pod.py プロジェクト: ess/hephy-controller
    def logs(self, namespace, name):
        url = self.api("/namespaces/{}/pods/{}/log", namespace, name)
        response = self.http_get(url)
        if self.unhealthy(response.status_code):
            raise KubeHTTPException(response,
                                    'get logs for Pod "{}" in Namespace "{}"',
                                    name, namespace)

        return response
コード例 #20
0
    def delete(self, namespace, name):
        url = self.api("/namespaces/{}/horizontalpodautoscalers/{}", namespace, name)
        response = self.http_delete(url)
        if self.unhealthy(response.status_code):
            raise KubeHTTPException(
                response,
                'delete HorizontalPodAutoscaler "{}" in Namespace "{}"', name, namespace
            )

        return response
コード例 #21
0
    def delete(self, namespace, name):
        url = self.api("/namespaces/{}/replicationcontrollers/{}", namespace, name)
        response = self.http_delete(url)
        if self.unhealthy(response.status_code):
            raise KubeHTTPException(
                response,
                'delete ReplicationController "{}" in Namespace "{}"', name, namespace
            )

        return response
コード例 #22
0
    def update(self, namespace, name, data, secret_type='Opaque', labels={}):
        manifest = self.manifest(namespace, name, data, secret_type, labels)
        url = self.api("/namespaces/{}/secrets/{}", namespace, name)
        response = self.http_put(url, json=manifest)
        if self.unhealthy(response.status_code):
            raise KubeHTTPException(
                response, 'failed to update Secret "{}" in Namespace "{}"',
                name, namespace)

        return response
コード例 #23
0
 def get_serviceplans(self, namespace=None):
     if namespace is None:
         url = self.api('/clusterserviceplans')
         message = 'get clusterserviceplans'
     else:
         url = self.api('/namespaces/{}/serviceplans', namespace)
         message = 'get serviceplans ' + namespace
     response = self.http_get(url)
     if self.unhealthy(response.status_code):
         raise KubeHTTPException(response, message)
     return response
コード例 #24
0
 def create(self, namespace, name, **kwargs):
     """
     Create persistentvolumeclaim
     """
     url = self.api('/namespaces/{}/persistentvolumeclaims', namespace)
     data = self.manifest(namespace, name, **kwargs)
     response = self.http_post(url, json=data)
     if not response.status_code == 201:
         raise KubeHTTPException(
             response, "create persistentvolumeclaim {}".format(namespace))
     return response
コード例 #25
0
    def create(self, namespace, name, hosts):

        url = self.api('/namespaces/{}/certificates', namespace)
        data = self.manifest(self.api_version, namespace, name, hosts)
        response = self.http_post(url, json=data)

        if not response.status_code == 201:
            raise KubeHTTPException(response,
                                    "create certificate {}".format(namespace))

        return response
コード例 #26
0
 def delete(self, namespace, name):
     """
     Delete persistentvolumeclaim
     """
     url = self.api('/namespaces/{}/persistentvolumeclaims/{}', namespace,
                    name)
     response = self.http_delete(url)
     if self.unhealthy(response.status_code):
         raise KubeHTTPException(response,
                                 'delete persistentvolumeclaim ' + name)
     return response
コード例 #27
0
 def create_instance(self, namespace, name, **kwargs):
     """
     Create serviceinstances
     """
     url = self.api('/namespaces/{}/serviceinstances', namespace)
     data = self.service_instance_manifest(namespace, name, **kwargs)
     response = self.http_post(url, json=data)
     if not response.status_code == 201:
         raise KubeHTTPException(
             response, "create serviceinstances {}".format(namespace))
     return response
コード例 #28
0
    def version(self):
        """Get Kubernetes version"""
        response = self.http_get('/version')
        if self.unhealthy(response.status_code):
            raise KubeHTTPException(response, 'fetching Kubernetes version')

        data = response.json()
        parsed_version = parse(
            re.sub(r'[^0-9\.]', '',
                   str('{}.{}'.format(data['major'], data['minor']))))
        return Version('{}'.format(parsed_version))
コード例 #29
0
ファイル: quota.py プロジェクト: zinuzoid/controller
    def get(self, namespace_name, name):
        """
        Fetch a single quota
        """
        url = '/namespaces/{}/resourcequotas/{}'.format(namespace_name, name)
        message = 'get quota {} for namespace {}'.format(name, namespace_name)
        url = self.api(url)
        response = self.http_get(url)
        if self.unhealthy(response.status_code):
            raise KubeHTTPException(response, message)

        return response
コード例 #30
0
    def get(self, namespace_name, name):
        """
        Fetch a single LimitRanges
        """
        url = '/namespaces/{}/limitranges/{}'.format(namespace_name, name)
        message = 'get LimitRanges {} for namespace {}'.format(
            name, namespace_name)
        url = self.api(url)
        response = self.http_get(url)
        if self.unhealthy(response.status_code):
            raise KubeHTTPException(response, message)

        return response