コード例 #1
0
ファイル: k8s_conductor.py プロジェクト: leader716/magnum
    def rc_delete(self, context, rc_ident, bay_ident):
        LOG.debug("rc_delete %s", rc_ident)
        # Since bay identifier is specified verify whether its a UUID
        # or Name. If name is specified as bay identifier need to extract
        # the bay uuid since its needed to get the k8s_api object.
        if not utils.is_uuid_like(bay_ident):
            bay = objects.Bay.get_by_name(context, bay_ident)
            bay_ident = bay.uuid

        bay_uuid = bay_ident
        self.k8s_api = k8s.create_k8s_api_rc(context, bay_uuid)
        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)
コード例 #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
ファイル: pod.py プロジェクト: sidx64/magnum
    def get_by_name(cls, context, name, bay_uuid, k8s_api):
        """Find a pod based on pod name and the uuid for a bay.

        :param context: Security context
        :param name: the name of a pod.
        :param bay_uuid: the UUID of the Bay
        :param k8s_api: k8s API object

        :returns: a :class:`Pod` object.
        """
        try:
            resp = k8s_api.read_namespaced_pod(name=name, namespace='default')
        except rest.ApiException as err:
            raise exception.KubernetesAPIFailed(err=err)

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

        pod = {}
        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

        pod_obj = Pod(context, **pod)
        return pod_obj
コード例 #4
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
コード例 #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_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
コード例 #7
0
    def get_by_name(cls, context, name, bay_uuid, k8s_api):
        """Return a :class:`ReplicationController` object based on name.

        :param context: Security context
        :param name: the name of a ReplicationController.
        :param bay_uuid: the UUID of the Bay.

        :returns: a :class:`ReplicationController` object.
        """
        try:
            resp = k8s_api.read_namespaced_replication_controller(
                name=name,
                namespace='default')
        except rest.ApiException as err:
            raise exception.KubernetesAPIFailed(err=err)

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

        rc = {}
        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
        # Convert string to dictionary
        rc['labels'] = ast.literal_eval(resp.metadata.labels)
        rc['replicas'] = resp.status.replicas

        rc_obj = ReplicationController(context, **rc)
        return rc_obj
コード例 #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_create(self, context, rc):
     LOG.debug("rc_create")
     self.k8s_api = k8s.create_k8s_api(context, rc)
     manifest = k8s_manifest.parse(rc.manifest)
     try:
         self.k8s_api.create_namespaced_replication_controller(
             body=manifest, namespace='default')
     except rest.ApiException as err:
         raise exception.KubernetesAPIFailed(err=err)
     # call the rc object to persist in db
     rc.create(context)
     return rc
コード例 #10
0
 def service_create(self, context, service):
     LOG.debug("service_create")
     self.k8s_api = k8s.create_k8s_api(context, service)
     manifest = k8s_manifest.parse(service.manifest)
     try:
         self.k8s_api.create_namespaced_service(body=manifest,
                                                namespace='default')
     except rest.ApiException as err:
         raise exception.KubernetesAPIFailed(err=err)
     # call the service object to persist in db
     service.create(context)
     return service
コード例 #11
0
 def service_create(self, context, service):
     LOG.debug("service_create")
     self.k8s_api = k8s.create_k8s_api(context, service)
     manifest = k8s_manifest.parse(service.manifest)
     try:
         self.k8s_api.createService(body=manifest, namespaces='default')
     except error.HTTPError as err:
         message = ast.literal_eval(err.read())['message']
         raise exception.KubernetesAPIFailed(code=err.code, message=message)
     # call the service object to persist in db
     service.create(context)
     return service
コード例 #12
0
 def rc_create(self, context, rc):
     LOG.debug("rc_create")
     self.k8s_api = k8s.create_k8s_api(context, rc)
     manifest = k8s_manifest.parse(rc.manifest)
     try:
         self.k8s_api.createReplicationController(body=manifest,
                                                  namespaces='default')
     except error.HTTPError as err:
         message = ast.literal_eval(err.read())['message']
         raise exception.KubernetesAPIFailed(code=err.code, message=message)
     # call the rc object to persist in db
     rc.create(context)
     return rc
