]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/dashboard: rm nvmeof conf based on its daemon name 60451/head
authorNizamudeen A <nia@redhat.com>
Wed, 23 Oct 2024 15:30:12 +0000 (21:00 +0530)
committerNizamudeen A <nia@redhat.com>
Thu, 24 Oct 2024 10:00:02 +0000 (15:30 +0530)
don't remove an entire entry of a service from the config if only the daemon is
removed, instead just remove the entry of that particular daemon. and
once all the entry are succesfully removed, remove the entry for service

https://tracker.ceph.com/issues/68697
Signed-off-by: Nizamudeen A <nia@redhat.com>
src/pybind/mgr/cephadm/services/nvmeof.py
src/pybind/mgr/dashboard/services/nvmeof_cli.py
src/pybind/mgr/dashboard/services/nvmeof_conf.py

index 162815da24c73c090f39e77e2b3fa5a778d2aaea..044bb84c7625db4db4ec7c2966340648d6104172 100644 (file)
@@ -185,19 +185,21 @@ class NvmeofService(CephService):
         # to clean the keyring up
         super().post_remove(daemon, is_failed_deploy=is_failed_deploy)
         service_name = daemon.service_name()
+        daemon_name = daemon.name()
 
         # remove config for dashboard nvmeof gateways if any
-        ret, out, err = self.mgr.mon_command({
+        ret, _, err = self.mgr.mon_command({
             'prefix': 'dashboard nvmeof-gateway-rm',
             'name': service_name,
+            'daemon_name': daemon_name
         })
         if not ret:
-            logger.info(f'{daemon.hostname} removed from nvmeof gateways dashboard config')
+            logger.info(f'{daemon_name} removed from nvmeof gateways dashboard config')
 
         spec = cast(NvmeofServiceSpec,
                     self.mgr.spec_store.all_specs.get(daemon.service_name(), None))
         if not spec:
-            self.mgr.log.error(f'Failed to find spec for {daemon.name()}')
+            self.mgr.log.error(f'Failed to find spec for {daemon_name}')
             return
         pool = spec.pool
         group = spec.group
index 11a95237053dbf0214fea94605a8855d0bdfd361..bd9de3504482e1dfc9f13d57087bca84c74352a2 100644 (file)
@@ -36,12 +36,12 @@ def add_nvmeof_gateway(_, inbuf, name: str, group: str, daemon_name: str):
 
 
 @CLIWriteCommand('dashboard nvmeof-gateway-rm')
-def remove_nvmeof_gateway(_, name: str):
+def remove_nvmeof_gateway(_, name: str, daemon_name: str = ''):
     '''
     Remove NVMe-oF gateway configuration
     '''
     try:
-        NvmeofGatewaysConfig.remove_gateway(name)
+        NvmeofGatewaysConfig.remove_gateway(name, daemon_name)
         return 0, 'Success', ''
     except ManagedByOrchestratorException as ex:
         return -errno.EINVAL, '', str(ex)
index 2426c5990787435f0e78d091afcfba82c3286cb4..170f98c70d18f2e69c888b40f32cb1be098381f2 100644 (file)
@@ -77,11 +77,22 @@ class NvmeofGatewaysConfig(object):
         cls._save_config(config)
 
     @classmethod
-    def remove_gateway(cls, name):
+    def remove_gateway(cls, name, daemon_name=None):
         config = cls.get_gateways_config()
         if name not in config['gateways']:
             raise NvmeofGatewayDoesNotExist(name)
-        del config['gateways'][name]
+
+        if not daemon_name:
+            del config['gateways'][name]
+        else:
+            # remove the daemon from the list of gateways
+            config['gateways'][name] = [daemon for daemon in config['gateways'][name]
+                                        if daemon['daemon_name'] != daemon_name]
+
+            # if there are no more daemons in the list, remove the gateway
+            if not config['gateways'][name]:
+                del config['gateways'][name]
+
         cls._save_config(config)
 
     @classmethod