示例#1
0
    def update(self, document):
        logging.debug("Updating user %s", document["_id"])

        user = yield Query(self.database, "Users").find_one(
            {"_id": ObjectId(document['_id'])})
        if not user:
            raise ObjectNotFoundError("User %s not found." % document["_id"])

        updated_user = yield Query(self.database, "Users").update(document)
        raise Return(updated_user)
示例#2
0
    def delete(self, document):
        logging.info("Deleting user %s", document["_id"])

        user = yield Query(self.database, "Users").find_one(
            {"_id": ObjectId(document["_id"])})
        if user is not None:
            user["metadata"]["deletionTimestamp"] = datetime.utcnow(
            ).isoformat()
            yield Query(self.database, "Users").update(user)
        else:
            raise ObjectNotFoundError("User %s not found." % document["_id"])
示例#3
0
    def update(self, document):
        logging.debug("Updating namespace %s", document["_id"])

        namespace = yield Query(self.database, "Namespaces").find_one({"_id": document['_id']})
        if not namespace:
            raise ObjectNotFoundError("Namespace %s not found." % document["_id"])

        # TODO: validate members before inserting and do an intersection for race conditions
        namespace["members"] = document["members"]
        updated_namespace = yield Query(self.database, "Namespaces").update(namespace)

        raise Return(updated_namespace)
示例#4
0
    def delete(self, document):
        logging.debug("Deleting instance for request %s", document)

        # Delete all manifests inside Chart
        if document["kind"] == "Chart":
            logging.debug("Deleting Chart entries %s", document["uid"])
            namespace = document["namespace"]

            chart = yield Query(self.database, "Charts",
                                manipulate=True).find_one(
                                    {"_id": ObjectId(document["uid"])})

            if chart is None:
                raise ObjectNotFoundError("Cannot find Chart %s" %
                                          document["uid"])

            response = []
            for manifest in chart["resources"]:
                logging.debug("Deleting Chart manifest %s",
                              manifest["metadata"]["name"])
                kind = manifest["kind"]
                name = manifest["metadata"]["name"]

                if kind == "ReplicationController" or kind == "ReplicaSet" or kind == "Deployment":
                    response = yield self.kube[self.kube.get_resource_type(
                        kind)].patch(name,
                                     dict(spec=dict(replicas=0)),
                                     namespace=namespace)
                    logging.debug("Updated %s %s", kind, response)

                response = yield self.kube[self.kube.get_resource_type(
                    kind)].delete(name, namespace=namespace)
        else:
            logging.debug("Deleting manifest item %s", document["name"])
            kind = document["kind"]
            name = document["name"]
            namespace = document["namespace"]

            if kind == "ReplicationController" or kind == "ReplicaSet" or kind == "Deployment":
                response = yield self.kube[self.kube.get_resource_type(
                    kind)].patch(name,
                                 dict(spec=dict(replicas=0)),
                                 namespace=namespace)
                logging.debug("Updated %s %s", kind, response)

            response = yield self.kube[self.kube.get_resource_type(
                kind)].delete(name, namespace=namespace)
        raise Return(response)
示例#5
0
    def create(self, document):
        logging.debug("Creating instance for request %s", document)

        namespace = document["namespace"]

        chart = yield Query(self.database, "Charts").find_one(
            {"_id": ObjectId(document["uid"])})
        if chart is None:
            raise ObjectNotFoundError("Cannot find Chart %s" % document["uid"])

        result = []
        for resource in chart["resources"]:
            if "labels" in document:
                if "labels" in resource["metadata"]:
                    resource["metadata"]["labels"].update(document["labels"])
                else:
                    resource["metadata"]["labels"] = document["labels"]
            response = yield self.kube[self.kube.get_resource_type(
                resource["kind"])].post(resource, namespace=namespace)
            result.append(response)

        raise Return(result)