]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
orchestrator/rook: add a rm_service backend command
authorJeff Layton <jlayton@redhat.com>
Thu, 15 Nov 2018 18:59:15 +0000 (13:59 -0500)
committerJeff Layton <jlayton@redhat.com>
Sat, 1 Dec 2018 12:19:18 +0000 (07:19 -0500)
Signed-off-by: Jeff Layton <jlayton@redhat.com>
src/pybind/mgr/rook/module.py
src/pybind/mgr/rook/rook_cluster.py

index 90390a50cc6fbf771d1b9f337d4739100f3fd512..d01576d21d14ca952273168c44cc2fdef9681760 100644 (file)
@@ -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):
index ccd2bcb6bb801ef674617967718ab6e0f71fd4f2..48df3428dfffd39a3f1d4032469a30e6fbe0bbdc 100644 (file)
@@ -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))