Пример #1
0
    def _test_retrieve_bay(self, obj, mock_bay_get_by_uuid):
        expected_context = 'context'
        expected_bay_uuid = 'bay_uuid'

        obj.bay_uuid = expected_bay_uuid
        utils.retrieve_bay(expected_context, obj)
        mock_bay_get_by_uuid.assert_called_once_with(expected_context,
                                                     expected_bay_uuid)
Пример #2
0
    def pod_list(self, context, bay_ident):
        bay = conductor_utils.retrieve_bay(context, bay_ident)
        self.k8s_api = k8s.create_k8s_api(context, bay)
        try:
            resp = self.k8s_api.list_namespaced_pod(namespace='default')
        except rest.ApiException as err:
            raise exception.KubernetesAPIFailed(err=err)

        if resp is None:
            raise exception.PodListNotFound(bay_uuid=bay.uuid)

        pods = []
        for pod_entry in resp.items:
            pod = {}
            pod['uuid'] = pod_entry.metadata.uid
            pod['name'] = pod_entry.metadata.name
            pod['project_id'] = context.project_id
            pod['user_id'] = context.user_id
            pod['bay_uuid'] = bay.uuid
            pod['images'] = [c.image for c in pod_entry.spec.containers]
            if not pod_entry.metadata.labels:
                pod['labels'] = {}
            else:
                pod['labels'] = ast.literal_eval(pod_entry.metadata.labels)
            pod['status'] = pod_entry.status.phase
            pod['host'] = pod_entry.spec.node_name

            pod_obj = objects.Pod(context, **pod)
            pods.append(pod_obj)

        return pods
Пример #3
0
    def rc_update(self, context, rc_ident, bay_ident, manifest):
        LOG.debug("rc_update %s", rc_ident)
        bay = conductor_utils.retrieve_bay(context, bay_ident)
        self.k8s_api = k8s.create_k8s_api(context, bay)
        if uuidutils.is_uuid_like(rc_ident):
            rc = objects.ReplicationController.get_by_uuid(context, rc_ident,
                                                           bay.uuid,
                                                           self.k8s_api)
        else:
            rc = objects.ReplicationController.get_by_name(context, rc_ident,
                                                           bay.uuid,
                                                           self.k8s_api)
        try:
            resp = self.k8s_api.replace_namespaced_replication_controller(
                name=str(rc.name),
                body=manifest,
                namespace='default')
        except rest.ApiException as err:
            raise exception.KubernetesAPIFailed(err=err)

        if resp is None:
            raise exception.ReplicationControllerNotFound(rc=rc.uuid)

        rc['uuid'] = resp.metadata.uid
        rc['name'] = resp.metadata.name
        rc['project_id'] = context.project_id
        rc['user_id'] = context.user_id
        rc['images'] = [c.image for c in resp.spec.template.spec.containers]
        rc['bay_uuid'] = bay.uuid
        rc['labels'] = ast.literal_eval(resp.metadata.labels)
        rc['replicas'] = resp.status.replicas

        return rc
Пример #4
0
    def pod_update(self, context, pod_ident, bay_ident, manifest):
        LOG.debug("pod_update %s", pod_ident)
        bay = conductor_utils.retrieve_bay(context, bay_ident)
        self.k8s_api = k8s.create_k8s_api(context, bay)
        if utils.is_uuid_like(pod_ident):
            pod = objects.Pod.get_by_uuid(context, pod_ident,
                                          bay.uuid, self.k8s_api)
        else:
            pod = objects.Pod.get_by_name(context, pod_ident,
                                          bay.uuid, self.k8s_api)
        pod_ident = pod.name
        try:
            resp = self.k8s_api.replace_namespaced_pod(name=str(pod_ident),
                                                       body=manifest,
                                                       namespace='default')
        except rest.ApiException as err:
            raise exception.KubernetesAPIFailed(err=err)

        if resp is None:
            raise exception.PodNotFound(pod=pod.uuid)

        pod['uuid'] = resp.metadata.uid
        pod['name'] = resp.metadata.name
        pod['project_id'] = context.project_id
        pod['user_id'] = context.user_id
        pod['bay_uuid'] = bay.uuid
        pod['images'] = [c.image for c in resp.spec.containers]
        if not resp.metadata.labels:
            pod['labels'] = {}
        else:
            pod['labels'] = ast.literal_eval(resp.metadata.labels)
        pod['status'] = resp.status.phase
        pod['host'] = resp.spec.node_name

        return pod
