From 15bdaa74b51b70afc089567dbda68fee64e89109 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 29 Apr 2021 10:43:57 -0400 Subject: [PATCH] mgr/cephadm: nfs: add purge Remove the grace object if we purge the service. Signed-off-by: Sage Weil --- src/pybind/mgr/cephadm/services/nfs.py | 22 ++++++++++++++++++++ src/pybind/mgr/cephadm/tests/test_cephadm.py | 2 ++ 2 files changed, 24 insertions(+) diff --git a/src/pybind/mgr/cephadm/services/nfs.py b/src/pybind/mgr/cephadm/services/nfs.py index 72be22bafde..09888912020 100644 --- a/src/pybind/mgr/cephadm/services/nfs.py +++ b/src/pybind/mgr/cephadm/services/nfs.py @@ -270,3 +270,25 @@ class NFSService(CephService): # Provide warning warn_message = "WARNING: Removing NFS daemons can cause clients to lose connectivity. " return HandleCommandResult(-errno.EBUSY, '', warn_message) + + def purge(self, service_name: str) -> None: + if service_name not in self.mgr.spec_store: + return + spec = cast(NFSServiceSpec, self.mgr.spec_store[service_name].spec) + + logger.info(f'Removing grace file for {service_name}') + cmd = [ + 'rados', + '-n', f"mgr.{self.mgr.get_mgr_id()}", + '-k', str(self.mgr.get_ceph_option('keyring')), + '-p', cast(str, spec.pool), + ] + if spec.namespace: + cmd += ['--namespace', spec.namespace] + cmd += ['rm', 'grace'] + subprocess.run( + cmd, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + timeout=10 + ) diff --git a/src/pybind/mgr/cephadm/tests/test_cephadm.py b/src/pybind/mgr/cephadm/tests/test_cephadm.py index 18912fa4cc3..2517e288493 100644 --- a/src/pybind/mgr/cephadm/tests/test_cephadm.py +++ b/src/pybind/mgr/cephadm/tests/test_cephadm.py @@ -918,6 +918,8 @@ class TestCephadm(object): @mock.patch("cephadm.serve.CephadmServe._run_cephadm", _run_cephadm('{}')) @mock.patch("cephadm.services.nfs.NFSService.run_grace_tool", mock.MagicMock()) @mock.patch("cephadm.services.nfs.NFSService.create_rados_config_obj", mock.MagicMock()) + @mock.patch("cephadm.services.nfs.NFSService.purge", mock.MagicMock()) + @mock.patch("subprocess.run", mock.MagicMock()) def test_apply_save(self, spec: ServiceSpec, meth, cephadm_module: CephadmOrchestrator): with with_host(cephadm_module, 'test'): with with_service(cephadm_module, spec, meth, 'test'):