コード例 #13
0
 def pod_update(self, context, pod):
     LOG.debug("pod_update %s", pod.uuid)
     self.k8s_api = k8s.create_k8s_api(context, pod)
     manifest = k8s_manifest.parse(pod.manifest)
     try:
         self.k8s_api.replace_namespaced_pod(name=str(pod.name),
                                             body=manifest,
                                             namespace='default')
     except rest.ApiException as err:
         raise exception.KubernetesAPIFailed(err=err)
     # call the pod object to persist in db
     pod.refresh(context)
     pod.save()
     return pod
コード例 #14
0
 def service_update(self, context, service):
     LOG.debug("service_update %s", service.uuid)
     self.k8s_api = k8s.create_k8s_api(context, service)
     manifest = k8s_manifest.parse(service.manifest)
     try:
         self.k8s_api.replace_namespaced_service(name=str(service.name),
                                                 body=manifest,
                                                 namespace='default')
     except rest.ApiException as err:
         raise exception.KubernetesAPIFailed(err=err)
     # call the service object to persist in db
     service.refresh(context)
     service.save()
     return service
コード例 #15
0
 def rc_delete(self, context, uuid):
     LOG.debug("rc_delete %s", uuid)
     rc = objects.ReplicationController.get_by_uuid(context, uuid)
     self.k8s_api = k8s.create_k8s_api(context, rc)
     if conductor_utils.object_has_stack(context, rc):
         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)
     # call the rc object to persist in db
     rc.destroy(context)
コード例 #16
0
 def service_delete(self, context, uuid):
     LOG.debug("service_delete %s", uuid)
     service = objects.Service.get_by_uuid(context, uuid)
     self.k8s_api = k8s.create_k8s_api(context, service)
     if conductor_utils.object_has_stack(context, service):
         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)
     # call the service object to persist in db
     service.destroy(context)
コード例 #17
0
 def pod_update(self, context, pod):
     LOG.debug("pod_update %s", pod.uuid)
     self.k8s_api = k8s.create_k8s_api(context, pod)
     manifest = k8s_manifest.parse(pod.manifest)
     try:
         self.k8s_api.replacePod(name=pod.name,
                                 body=manifest,
                                 namespaces='default')
     except error.HTTPError as err:
         message = ast.literal_eval(err.read())['message']
         raise exception.KubernetesAPIFailed(code=err.code, message=message)
     # call the pod object to persist in db
     pod.refresh(context)
     pod.save()
     return pod
コード例 #18
0
ファイル: k8s_conductor.py プロジェクト: leader716/magnum
 def pod_delete(self, context, uuid):
     LOG.debug("pod_delete %s", uuid)
     pod = objects.Pod.get_by_uuid(context, uuid)
     self.k8s_api = k8s.create_k8s_api(context, pod)
     if conductor_utils.object_has_stack(context, pod):
         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)
     # call the pod object to persist in db
     pod.destroy(context)
コード例 #19
0
 def pod_delete(self, context, uuid):
     LOG.debug("pod_delete %s", uuid)
     pod = objects.Pod.get_by_uuid(context, uuid)
     self.k8s_api = k8s.create_k8s_api(context, pod)
     if conductor_utils.object_has_stack(context, pod):
         try:
             self.k8s_api.deletePod(name=pod.name, namespaces='default')
         except error.HTTPError as err:
             if err.code == 404:
                 pass
             else:
                 message = ast.literal_eval(err.read())['message']
                 raise exception.KubernetesAPIFailed(code=err.code,
                                                     message=message)
     # call the pod object to persist in db
     pod.destroy(context)
コード例 #20
0
    def get_by_uuid(cls, context, uuid, bay_uuid, k8s_api):
        """Find a service based on service uuid and UUID of the Bay

        :param context: Security context
        :param uuid: the uuid of a service.
        :param bay_uuid: the UUID of the Bay
        :param k8s_api: k8s API object

        :returns: a :class:`Service` object.
        """
        try:
            resp = 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)

        service = {}
        for service_entry in resp.items:
            if service_entry.metadata.uid == uuid:
                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 = Service(context, **service)
                return service_obj
        raise exception.ServiceNotFound(service=uuid)
