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):
"""
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)"""
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 "