Пример #5
0
    def pod_update(self, context, pod_ident, bay_ident, manifest):
        LOG.debug("pod_update %s", pod_ident)
        bay = conductor_utils.retrieve_bay(context, bay_ident)
        self.k8s_api = k8s.create_k8s_api(context, bay)
        if utils.is_uuid_like(pod_ident):
            pod = objects.Pod.get_by_uuid(context, pod_ident, bay.uuid,
                                          self.k8s_api)
        else:
            pod = objects.Pod.get_by_name(context, pod_ident, bay.uuid,
                                          self.k8s_api)
        pod_ident = pod.name
        try:
            resp = self.k8s_api.replace_namespaced_pod(name=str(pod_ident),
                                                       body=manifest,
                                                       namespace='default')
        except rest.ApiException as err:
            raise exception.KubernetesAPIFailed(err=err)

        if resp is None:
            raise exception.PodNotFound(pod=pod.uuid)

        pod['uuid'] = resp.metadata.uid
        pod['name'] = resp.metadata.name
        pod['project_id'] = context.project_id
        pod['user_id'] = context.user_id
        pod['bay_uuid'] = bay.uuid
        pod['images'] = [c.image for c in resp.spec.containers]
        if not resp.metadata.labels:
            pod['labels'] = {}
        else:
            pod['labels'] = ast.literal_eval(resp.metadata.labels)
        pod['status'] = resp.status.phase
        pod['host'] = resp.spec.node_name

        return pod
Пример #6
0
    def rc_update(self, context, rc_ident, bay_ident, manifest):
        LOG.debug("rc_update %s", rc_ident)
        bay = conductor_utils.retrieve_bay(context, bay_ident)
        self.k8s_api = k8s.create_k8s_api(context, bay)
        if utils.is_uuid_like(rc_ident):
            rc = objects.ReplicationController.get_by_uuid(context, rc_ident,
                                                           bay.uuid,
                                                           self.k8s_api)
        else:
            rc = objects.ReplicationController.get_by_name(context, rc_ident,
                                                           bay.uuid,
                                                           self.k8s_api)
        try:
            resp = self.k8s_api.replace_namespaced_replication_controller(
                name=str(rc.name),
                body=manifest,
                namespace='default')
        except rest.ApiException as err:
            raise exception.KubernetesAPIFailed(err=err)

        if resp is None:
            raise exception.ReplicationControllerNotFound(rc=rc.uuid)

        rc['uuid'] = resp.metadata.uid
        rc['name'] = resp.metadata.name
        rc['project_id'] = context.project_id
        rc['user_id'] = context.user_id
        rc['images'] = [c.image for c in resp.spec.template.spec.containers]
        rc['bay_uuid'] = bay.uuid
        rc['labels'] = ast.literal_eval(resp.metadata.labels)
        rc['replicas'] = resp.status.replicas

        return rc
Пример #7
0
    def pod_list(self, context, bay_ident):
        bay = conductor_utils.retrieve_bay(context, bay_ident)
        self.k8s_api = k8s.create_k8s_api(context, bay)
        try:
            resp = self.k8s_api.list_namespaced_pod(namespace='default')
        except rest.ApiException as err:
            raise exception.KubernetesAPIFailed(err=err)

        if resp is None:
            raise exception.PodListNotFound(bay_uuid=bay.uuid)

        pods = []
        for pod_entry in resp.items:
            pod = {}
            pod['uuid'] = pod_entry.metadata.uid
            pod['name'] = pod_entry.metadata.name
            pod['project_id'] = context.project_id
            pod['user_id'] = context.user_id
            pod['bay_uuid'] = bay.uuid
            pod['images'] = [c.image for c in pod_entry.spec.containers]
            if not pod_entry.metadata.labels:
                pod['labels'] = {}
            else:
                pod['labels'] = ast.literal_eval(pod_entry.metadata.labels)
            pod['status'] = pod_entry.status.phase
            pod['host'] = pod_entry.spec.node_name

            pod_obj = objects.Pod(context, **pod)
            pods.append(pod_obj)

        return pods
Пример #8
0
    def service_create(self, context, service):
        LOG.debug("service_create")
        bay = conductor_utils.retrieve_bay(context, service.bay_uuid)
        self.k8s_api = k8s.create_k8s_api(context, bay)
        manifest = k8s_manifest.parse(service.manifest)
        try:
            resp = self.k8s_api.create_namespaced_service(body=manifest,
                                                          namespace='default')
        except rest.ApiException as err:
            raise exception.KubernetesAPIFailed(err=err)

        if resp is None:
            raise exception.ServiceCreationFailed(bay_uuid=service.bay_uuid)

        service['uuid'] = resp.metadata.uid
        service['name'] = resp.metadata.name
        service['labels'] = ast.literal_eval(resp.metadata.labels)
        service['selector'] = ast.literal_eval(resp.spec.selector)
        service['ip'] = resp.spec.cluster_ip
        service_value = []
        for p in resp.spec.ports:
            ports = p.to_dict()
            if not ports['name']:
                ports['name'] = 'k8s-service'
            service_value.append(ports)

        service['ports'] = service_value

        return service
