from ceph.deployment.hostspec import SpecValidationError
from ceph.utils import datetime_now
-from mgr_util import to_pretty_timedelta, format_dimless
+from mgr_util import to_pretty_timedelta, format_dimless, format_bytes
from mgr_module import MgrModule, HandleCommandResult, Option
from ._interface import OrchestratorClientMixin, DeviceLightLoc, _cli_read_command, \
return '-'
+def nice_bytes(v: Optional[int]) -> str:
+ if not v:
+ return '-'
+ return format_bytes(v, 5)
+
+
class Format(enum.Enum):
plain = 'plain'
json = 'json'
return cast(str, self.get_module_option("orchestrator"))
@_cli_write_command('orch host add')
- def _add_host(self, hostname: str, addr: Optional[str] = None, labels: Optional[List[str]] = None, maintenance: Optional[bool] = False) -> HandleCommandResult:
+ def _add_host(self,
+ hostname: str,
+ addr: Optional[str] = None,
+ labels: Optional[List[str]] = None,
+ maintenance: Optional[bool] = False) -> HandleCommandResult:
"""Add a host"""
_status = 'maintenance' if maintenance else ''
table = PrettyTable(
['NAME', 'HOST', 'PORTS',
'STATUS', 'REFRESHED', 'AGE',
+ 'MEM USE', 'MEM LIM',
'VERSION', 'IMAGE ID', 'CONTAINER ID'],
border=False)
table.align = 'l'
+ table._align['REFRESHED'] = 'r'
+ table._align['AGE'] = 'r'
+ table._align['MEM USE'] = 'r'
+ table._align['MEM LIM'] = 'r'
table.left_padding_width = 0
table.right_padding_width = 2
for s in sorted(daemons, key=lambda s: s.name()):
status,
nice_delta(now, s.last_refresh, ' ago'),
nice_delta(now, s.created),
+ nice_bytes(s.memory_usage),
+ nice_bytes(s.memory_request),
ukn(s.version),
ukn(s.container_image_id)[0:12],
ukn(s.container_id)))
@_cli_write_command('orch osd rm')
def _osd_rm_start(self,
- svc_id: List[str],
+ osd_id: List[str],
replace: bool = False,
force: bool = False) -> HandleCommandResult:
- """Remove OSD services"""
- completion = self.remove_osds(svc_id, replace=replace, force=force)
+ """Remove OSD daemons"""
+ completion = self.remove_osds(osd_id, replace=replace, force=force)
raise_if_exception(completion)
return HandleCommandResult(stdout=completion.result_str())
@_cli_write_command('orch osd rm stop')
- def _osd_rm_stop(self, svc_id: List[str]) -> HandleCommandResult:
- """Remove OSD services"""
- completion = self.stop_remove_osds(svc_id)
+ def _osd_rm_stop(self, osd_id: List[str]) -> HandleCommandResult:
+ """Cancel ongoing OSD removal operation"""
+ completion = self.stop_remove_osds(osd_id)
raise_if_exception(completion)
return HandleCommandResult(stdout=completion.result_str())
@_cli_write_command('orch osd rm status')
def _osd_rm_status(self, format: Format = Format.plain) -> HandleCommandResult:
- """status of OSD removal operation"""
+ """Status of OSD removal operation"""
completion = self.remove_osds_status()
raise_if_exception(completion)
report = completion.result
@_cli_write_command('orch apply nfs')
def _apply_nfs(self,
svc_id: str,
- pool: str,
- namespace: Optional[str] = None,
placement: Optional[str] = None,
format: Format = Format.plain,
+ pool: Optional[str] = None,
+ namespace: Optional[str] = None,
+ port: Optional[int] = None,
dry_run: bool = False,
unmanaged: bool = False,
no_overwrite: bool = False,
service_id=svc_id,
pool=pool,
namespace=namespace,
+ port=port,
placement=PlacementSpec.from_string(placement),
unmanaged=unmanaged,
preview_only=dry_run
@_cli_write_command('orch cancel')
def _cancel(self) -> HandleCommandResult:
"""
- cancels ongoing operations
-
- ProgressReferences might get stuck. Let's unstuck them.
+ Cancel ongoing background operations
"""
self.cancel_completions()
return HandleCommandResult()