コード例 #21
0
 def rc_delete(self, context, uuid):
     LOG.debug("rc_delete %s", uuid)
     rc = objects.ReplicationController.get_by_uuid(context, uuid)
     self.k8s_api = k8s.create_k8s_api(context, rc)
     if conductor_utils.object_has_stack(context, rc):
         try:
             self.k8s_api.deleteReplicationController(name=rc.name,
                                                      namespaces='default')
         except error.HTTPError as err:
             if err.code == 404:
                 pass
             else:
                 message = ast.literal_eval(err.read())['message']
                 raise exception.KubernetesAPIFailed(code=err.code,
                                                     message=message)
     # call the rc object to persist in db
     rc.destroy(context)
コード例 #22
0
ファイル: k8s_conductor.py プロジェクト: sidx64/magnum
    def service_update(self, context, service_ident, bay_ident, manifest):
        LOG.debug("service_update %s", service_ident)
        # Since bay identifier is specified verify whether its a UUID
        # or Name. If name is specified as bay identifier need to extract
        # the bay uuid since its needed to get the k8s_api object.
        bay_uuid = conductor_utils.retrieve_bay_uuid(context, bay_ident)
        self.k8s_api = k8s.create_k8s_api(context, bay_uuid)
        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
ファイル: k8s_conductor.py プロジェクト: sidx64/magnum
    def service_list(self, context, bay_ident):
        # Since bay identifier is specified verify whether its a UUID
        # or Name. If name is specified as bay identifier need to extract
        # the bay uuid since its needed to get the k8s_api object.
        bay_uuid = conductor_utils.retrieve_bay_uuid(context, bay_ident)
        self.k8s_api = k8s.create_k8s_api(context, bay_uuid)
        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
コード例 #25
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)
コード例 #26
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)
コード例 #27
0
ファイル: k8s_conductor.py プロジェクト: sidx64/magnum
    def rc_create(self, context, rc):
        LOG.debug("rc_create")
        self.k8s_api = k8s.create_k8s_api(context, rc.bay_uuid)
        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
コード例 #28
0
 def pod_create(self, context, pod):
     LOG.debug("pod_create")
     self.k8s_api = k8s.create_k8s_api(context, pod)
     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'
         if err.status != 409:
             pod.create(context)
         raise exception.KubernetesAPIFailed(err=err)
     pod.status = resp.status.phase
     pod.host = resp.spec.node_name
     # call the pod object to persist in db
     # TODO(yuanying): parse pod file and,
     # - extract pod name and set it
     # - extract pod labels and set it
     # When do we get pod labels and name?
     pod.create(context)
     return pod
コード例 #29
0
 def pod_create(self, context, pod):
     LOG.debug("pod_create")
     self.k8s_api = k8s.create_k8s_api(context, pod)
     manifest = k8s_manifest.parse(pod.manifest)
     try:
         resp = self.k8s_api.createPod(body=manifest, namespaces='default')
     except error.HTTPError as err:
         pod.status = 'failed'
         if err.code != 409:
             pod.create(context)
         message = ast.literal_eval(err.read())['message']
         raise exception.KubernetesAPIFailed(code=err.code, message=message)
     pod.status = resp.status.phase
     pod.host = resp.spec.host
     # call the pod object to persist in db
     # TODO(yuanying): parse pod file and,
     # - extract pod name and set it
     # - extract pod labels and set it
     # When do we get pod labels and name?
     pod.create(context)
     return pod
コード例 #30
0
ファイル: k8s_conductor.py プロジェクト: leader716/magnum
    def rc_update(self, context, rc_ident, bay_ident, manifest):
        LOG.debug("rc_update %s", rc_ident)
        # Since bay identifier is specified verify whether its a UUID
        # or Name. If name is specified as bay identifier need to extract
        # the bay uuid since its needed to get the k8s_api object.
        if not utils.is_uuid_like(bay_ident):
            bay = objects.Bay.get_by_name(context, bay_ident)
            bay_ident = bay.uuid

        bay_uuid = bay_ident
        self.k8s_api = k8s.create_k8s_api_rc(context, bay_uuid)
        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