Пример #9
0
    def rc_list(self, context, bay_ident):
        bay = conductor_utils.retrieve_bay(context, bay_ident)
        self.k8s_api = k8s.create_k8s_api(context, bay)
        try:
            resp = self.k8s_api.list_namespaced_replication_controller(
                namespace='default')
        except rest.ApiException as err:
            raise exception.KubernetesAPIFailed(err=err)

        if resp is None:
            raise exception.ReplicationControllerListNotFound(
                bay_uuid=bay.uuid)

        rcs = []
        for entry in resp._items:
            rc = {}
            rc['uuid'] = entry.metadata.uid
            rc['name'] = entry.metadata.name
            rc['project_id'] = context.project_id
            rc['user_id'] = context.user_id
            rc['images'] = [
                c.image for c in entry.spec.template.spec.containers]
            rc['bay_uuid'] = bay.uuid
            # Convert string to dictionary
            rc['labels'] = ast.literal_eval(entry.metadata.labels)
            rc['replicas'] = entry.status.replicas

            rc_obj = objects.ReplicationController(context, **rc)
            rcs.append(rc_obj)

        return rcs
Пример #10
0
    def service_create(self, context, service):
        LOG.debug("service_create")
        bay = conductor_utils.retrieve_bay(context, service.bay_uuid)
        self.k8s_api = k8s.create_k8s_api(context, bay)
        manifest = k8s_manifest.parse(service.manifest)
        try:
            resp = self.k8s_api.create_namespaced_service(body=manifest,
                                                          namespace='default')
        except rest.ApiException as err:
            raise exception.KubernetesAPIFailed(err=err)

        if resp is None:
            raise exception.ServiceCreationFailed(bay_uuid=service.bay_uuid)

        service['uuid'] = resp.metadata.uid
        service['name'] = resp.metadata.name
        service['labels'] = ast.literal_eval(resp.metadata.labels)
        service['selector'] = ast.literal_eval(resp.spec.selector)
        service['ip'] = resp.spec.cluster_ip
        service_value = []
        for p in resp.spec.ports:
            ports = p.to_dict()
            if not ports['name']:
                ports['name'] = 'k8s-service'
            service_value.append(ports)

        service['ports'] = service_value

        return service
Пример #11
0
    def rc_list(self, context, bay_ident):
        bay = conductor_utils.retrieve_bay(context, bay_ident)
        self.k8s_api = k8s.create_k8s_api(context, bay)
        try:
            resp = self.k8s_api.list_namespaced_replication_controller(
                namespace='default')
        except rest.ApiException as err:
            raise exception.KubernetesAPIFailed(err=err)

        if resp is None:
            raise exception.ReplicationControllerListNotFound(
                bay_uuid=bay.uuid)

        rcs = []
        for entry in resp._items:
            rc = {}
            rc['uuid'] = entry.metadata.uid
            rc['name'] = entry.metadata.name
            rc['project_id'] = context.project_id
            rc['user_id'] = context.user_id
            rc['images'] = [
                c.image for c in entry.spec.template.spec.containers]
            rc['bay_uuid'] = bay.uuid
            # Convert string to dictionary
            rc['labels'] = ast.literal_eval(entry.metadata.labels)
            rc['replicas'] = entry.status.replicas

            rc_obj = objects.ReplicationController(context, **rc)
            rcs.append(rc_obj)

        return rcs
Пример #12
0
    def _retrieve_k8s_api_endpoint(context, obj):
        if hasattr(obj, 'bay_uuid'):
            obj = utils.retrieve_bay(context, obj)

        params = {
            'k8s_protocol': cfg.CONF.kubernetes.k8s_protocol,
            'api_address': obj.api_address
        }
        return "%(k8s_protocol)s://%(api_address)s" % params
Пример #13
0
    def _retrieve_k8s_api_endpoint(context, obj):
        if hasattr(obj, 'bay_uuid'):
            obj = utils.retrieve_bay(context, obj)

        params = {
            'k8s_protocol': cfg.CONF.kubernetes.k8s_protocol,
            'api_address': obj.api_address
        }
        return "%(k8s_protocol)s://%(api_address)s" % params
