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)
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"])
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)
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)
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)