mirror of
https://github.com/ceph/ceph
synced 2025-03-06 08:20:12 +00:00
Merge PR #33955 into octopus
* refs/pull/33955/head: mgr/cephadm: respect 'unmanaged' flag in spec mgr/orch: orch ls: show <no spec> or <unmanaged> as appropriate mgr/orch: orch ls: rename SPEC -> PLACEMENT mgr/orch: add 'unmanaged' property to ServiceSpec mgr/orch: combine 'orch daemon add <type> ...' into one command mgr/orch: combine 'orch apply <type> [<placement>]' into one command Reviewed-by: Sebastian Wagner <swagner@suse.com>
This commit is contained in:
commit
ae9915f87a
@ -2210,6 +2210,11 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule):
|
||||
on the target label and count specified in the placement.
|
||||
"""
|
||||
daemon_type = spec.service_type
|
||||
service_name = spec.service_name()
|
||||
if spec.unmanaged:
|
||||
self.log.debug('Skipping unmanaged service %s spec' % service_name)
|
||||
return False
|
||||
self.log.debug('Applying service %s spec' % service_name)
|
||||
create_fns = {
|
||||
'mon': self._create_mon,
|
||||
'mgr': self._create_mgr,
|
||||
@ -2233,8 +2238,6 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule):
|
||||
return trivial_result([])
|
||||
config_func = config_fns.get(daemon_type, None)
|
||||
|
||||
service_name = spec.service_name()
|
||||
self.log.debug('Applying service %s spec' % service_name)
|
||||
daemons = self.cache.get_daemons_by_service(service_name)
|
||||
hosts = HostAssignment(
|
||||
spec=spec,
|
||||
|
@ -342,7 +342,7 @@ class OrchestratorCli(OrchestratorClientMixin, MgrModule):
|
||||
now = datetime.datetime.utcnow()
|
||||
table = PrettyTable(
|
||||
['NAME', 'RUNNING', 'REFRESHED', 'AGE',
|
||||
'SPEC',
|
||||
'PLACEMENT',
|
||||
'IMAGE NAME', 'IMAGE ID',
|
||||
],
|
||||
border=False)
|
||||
@ -352,16 +352,22 @@ class OrchestratorCli(OrchestratorClientMixin, MgrModule):
|
||||
table.align['AGE'] = 'l'
|
||||
table.align['IMAGE NAME'] = 'l'
|
||||
table.align['IMAGE ID'] = 'l'
|
||||
table.align['SPEC'] = 'l'
|
||||
table.align['PLACEMENT'] = 'l'
|
||||
table.left_padding_width = 0
|
||||
table.right_padding_width = 2
|
||||
for s in sorted(services, key=lambda s: s.service_name):
|
||||
if not s.spec:
|
||||
pl = '<no spec>'
|
||||
elif s.spec.unmanaged:
|
||||
pl = '<unmanaged>'
|
||||
else:
|
||||
pl = s.spec.placement.pretty_str()
|
||||
table.add_row((
|
||||
s.service_name,
|
||||
'%d/%d' % (s.running, s.size),
|
||||
nice_delta(now, s.last_refresh, ' ago'),
|
||||
nice_delta(now, s.created),
|
||||
s.spec.placement.pretty_str() if s.spec else '-',
|
||||
pl,
|
||||
ukn(s.container_image_name),
|
||||
ukn(s.container_image_id)[0:12],
|
||||
))
|
||||
@ -517,30 +523,33 @@ Usage:
|
||||
return HandleCommandResult(stdout=table.get_string())
|
||||
|
||||
@_cli_write_command(
|
||||
'orch daemon add mon',
|
||||
'orch daemon add',
|
||||
'name=daemon_type,type=CephChoices,strings=mon|mgr|rbd-mirror|crash|alertmanager|grafana|node-exporter|prometheus '
|
||||
'name=placement,type=CephString,req=false',
|
||||
'Start monitor daemon(s)')
|
||||
def _daemon_add_mon(self, placement=None):
|
||||
'Add daemon(s)')
|
||||
def _daemon_add_misc(self, daemon_type, placement=None):
|
||||
placement = PlacementSpec.from_string(placement)
|
||||
placement.validate()
|
||||
|
||||
spec = ServiceSpec('mon', placement=placement)
|
||||
spec = ServiceSpec(daemon_type, placement=placement)
|
||||
|
||||
completion = self.add_mon(spec)
|
||||
self._orchestrator_wait([completion])
|
||||
raise_if_exception(completion)
|
||||
return HandleCommandResult(stdout=completion.result_str())
|
||||
if daemon_type == 'mon':
|
||||
completion = self.add_mon(spec)
|
||||
elif daemon_type == 'mgr':
|
||||
completion = self.add_mgr(spec)
|
||||
elif daemon_type == 'rbd-mirror':
|
||||
completion = self.add_rbd_mirror(spec)
|
||||
elif daemon_type == 'crash':
|
||||
completion = self.add_crash(spec)
|
||||
elif daemon_type == 'alertmanager':
|
||||
completion = self.add_alertmanager(spec)
|
||||
elif daemon_type == 'grafana':
|
||||
completion = self.add_grafana(spec)
|
||||
elif daemon_type == 'node-exporter':
|
||||
completion = self.add_node_exporter(spec)
|
||||
elif daemon_type == 'prometheus':
|
||||
completion = self.add_prometheus(spec)
|
||||
|
||||
@_cli_write_command(
|
||||
'orch daemon add mgr',
|
||||
'name=placement,type=CephString,req=false',
|
||||
'Start rbd-mirror daemon(s)')
|
||||
def _daemon_add_mgr(self, placement=None):
|
||||
spec = ServiceSpec(
|
||||
'mgr',
|
||||
placement=PlacementSpec.from_string(placement),
|
||||
)
|
||||
completion = self.add_mgr(spec)
|
||||
self._orchestrator_wait([completion])
|
||||
raise_if_exception(completion)
|
||||
return HandleCommandResult(stdout=completion.result_str())
|
||||
@ -554,20 +563,6 @@ Usage:
|
||||
raise_if_exception(completion)
|
||||
return HandleCommandResult(stdout=completion.result_str())
|
||||
|
||||
@_cli_write_command(
|
||||
'orch daemon add rbd-mirror',
|
||||
'name=placement,type=CephString,req=false',
|
||||
'Start rbd-mirror daemon(s)')
|
||||
def _rbd_mirror_add(self, placement=None):
|
||||
spec = ServiceSpec(
|
||||
'rbd-mirror',
|
||||
placement=PlacementSpec.from_string(placement),
|
||||
)
|
||||
completion = self.add_rbd_mirror(spec)
|
||||
self._orchestrator_wait([completion])
|
||||
raise_if_exception(completion)
|
||||
return HandleCommandResult(stdout=completion.result_str())
|
||||
|
||||
@_cli_write_command(
|
||||
'orch daemon add mds',
|
||||
'name=fs_name,type=CephString '
|
||||
@ -632,73 +627,6 @@ Usage:
|
||||
raise_if_exception(completion)
|
||||
return HandleCommandResult(stdout=completion.result_str())
|
||||
|
||||
@_cli_write_command(
|
||||
'orch daemon add prometheus',
|
||||
'name=placement,type=CephString,req=false',
|
||||
'Add prometheus daemon(s)')
|
||||
def _daemon_add_prometheus(self, placement=None):
|
||||
spec = ServiceSpec(
|
||||
'prometheus',
|
||||
placement=PlacementSpec.from_string(placement),
|
||||
)
|
||||
completion = self.add_prometheus(spec)
|
||||
self._orchestrator_wait([completion])
|
||||
return HandleCommandResult(stdout=completion.result_str())
|
||||
|
||||
@_cli_write_command(
|
||||
'orch daemon add node-exporter',
|
||||
'name=placement,type=CephString,req=false',
|
||||
'Add node-exporter daemon(s)')
|
||||
def _daemon_add_node_exporter(self, placement=None):
|
||||
spec = ServiceSpec(
|
||||
'node-exporter',
|
||||
placement=PlacementSpec.from_string(placement),
|
||||
)
|
||||
completion = self.add_node_exporter(spec)
|
||||
self._orchestrator_wait([completion])
|
||||
return HandleCommandResult(stdout=completion.result_str())
|
||||
|
||||
@_cli_write_command(
|
||||
'orch daemon add crash',
|
||||
'name=placement,type=CephString,req=false',
|
||||
'Add node-exporter daemon(s)')
|
||||
def _daemon_add_crash(self, placement=None):
|
||||
spec = ServiceSpec(
|
||||
'crash',
|
||||
placement=PlacementSpec.from_string(placement),
|
||||
)
|
||||
completion = self.add_crash(spec)
|
||||
self._orchestrator_wait([completion])
|
||||
return HandleCommandResult(stdout=completion.result_str())
|
||||
|
||||
@_cli_write_command(
|
||||
'orch daemon add grafana',
|
||||
'name=placement,type=CephString,req=false',
|
||||
'Add grafana daemon(s)')
|
||||
def _daemon_add_grafana(self, placement=None):
|
||||
# type: (Optional[str]) -> HandleCommandResult
|
||||
spec = ServiceSpec(
|
||||
'grafana',
|
||||
placement=PlacementSpec.from_string(placement),
|
||||
)
|
||||
completion = self.add_grafana(spec)
|
||||
self._orchestrator_wait([completion])
|
||||
return HandleCommandResult(stdout=completion.result_str())
|
||||
|
||||
@_cli_write_command(
|
||||
'orch daemon add alertmanager',
|
||||
'name=placement,type=CephString,req=false',
|
||||
'Add alertmanager daemon(s)')
|
||||
def _daemon_add_alertmanager(self, placement=None):
|
||||
# type: (Optional[str]) -> HandleCommandResult
|
||||
spec = ServiceSpec(
|
||||
'alertmanager',
|
||||
placement=PlacementSpec.from_string(placement),
|
||||
)
|
||||
completion = self.add_alertmanager(spec)
|
||||
self._orchestrator_wait([completion])
|
||||
return HandleCommandResult(stdout=completion.result_str())
|
||||
|
||||
@_cli_write_command(
|
||||
'orch',
|
||||
"name=action,type=CephChoices,strings=start|stop|restart|redeploy|reconfig "
|
||||
@ -766,31 +694,35 @@ Usage:
|
||||
return HandleCommandResult(stdout=specs)
|
||||
|
||||
@_cli_write_command(
|
||||
'orch apply mgr',
|
||||
'name=placement,type=CephString,req=false',
|
||||
'Update the size or placement of managers')
|
||||
def _apply_mgr(self, placement=None):
|
||||
'orch apply',
|
||||
'name=service_type,type=CephChoices,strings=mon|mgr|rbd-mirror|crash|alertmanager|grafana|node-exporter|prometheus '
|
||||
'name=placement,type=CephString,req=false '
|
||||
'name=unmanaged,type=CephBool,req=false',
|
||||
'Update the size or placement for a service')
|
||||
def _apply_misc(self, service_type, placement=None, unmanaged=False):
|
||||
placement = PlacementSpec.from_string(placement)
|
||||
placement.validate()
|
||||
|
||||
spec = ServiceSpec('mgr', placement=placement)
|
||||
spec = ServiceSpec(service_type, placement=placement,
|
||||
unmanaged=unmanaged)
|
||||
|
||||
completion = self.apply_mgr(spec)
|
||||
self._orchestrator_wait([completion])
|
||||
raise_if_exception(completion)
|
||||
return HandleCommandResult(stdout=completion.result_str())
|
||||
if service_type == 'mgr':
|
||||
completion = self.apply_mgr(spec)
|
||||
elif service_type == 'mon':
|
||||
completion = self.apply_mon(spec)
|
||||
elif service_type == 'rbd-mirror':
|
||||
completion = self.apply_rbd_mirror(spec)
|
||||
elif service_type == 'crash':
|
||||
completion = self.apply_crash(spec)
|
||||
elif service_type == 'alertmanager':
|
||||
completion = self.apply_alertmanager(spec)
|
||||
elif service_type == 'grafana':
|
||||
completion = self.apply_grafana(spec)
|
||||
elif service_type == 'node-exporter':
|
||||
completion = self.apply_node_exporter(spec)
|
||||
elif service_type == 'prometheus':
|
||||
completion = self.apply_prometheus(spec)
|
||||
|
||||
@_cli_write_command(
|
||||
'orch apply mon',
|
||||
'name=placement,type=CephString,req=false',
|
||||
'Update the number of monitor instances')
|
||||
def _apply_mon(self, placement=None):
|
||||
placement = PlacementSpec.from_string(placement)
|
||||
placement.validate()
|
||||
|
||||
spec = ServiceSpec('mon', placement=placement)
|
||||
|
||||
completion = self.apply_mon(spec)
|
||||
self._orchestrator_wait([completion])
|
||||
raise_if_exception(completion)
|
||||
return HandleCommandResult(stdout=completion.result_str())
|
||||
@ -798,44 +730,34 @@ Usage:
|
||||
@_cli_write_command(
|
||||
'orch apply mds',
|
||||
'name=fs_name,type=CephString '
|
||||
'name=placement,type=CephString,req=false',
|
||||
'name=placement,type=CephString,req=false '
|
||||
'name=unmanaged,type=CephBool,req=false',
|
||||
'Update the number of MDS instances for the given fs_name')
|
||||
def _apply_mds(self, fs_name, placement=None):
|
||||
def _apply_mds(self, fs_name, placement=None, unmanaged=False):
|
||||
placement = PlacementSpec.from_string(placement)
|
||||
placement.validate()
|
||||
spec = ServiceSpec(
|
||||
'mds', fs_name,
|
||||
placement=placement)
|
||||
placement=placement,
|
||||
unmanaged=unmanaged)
|
||||
completion = self.apply_mds(spec)
|
||||
self._orchestrator_wait([completion])
|
||||
raise_if_exception(completion)
|
||||
return HandleCommandResult(stdout=completion.result_str())
|
||||
|
||||
@_cli_write_command(
|
||||
'orch apply rbd-mirror',
|
||||
'name=placement,type=CephString,req=false',
|
||||
'Update the number of rbd-mirror instances')
|
||||
def _apply_rbd_mirror(self, placement=None):
|
||||
spec = ServiceSpec(
|
||||
'rbd-mirror',
|
||||
placement=PlacementSpec.from_string(placement),
|
||||
)
|
||||
completion = self.apply_rbd_mirror(spec)
|
||||
self._orchestrator_wait([completion])
|
||||
raise_if_exception(completion)
|
||||
return HandleCommandResult(stdout=completion.result_str())
|
||||
|
||||
@_cli_write_command(
|
||||
'orch apply rgw',
|
||||
'name=realm_name,type=CephString '
|
||||
'name=zone_name,type=CephString '
|
||||
'name=placement,type=CephString,req=false',
|
||||
'name=placement,type=CephString,req=false '
|
||||
'name=unmanaged,type=CephBool,req=false',
|
||||
'Update the number of RGW instances for the given zone')
|
||||
def _apply_rgw(self, zone_name, realm_name, placement=None):
|
||||
def _apply_rgw(self, zone_name, realm_name, placement=None, unmanaged=False):
|
||||
spec = RGWSpec(
|
||||
rgw_realm=realm_name,
|
||||
rgw_zone=zone_name,
|
||||
placement=PlacementSpec.from_string(placement),
|
||||
unmanaged=unmanaged,
|
||||
)
|
||||
completion = self.apply_rgw(spec)
|
||||
self._orchestrator_wait([completion])
|
||||
@ -845,82 +767,19 @@ Usage:
|
||||
@_cli_write_command(
|
||||
'orch apply nfs',
|
||||
"name=svc_id,type=CephString "
|
||||
'name=placement,type=CephString,req=false',
|
||||
'name=placement,type=CephString,req=false '
|
||||
'name=unmanaged,type=CephBool,req=false',
|
||||
'Scale an NFS service')
|
||||
def _apply_nfs(self, svc_id, placement=None):
|
||||
def _apply_nfs(self, svc_id, placement=None, unmanaged=False):
|
||||
spec = NFSServiceSpec(
|
||||
svc_id,
|
||||
placement=PlacementSpec.from_string(placement),
|
||||
unmanaged=unmanaged,
|
||||
)
|
||||
completion = self.apply_nfs(spec)
|
||||
self._orchestrator_wait([completion])
|
||||
return HandleCommandResult(stdout=completion.result_str())
|
||||
|
||||
@_cli_write_command(
|
||||
'orch apply prometheus',
|
||||
'name=placement,type=CephString,req=false',
|
||||
'Scale prometheus service')
|
||||
def _apply_prometheus(self, placement=None):
|
||||
spec = ServiceSpec(
|
||||
'prometheus',
|
||||
placement=PlacementSpec.from_string(placement),
|
||||
)
|
||||
completion = self.apply_prometheus(spec)
|
||||
self._orchestrator_wait([completion])
|
||||
return HandleCommandResult(stdout=completion.result_str())
|
||||
|
||||
@_cli_write_command(
|
||||
'orch apply grafana',
|
||||
'name=placement,type=CephString,req=false',
|
||||
'Scale grafana service')
|
||||
def _apply_grafana(self, placement=None):
|
||||
spec = ServiceSpec(
|
||||
'grafana',
|
||||
placement=PlacementSpec.from_string(placement),
|
||||
)
|
||||
completion = self.apply_grafana(spec)
|
||||
self._orchestrator_wait([completion])
|
||||
return HandleCommandResult(stdout=completion.result_str())
|
||||
|
||||
@_cli_write_command(
|
||||
'orch apply alertmanager',
|
||||
'name=placement,type=CephString,req=false',
|
||||
'Scale alertmanager service')
|
||||
def _apply_alertmanager(self, placement=None):
|
||||
spec = ServiceSpec(
|
||||
'alertmanager',
|
||||
placement=PlacementSpec.from_string(placement),
|
||||
)
|
||||
completion = self.apply_alertmanager(spec)
|
||||
self._orchestrator_wait([completion])
|
||||
return HandleCommandResult(stdout=completion.result_str())
|
||||
|
||||
@_cli_write_command(
|
||||
'orch apply node-exporter',
|
||||
'name=placement,type=CephString,req=false',
|
||||
'Update node_exporter service')
|
||||
def _apply_node_exporter(self, placement=None):
|
||||
spec = ServiceSpec(
|
||||
'node-exporter',
|
||||
placement=PlacementSpec.from_string(placement),
|
||||
)
|
||||
completion = self.apply_node_exporter(spec)
|
||||
self._orchestrator_wait([completion])
|
||||
return HandleCommandResult(stdout=completion.result_str())
|
||||
|
||||
@_cli_write_command(
|
||||
'orch apply crash',
|
||||
'name=placement,type=CephString,req=false',
|
||||
'Update node_exporter service')
|
||||
def _apply_crash(self, placement=None):
|
||||
spec = ServiceSpec(
|
||||
'crash',
|
||||
placement=PlacementSpec.from_string(placement),
|
||||
)
|
||||
completion = self.apply_crash(spec)
|
||||
self._orchestrator_wait([completion])
|
||||
return HandleCommandResult(stdout=completion.result_str())
|
||||
|
||||
@_cli_write_command(
|
||||
'orch set backend',
|
||||
"name=module_name,type=CephString,req=true",
|
||||
|
@ -304,15 +304,18 @@ class ServiceSpec(object):
|
||||
"""
|
||||
|
||||
def __init__(self,
|
||||
service_type, # type: str
|
||||
service_type, # type: str
|
||||
service_id=None, # type: Optional[str]
|
||||
placement: Optional[PlacementSpec] = None,
|
||||
count: Optional[int] = None):
|
||||
placement=None, # type: Optional[PlacementSpec]
|
||||
count=None, # type: Optional[int]
|
||||
unmanaged=False, # type: bool
|
||||
):
|
||||
self.placement = PlacementSpec() if placement is None else placement # type: PlacementSpec
|
||||
|
||||
assert service_type
|
||||
self.service_type = service_type
|
||||
self.service_id = service_id
|
||||
self.unmanaged = unmanaged
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, json_spec):
|
||||
@ -384,9 +387,11 @@ def servicespec_validate_add(self: ServiceSpec):
|
||||
|
||||
class NFSServiceSpec(ServiceSpec):
|
||||
def __init__(self, service_id, pool=None, namespace=None, placement=None,
|
||||
service_type='nfs'):
|
||||
service_type='nfs', unmanaged=False):
|
||||
assert service_type == 'nfs'
|
||||
super(NFSServiceSpec, self).__init__('nfs', service_id=service_id, placement=placement)
|
||||
super(NFSServiceSpec, self).__init__(
|
||||
'nfs', service_id=service_id,
|
||||
placement=placement, unmanaged=unmanaged)
|
||||
|
||||
#: RADOS pool where NFS client recovery data is stored.
|
||||
self.pool = pool
|
||||
@ -413,13 +418,16 @@ class RGWSpec(ServiceSpec):
|
||||
placement=None,
|
||||
service_type='rgw',
|
||||
rgw_frontend_port=None, # type: Optional[int]
|
||||
unmanaged=False, # type: bool
|
||||
):
|
||||
assert service_type == 'rgw'
|
||||
if service_id:
|
||||
(rgw_realm, rgw_zone) = service_id.split('.', 1)
|
||||
else:
|
||||
service_id = '%s.%s' % (rgw_realm, rgw_zone)
|
||||
super(RGWSpec, self).__init__('rgw', service_id=service_id, placement=placement)
|
||||
super(RGWSpec, self).__init__(
|
||||
'rgw', service_id=service_id,
|
||||
placement=placement, unmanaged=unmanaged)
|
||||
|
||||
self.rgw_realm = rgw_realm
|
||||
self.rgw_zone = rgw_zone
|
||||
|
Loading…
Reference in New Issue
Block a user