Пример #14
0
    def pod_show(self, context, pod_ident, bay_ident):
        LOG.debug("pod_show %s", pod_ident)
        bay = conductor_utils.retrieve_bay(context, bay_ident)
        self.k8s_api = k8s.create_k8s_api(context, bay)
        if utils.is_uuid_like(pod_ident):
            pod = objects.Pod.get_by_uuid(context, pod_ident,
                                          bay.uuid, self.k8s_api)
        else:
            pod = objects.Pod.get_by_name(context, pod_ident,
                                          bay.uuid, self.k8s_api)

        return pod
Пример #15
0
    def service_show(self, context, service_ident, bay_ident):
        LOG.debug("service_show %s", service_ident)
        bay = conductor_utils.retrieve_bay(context, bay_ident)
        self.k8s_api = k8s.create_k8s_api(context, bay)
        if utils.is_uuid_like(service_ident):
            service = objects.Service.get_by_uuid(context, service_ident,
                                                  bay.uuid, self.k8s_api)
        else:
            service = objects.Service.get_by_name(context, service_ident,
                                                  bay.uuid, self.k8s_api)

        return service
Пример #16
0
    def pod_show(self, context, pod_ident, bay_ident):
        LOG.debug("pod_show %s", pod_ident)
        bay = conductor_utils.retrieve_bay(context, bay_ident)
        self.k8s_api = k8s.create_k8s_api(context, bay)
        if utils.is_uuid_like(pod_ident):
            pod = objects.Pod.get_by_uuid(context, pod_ident, bay.uuid,
                                          self.k8s_api)
        else:
            pod = objects.Pod.get_by_name(context, pod_ident, bay.uuid,
                                          self.k8s_api)

        return pod
Пример #17
0
    def service_show(self, context, service_ident, bay_ident):
        LOG.debug("service_show %s", service_ident)
        bay = conductor_utils.retrieve_bay(context, bay_ident)
        self.k8s_api = k8s.create_k8s_api(context, bay)
        if utils.is_uuid_like(service_ident):
            service = objects.Service.get_by_uuid(context, service_ident,
                                                  bay.uuid, self.k8s_api)
        else:
            service = objects.Service.get_by_name(context, service_ident,
                                                  bay.uuid, self.k8s_api)

        return service
Пример #18
0
    def rc_show(self, context, rc_ident, bay_ident):
        LOG.debug("rc_show %s", rc_ident)
        bay = conductor_utils.retrieve_bay(context, bay_ident)
        self.k8s_api = k8s.create_k8s_api(context, bay)
        if utils.is_uuid_like(rc_ident):
            rc = objects.ReplicationController.get_by_uuid(
                context, rc_ident, bay.uuid, self.k8s_api)
        else:
            rc = objects.ReplicationController.get_by_name(
                context, rc_ident, bay.uuid, self.k8s_api)

        return rc
Пример #19
0
    def rc_show(self, context, rc_ident, bay_ident):
        LOG.debug("rc_show %s", rc_ident)
        bay = conductor_utils.retrieve_bay(context, bay_ident)
        self.k8s_api = k8s.create_k8s_api(context, bay)
        if utils.is_uuid_like(rc_ident):
            rc = objects.ReplicationController.get_by_uuid(context, rc_ident,
                                                           bay.uuid,
                                                           self.k8s_api)
        else:
            rc = objects.ReplicationController.get_by_name(context, rc_ident,
                                                           bay.uuid,
                                                           self.k8s_api)

        return rc
Пример #20
0
    def __init__(self, context, bay_uuid):
        self.ca_file = None
        self.cert_file = None
        self.key_file = None

        bay = utils.retrieve_bay(context, bay_uuid)
        if bay.magnum_cert_ref:
            self._create_certificate_files(bay)

        # build a connection with Kubernetes master
        client = api_client.ApiClient(bay.api_address,
                                      key_file=self.key_file.name,
                                      cert_file=self.cert_file.name,
                                      ca_certs=self.ca_file.name)

        super(K8sAPI_RC, self).__init__(client)
Пример #21
0
    def __init__(self, context, bay_uuid):
        self.ca_file = None
        self.cert_file = None
        self.key_file = None

        bay = utils.retrieve_bay(context, bay_uuid)
        if bay.magnum_cert_ref:
            self._create_certificate_files(bay)

        # build a connection with Kubernetes master
        client = api_client.ApiClient(bay.api_address,
                                      key_file=self.key_file.name,
                                      cert_file=self.cert_file.name,
                                      ca_certs=self.ca_file.name)

        super(K8sAPI, self).__init__(client)
