From: Jeff Layton Date: Thu, 15 Nov 2018 18:59:15 +0000 (-0500) Subject: orchestrator/rook: add a rm_service backend command X-Git-Tag: v14.1.0~739^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=1e8452fd65af7aacef730909d2f395d59768bb87;p=ceph.git orchestrator/rook: add a rm_service backend command Signed-off-by: Jeff Layton --- diff --git a/src/pybind/mgr/rook/module.py b/src/pybind/mgr/rook/module.py index 90390a50cc6f..d01576d21d14 100644 --- a/src/pybind/mgr/rook/module.py +++ b/src/pybind/mgr/rook/module.py @@ -376,6 +376,11 @@ class RookOrchestrator(MgrModule, orchestrator.Orchestrator): # TODO: RGW, NFS raise NotImplementedError(service_type) + def remove_stateless_service(self, service_type, service_id): + return RookWriteCompletion( + lambda: self.rook_cluster.rm_service(service_type, service_id), None, + "Removing {0} services for {1}".format(service_type, service_id)) + def create_osds(self, spec): # Validate spec.node if not self.rook_cluster.node_exists(spec.node): diff --git a/src/pybind/mgr/rook/rook_cluster.py b/src/pybind/mgr/rook/rook_cluster.py index ccd2bcb6bb80..48df3428dfff 100644 --- a/src/pybind/mgr/rook/rook_cluster.py +++ b/src/pybind/mgr/rook/rook_cluster.py @@ -92,6 +92,9 @@ class RookCluster(object): def rook_api_get(self, path, **kwargs): return self.rook_api_call("GET", path, **kwargs) + def rook_api_delete(self, path): + return self.rook_api_call("DELETE", path) + def rook_api_patch(self, path, **kwargs): return self.rook_api_call("PATCH", path, header_params={"Content-Type": "application/json-patch+json"}, @@ -266,6 +269,25 @@ class RookCluster(object): else: raise + def rm_service(self, service_type, service_id): + assert service_type in ("mds", "rgw") + + if service_type == "mds": + rooktype = "filesystems" + elif service_type == "rgw": + rooktype = "objectstores" + + objpath = "{0}/{1}".format(rooktype, service_id) + + try: + self.rook_api_delete(objpath) + except ApiException as e: + if e.status == 404: + log.info("{0} service '{1}' does not exist".format(service_type, service_id)) + # Idempotent, succeed. + else: + raise + def can_create_osd(self): current_cluster = self.rook_api_get( "clusters/{0}".format(self.cluster_name))