]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mgr/orch,cephadm: implement 'device zap'
authorSage Weil <sage@redhat.com>
Tue, 18 Feb 2020 19:06:51 +0000 (13:06 -0600)
committerSage Weil <sage@redhat.com>
Wed, 19 Feb 2020 20:53:47 +0000 (14:53 -0600)
Signed-off-by: Sage Weil <sage@redhat.com>
src/pybind/mgr/cephadm/module.py
src/pybind/mgr/orchestrator/_interface.py
src/pybind/mgr/orchestrator/module.py

index 297641abb31d3dca0a2a3ba4aa3ddd71cf078e3a..599ef8b5e5cc6e7d56b03a5e847cc55bcdd0fa32 100644 (file)
@@ -1621,6 +1621,16 @@ class CephadmOrchestrator(MgrModule, orchestrator.OrchestratorClientMixin):
                                                      inventory.Devices(dls)))
         return trivial_result(result)
 
+    def zap_device(self, host, path):
+        out, err, code = self._run_cephadm(
+            host, 'osd', 'ceph-volume',
+            ['--', 'lvm', 'zap', '--destroy', path],
+            error_ok=True)
+        self.cache.invalidate_host_devices(host)
+        if code:
+            raise OrchestratorError('Zap failed: %s' % '\n'.join(out + err))
+        return trivial_result('\n'.join(out + err))
+
     def blink_device_light(self, ident_fault, on, locs):
         @async_map_completion
         def blink(host, dev, path):
index 761b6115a4ea9a563f6b54276e469be9a17adfc3..2f04de54e0004a6f288a41a2f46b976a94576413 100644 (file)
@@ -988,6 +988,11 @@ class Orchestrator(object):
         """
         raise NotImplementedError()
 
+    def zap_device(self, host, path):
+        # type: (str, str) -> Completion
+        """Zap/Erase a device (DESTROYS DATA)"""
+        raise NotImplementedError()
+
     def add_mon(self, spec):
         # type: (ServiceSpec) -> Completion
         """Create mon daemon(s)"""
index 974332dd046fe60bcb533fef1d8c2ab3a5614680..7e889a638845c35b4a3ef783b23302d12357a428 100644 (file)
@@ -292,6 +292,20 @@ class OrchestratorCli(OrchestratorClientMixin, MgrModule):
             out.append(table.get_string())
             return HandleCommandResult(stdout='\n'.join(out))
 
+    @_cli_write_command(
+        'orch device zap',
+        'name=host,type=CephString '
+        'name=path,type=CephString '
+        'name=force,type=CephBool,req=false',
+        'Zap (erase!) a device so it can be re-used')
+    def _zap_device(self, host, path, force=False):
+        if not force:
+            raise OrchestratorError('must pass --force to PERMANENTLY ERASE DEVICE DATA')
+        completion = self.zap_device(host, path)
+        self._orchestrator_wait([completion])
+        raise_if_exception(completion)
+        return HandleCommandResult(stdout=completion.result_str())
+
     @_cli_read_command(
         'orch ls',
         "name=service_type,type=CephString,req=false "