Пример #22
0
    def service_update(self, context, service_ident, bay_ident, manifest):
        LOG.debug("service_update %s", service_ident)
        bay = conductor_utils.retrieve_bay(context, bay_ident)
        self.k8s_api = k8s.create_k8s_api(context, bay)
        if utils.is_uuid_like(service_ident):
            service = objects.Service.get_by_uuid(context,
                                                  service_ident,
                                                  bay.uuid,
                                                  self.k8s_api)
        else:
            service = objects.Service.get_by_name(context,
                                                  service_ident,
                                                  bay.uuid,
                                                  self.k8s_api)
        service_ident = service.name
        try:
            resp = self.k8s_api.replace_namespaced_service(
                name=str(service_ident),
                body=manifest,
                namespace='default')
        except rest.ApiException as err:
            raise exception.KubernetesAPIFailed(err=err)

        if resp is None:
            raise exception.ServiceNotFound(service=service.uuid)

        service['uuid'] = resp.metadata.uid
        service['name'] = resp.metadata.name
        service['project_id'] = context.project_id
        service['user_id'] = context.user_id
        service['bay_uuid'] = bay.uuid
        service['labels'] = ast.literal_eval(resp.metadata.labels)
        if not resp.spec.selector:
            service['selector'] = {}
        else:
            service['selector'] = ast.literal_eval(resp.spec.selector)
        service['ip'] = resp.spec.cluster_ip
        service_value = []
        for p in resp.spec.ports:
            ports = p.to_dict()
            if not ports['name']:
                ports['name'] = 'k8s-service'
            service_value.append(ports)

        service['ports'] = service_value

        return service
Пример #23
0
 def rc_delete(self, context, rc_ident, bay_ident):
     LOG.debug("rc_delete %s", rc_ident)
     bay = conductor_utils.retrieve_bay(context, bay_ident)
     self.k8s_api = k8s.create_k8s_api(context, bay)
     if utils.is_uuid_like(rc_ident):
         rc = objects.ReplicationController.get_by_uuid(
             context, rc_ident, bay.uuid, self.k8s_api)
         rc_name = rc.name
     else:
         rc_name = rc_ident
     if conductor_utils.object_has_stack(context, bay.uuid):
         try:
             self.k8s_api.delete_namespaced_replication_controller(
                 name=str(rc_name), body={}, namespace='default')
         except rest.ApiException as err:
             if err.status == 404:
                 pass
             else:
                 raise exception.KubernetesAPIFailed(err=err)
Пример #24
0
 def pod_delete(self, context, pod_ident, bay_ident):
     LOG.debug("pod_delete %s", pod_ident)
     bay = conductor_utils.retrieve_bay(context, bay_ident)
     self.k8s_api = k8s.create_k8s_api(context, bay)
     if utils.is_uuid_like(pod_ident):
         pod = objects.Pod.get_by_uuid(context, pod_ident,
                                       bay.uuid, self.k8s_api)
         pod_name = pod.name
     else:
         pod_name = pod_ident
     if conductor_utils.object_has_stack(context, bay.uuid):
         try:
             self.k8s_api.delete_namespaced_pod(name=str(pod_name), body={},
                                                namespace='default')
         except rest.ApiException as err:
             if err.status == 404:
                 pass
             else:
                 raise exception.KubernetesAPIFailed(err=err)
Пример #25
0
    def __init__(self, context, obj):
        self.ca_file = None
        self.cert_file = None
        self.key_file = None

        # If the obj is already a Bay we need not retrieve a Bay.
        if isinstance(obj, Bay):
            bay = obj
        else:
            bay = utils.retrieve_bay(context, obj.bay_uuid)
        if bay.magnum_cert_ref:
            self._create_certificate_files(bay)

        # build a connection with Kubernetes master
        client = api_client.ApiClient(bay.api_address,
                                      key_file=self.key_file.name,
                                      cert_file=self.cert_file.name,
                                      ca_certs=self.ca_file.name)

        super(K8sAPI, self).__init__(client)
Пример #26
0
    def __init__(self, context, obj):
        self.ca_file = None
        self.cert_file = None
        self.key_file = None

        # If the obj is already a Bay we need not retrieve a Bay.
        if isinstance(obj, Bay):
            bay = obj
        else:
            bay = utils.retrieve_bay(context, obj.bay_uuid)
        if bay.magnum_cert_ref:
            self._create_certificate_files(bay)

        # build a connection with Kubernetes master
        client = api_client.ApiClient(bay.api_address,
                                      key_file=self.key_file.name,
                                      cert_file=self.cert_file.name,
                                      ca_certs=self.ca_file.name)

        super(K8sAPI, self).__init__(client)
