From: Nizamudeen A Date: Wed, 23 Oct 2024 15:30:12 +0000 (+0530) Subject: mgr/dashboard: rm nvmeof conf based on its daemon name X-Git-Tag: v20.0.0~723^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=4080115739da4f7ba73a8c0b215aa6b43a34ab71;p=ceph.git mgr/dashboard: rm nvmeof conf based on its daemon name 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 --- diff --git a/src/pybind/mgr/cephadm/services/nvmeof.py b/src/pybind/mgr/cephadm/services/nvmeof.py index 162815da24c73..044bb84c7625d 100644 --- a/src/pybind/mgr/cephadm/services/nvmeof.py +++ b/src/pybind/mgr/cephadm/services/nvmeof.py @@ -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 diff --git a/src/pybind/mgr/dashboard/services/nvmeof_cli.py b/src/pybind/mgr/dashboard/services/nvmeof_cli.py index 11a95237053db..bd9de3504482e 100644 --- a/src/pybind/mgr/dashboard/services/nvmeof_cli.py +++ b/src/pybind/mgr/dashboard/services/nvmeof_cli.py @@ -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) diff --git a/src/pybind/mgr/dashboard/services/nvmeof_conf.py b/src/pybind/mgr/dashboard/services/nvmeof_conf.py index 2426c59907874..170f98c70d18f 100644 --- a/src/pybind/mgr/dashboard/services/nvmeof_conf.py +++ b/src/pybind/mgr/dashboard/services/nvmeof_conf.py @@ -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