Пример #27
0
    def service_delete(self, context, service_ident, bay_ident):
        LOG.debug("service_delete %s", service_ident)
        bay = conductor_utils.retrieve_bay(context, bay_ident)
        self.k8s_api = k8s.create_k8s_api(context, bay)
        if utils.is_uuid_like(service_ident):
            service = objects.Service.get_by_uuid(context, service_ident,
                                                  bay.uuid, self.k8s_api)
            service_name = service.name
        else:
            service_name = service_ident
        if conductor_utils.object_has_stack(context, bay.uuid):
            try:

                self.k8s_api.delete_namespaced_service(name=str(service_name),
                                                       namespace='default')
            except rest.ApiException as err:
                if err.status == 404:
                    pass
                else:
                    raise exception.KubernetesAPIFailed(err=err)
Пример #28
0
 def pod_delete(self, context, pod_ident, bay_ident):
     LOG.debug("pod_delete %s", pod_ident)
     bay = conductor_utils.retrieve_bay(context, bay_ident)
     self.k8s_api = k8s.create_k8s_api(context, bay)
     if utils.is_uuid_like(pod_ident):
         pod = objects.Pod.get_by_uuid(context, pod_ident, bay.uuid,
                                       self.k8s_api)
         pod_name = pod.name
     else:
         pod_name = pod_ident
     if conductor_utils.object_has_stack(context, bay.uuid):
         try:
             self.k8s_api.delete_namespaced_pod(name=str(pod_name),
                                                body={},
                                                namespace='default')
         except rest.ApiException as err:
             if err.status == 404:
                 pass
             else:
                 raise exception.KubernetesAPIFailed(err=err)
Пример #29
0
    def service_delete(self, context, service_ident, bay_ident):
        LOG.debug("service_delete %s", service_ident)
        bay = conductor_utils.retrieve_bay(context, bay_ident)
        self.k8s_api = k8s.create_k8s_api(context, bay)
        if utils.is_uuid_like(service_ident):
            service = objects.Service.get_by_uuid(context, service_ident,
                                                  bay.uuid, self.k8s_api)
            service_name = service.name
        else:
            service_name = service_ident
        if conductor_utils.object_has_stack(context, bay.uuid):
            try:

                self.k8s_api.delete_namespaced_service(name=str(service_name),
                                                       namespace='default')
            except rest.ApiException as err:
                if err.status == 404:
                    pass
                else:
                    raise exception.KubernetesAPIFailed(err=err)
Пример #30
0
    def service_update(self, context, service_ident, bay_ident, manifest):
        LOG.debug("service_update %s", service_ident)
        bay = conductor_utils.retrieve_bay(context, bay_ident)
        self.k8s_api = k8s.create_k8s_api(context, bay)
        if utils.is_uuid_like(service_ident):
            service = objects.Service.get_by_uuid(context, service_ident,
                                                  bay.uuid, self.k8s_api)
        else:
            service = objects.Service.get_by_name(context, service_ident,
                                                  bay.uuid, self.k8s_api)
        service_ident = service.name
        try:
            resp = self.k8s_api.replace_namespaced_service(
                name=str(service_ident), body=manifest, namespace='default')
        except rest.ApiException as err:
            raise exception.KubernetesAPIFailed(err=err)

        if resp is None:
            raise exception.ServiceNotFound(service=service.uuid)

        service['uuid'] = resp.metadata.uid
        service['name'] = resp.metadata.name
        service['project_id'] = context.project_id
        service['user_id'] = context.user_id
        service['bay_uuid'] = bay.uuid
        service['labels'] = ast.literal_eval(resp.metadata.labels)
        if not resp.spec.selector:
            service['selector'] = {}
        else:
            service['selector'] = ast.literal_eval(resp.spec.selector)
        service['ip'] = resp.spec.cluster_ip
        service_value = []
        for p in resp.spec.ports:
            ports = p.to_dict()
            if not ports['name']:
                ports['name'] = 'k8s-service'
            service_value.append(ports)

        service['ports'] = service_value

        return service
Пример #31
0
    def rc_create(self, context, rc):
        LOG.debug("rc_create")
        bay = conductor_utils.retrieve_bay(context, rc.bay_uuid)
        self.k8s_api = k8s.create_k8s_api(context, bay)
        manifest = k8s_manifest.parse(rc.manifest)
        try:
            resp = self.k8s_api.create_namespaced_replication_controller(
                body=manifest, namespace='default')
        except rest.ApiException as err:
            raise exception.KubernetesAPIFailed(err=err)

        if resp is None:
            raise exception.ReplicationControllerCreationFailed(
                bay_uuid=rc.bay_uuid)

        rc['uuid'] = resp.metadata.uid
        rc['name'] = resp.metadata.name
        rc['images'] = [c.image for c in resp.spec.template.spec.containers]
        rc['labels'] = ast.literal_eval(resp.metadata.labels)
        rc['replicas'] = resp.status.replicas
        return rc
Пример #32
0
    def service_list(self, context, bay_ident):
        bay = conductor_utils.retrieve_bay(context, bay_ident)
        self.k8s_api = k8s.create_k8s_api(context, bay)
        try:
            resp = self.k8s_api.list_namespaced_service(namespace='default')
        except rest.ApiException as err:
            raise exception.KubernetesAPIFailed(err=err)

        if resp is None:
            raise exception.ServiceListNotFound(bay_uuid=bay.uuid)

        services = []
        for service_entry in resp.items:
            service = {}
            service['uuid'] = service_entry.metadata.uid
            service['name'] = service_entry.metadata.name
            service['project_id'] = context.project_id
            service['user_id'] = context.user_id
            service['bay_uuid'] = bay.uuid
            service['labels'] = ast.literal_eval(
                service_entry.metadata.labels)
            if not service_entry.spec.selector:
                service['selector'] = {}
            else:
                service['selector'] = ast.literal_eval(
                    service_entry.spec.selector)
            service['ip'] = service_entry.spec.cluster_ip
            service_value = []
            for p in service_entry.spec.ports:
                ports = p.to_dict()
                if not ports['name']:
                    ports['name'] = 'k8s-service'
                service_value.append(ports)

            service['ports'] = service_value

            service_obj = objects.Service(context, **service)
            services.append(service_obj)

        return services
Пример #33
0
 def rc_delete(self, context, rc_ident, bay_ident):
     LOG.debug("rc_delete %s", rc_ident)
     bay = conductor_utils.retrieve_bay(context, bay_ident)
     self.k8s_api = k8s.create_k8s_api(context, bay)
     if utils.is_uuid_like(rc_ident):
         rc = objects.ReplicationController.get_by_uuid(context, rc_ident,
                                                        bay.uuid,
                                                        self.k8s_api)
         rc_name = rc.name
     else:
         rc_name = rc_ident
     if conductor_utils.object_has_stack(context, bay.uuid):
         try:
             self.k8s_api.delete_namespaced_replication_controller(
                 name=str(rc_name),
                 body={},
                 namespace='default')
         except rest.ApiException as err:
             if err.status == 404:
                 pass
             else:
                 raise exception.KubernetesAPIFailed(err=err)
Пример #34
0
    def rc_create(self, context, rc):
        LOG.debug("rc_create")
        bay = conductor_utils.retrieve_bay(context, rc.bay_uuid)
        self.k8s_api = k8s.create_k8s_api(context, bay)
        manifest = k8s_manifest.parse(rc.manifest)
        try:
            resp = self.k8s_api.create_namespaced_replication_controller(
                body=manifest,
                namespace='default')
        except rest.ApiException as err:
            raise exception.KubernetesAPIFailed(err=err)

        if resp is None:
            raise exception.ReplicationControllerCreationFailed(
                bay_uuid=rc.bay_uuid)

        rc['uuid'] = resp.metadata.uid
        rc['name'] = resp.metadata.name
        rc['images'] = [c.image for c in resp.spec.template.spec.containers]
        rc['labels'] = ast.literal_eval(resp.metadata.labels)
        rc['replicas'] = resp.status.replicas
        return rc
Пример #35
0
    def service_list(self, context, bay_ident):
        bay = conductor_utils.retrieve_bay(context, bay_ident)
        self.k8s_api = k8s.create_k8s_api(context, bay)
        try:
            resp = self.k8s_api.list_namespaced_service(namespace='default')
        except rest.ApiException as err:
            raise exception.KubernetesAPIFailed(err=err)

        if resp is None:
            raise exception.ServiceListNotFound(bay_uuid=bay.uuid)

        services = []
        for service_entry in resp.items:
            service = {}
            service['uuid'] = service_entry.metadata.uid
            service['name'] = service_entry.metadata.name
            service['project_id'] = context.project_id
            service['user_id'] = context.user_id
            service['bay_uuid'] = bay.uuid
            service['labels'] = ast.literal_eval(service_entry.metadata.labels)
            if not service_entry.spec.selector:
                service['selector'] = {}
            else:
                service['selector'] = ast.literal_eval(
                    service_entry.spec.selector)
            service['ip'] = service_entry.spec.cluster_ip
            service_value = []
            for p in service_entry.spec.ports:
                ports = p.to_dict()
                if not ports['name']:
                    ports['name'] = 'k8s-service'
                service_value.append(ports)

            service['ports'] = service_value

            service_obj = objects.Service(context, **service)
            services.append(service_obj)

        return services
Пример #36
0
    def pod_create(self, context, pod):
        LOG.debug("pod_create")
        bay = conductor_utils.retrieve_bay(context, pod.bay_uuid)
        self.k8s_api = k8s.create_k8s_api(context, bay)
        manifest = k8s_manifest.parse(pod.manifest)
        try:
            resp = self.k8s_api.create_namespaced_pod(body=manifest,
                                                      namespace='default')
        except rest.ApiException as err:
            pod.status = 'failed'
            raise exception.KubernetesAPIFailed(err=err)

        if resp is None:
            raise exception.PodCreationFailed(bay_uuid=pod.bay_uuid)

        pod['uuid'] = resp.metadata.uid
        pod['name'] = resp.metadata.name
        pod['images'] = [c.image for c in resp.spec.containers]
        pod['labels'] = ast.literal_eval(resp.metadata.labels)
        pod['status'] = resp.status.phase
        pod['host'] = resp.spec.node_name

        return pod
Пример #37
0
    def pod_create(self, context, pod):
        LOG.debug("pod_create")
        bay = conductor_utils.retrieve_bay(context, pod.bay_uuid)
        self.k8s_api = k8s.create_k8s_api(context, bay)
        manifest = k8s_manifest.parse(pod.manifest)
        try:
            resp = self.k8s_api.create_namespaced_pod(body=manifest,
                                                      namespace='default')
        except rest.ApiException as err:
            pod.status = 'failed'
            raise exception.KubernetesAPIFailed(err=err)

        if resp is None:
            raise exception.PodCreationFailed(bay_uuid=pod.bay_uuid)

        pod['uuid'] = resp.metadata.uid
        pod['name'] = resp.metadata.name
        pod['images'] = [c.image for c in resp.spec.containers]
        pod['labels'] = ast.literal_eval(resp.metadata.labels)
        pod['status'] = resp.status.phase
        pod['host'] = resp.spec.node_name

        return pod
Пример #38
0
 def _test_retrieve_bay(self, expected_bay_uuid, mock_bay_get_by_uuid):
     expected_context = 'context'
     utils.retrieve_bay(expected_context, expected_bay_uuid)
     mock_bay_get_by_uuid.assert_called_once_with(expected_context,
                                                  expected_bay_uuid)
Пример #39
0
 def test_retrieve_bay_uuid(self, mock_get_by_uuid):
     mock_get_by_uuid.return_value = True
     utils.retrieve_bay('context', '5d12f6fd-a196-4bf0-ae4c-1f639a523a52')
     self.assertTrue(mock_get_by_uuid.called)
Пример #40
0
 def test_retrieve_bay_name(self, mock_get_by_name):
     mock_get_by_name.return_value = mock.MagicMock()
     utils.retrieve_bay('context', '1')
     self.assertTrue(mock_get_by_name.called)
Пример #41
0
def docker_for_container(context, container):
    if magnum_utils.is_uuid_like(container):
        container = objects.Container.get_by_uuid(context, container)
    bay = conductor_utils.retrieve_bay(context, container.bay_uuid)
    with docker_for_bay(context, bay) as docker:
        yield docker
Пример #42
0
 def _docker_for_container(cls, context, container):
     bay = conductor_utils.retrieve_bay(context, container)
     return cls._docker_for_bay(bay)
Пример #43
0
 def _docker_for_container(cls, context, container):
     bay = conductor_utils.retrieve_bay(context, container)
     return cls._docker_for_bay(bay)
Пример #44
0
 def test_retrieve_bay_uuid(self, mock_get_by_uuid):
     mock_get_by_uuid.return_value = True
     utils.retrieve_bay('context', '5d12f6fd-a196-4bf0-ae4c-1f639a523a52')
     self.assertTrue(mock_get_by_uuid.called)
Пример #45
0
def docker_for_container(context, container):
    if uuidutils.is_uuid_like(container):
        container = objects.Container.get_by_uuid(context, container)
    bay = conductor_utils.retrieve_bay(context, container.bay_uuid)
    with docker_for_bay(context, bay) as docker:
        yield docker
Пример #46
0
 def _test_retrieve_bay(self, expected_bay_uuid, mock_bay_get_by_uuid):
     expected_context = 'context'
     utils.retrieve_bay(expected_context, expected_bay_uuid)
     mock_bay_get_by_uuid.assert_called_once_with(expected_context,
                                                  expected_bay_uuid)
Пример #47
0
 def test_retrieve_bay_name(self, mock_get_by_name):
     mock_get_by_name.return_value = mock.MagicMock()
     utils.retrieve_bay('context', '1')
     self.assertTrue(mock_get_by_name.called)