From: Jeff Layton Date: Thu, 20 Dec 2018 11:56:01 +0000 (-0500) Subject: mgr/orchestrator_cli: convert service add/rm commands to be type-specific X-Git-Tag: v14.1.0~399^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d07effa132041dc853cc4a968009f6458aca32fa;p=ceph.git mgr/orchestrator_cli: convert service add/rm commands to be type-specific When adding services, we often need different sets of arguments depending on the service type. Convert the "service add" and "service rm" commands into separate commands for each service type. Signed-off-by: Jeff Layton --- diff --git a/doc/mgr/orchestrator_cli.rst b/doc/mgr/orchestrator_cli.rst index e91f25226cd..a1c514fc72a 100644 --- a/doc/mgr/orchestrator_cli.rst +++ b/doc/mgr/orchestrator_cli.rst @@ -209,10 +209,10 @@ Sizing: the ``size`` parameter gives the number of daemons in the cluster Creating/growing/shrinking services:: - ceph orchestrator service update   [host…] - ceph orchestrator service add + ceph orchestrator {mds,rgw} update [host…] + ceph orchestrator {mds,rgw} add -e.g., ``ceph orchestrator service update mds myfs 3 host1 host2 host3`` +e.g., ``ceph orchestrator mds update myfs 3 host1 host2 host3`` Start/stop/reload:: @@ -223,5 +223,5 @@ Start/stop/reload:: Removing services:: - ceph orchestrator service rm + ceph orchestrator {mds,rgw} rm diff --git a/src/pybind/mgr/orchestrator_cli/module.py b/src/pybind/mgr/orchestrator_cli/module.py index 43ed0c5cd80..1d5bf33a5e2 100644 --- a/src/pybind/mgr/orchestrator_cli/module.py +++ b/src/pybind/mgr/orchestrator_cli/module.py @@ -40,17 +40,39 @@ class OrchestratorCli(orchestrator.OrchestratorClientMixin, MgrModule): "perm": "r" }, { - 'cmd': "orchestrator service add " - "name=svc_type,type=CephString " + 'cmd': "orchestrator osd add " "name=svc_arg,type=CephString ", - "desc": "Create a service of any type", + "desc": "Create an OSD service", "perm": "rw" }, { - 'cmd': "orchestrator service rm " - "name=svc_type,type=CephString " + 'cmd': "orchestrator osd rm " + "name=svc_id,type=CephString ", + "desc": "Remove an OSD service", + "perm": "rw" + }, + { + 'cmd': "orchestrator mds add " + "name=svc_arg,type=CephString ", + "desc": "Create an MDS service", + "perm": "rw" + }, + { + 'cmd': "orchestrator mds rm " "name=svc_id,type=CephString ", - "desc": "Remove a service", + "desc": "Remove an MDS service", + "perm": "rw" + }, + { + 'cmd': "orchestrator rgw add " + "name=svc_arg,type=CephString ", + "desc": "Create an RGW service", + "perm": "rw" + }, + { + 'cmd': "orchestrator rgw rm " + "name=svc_id,type=CephString ", + "desc": "Remove an RGW service", "perm": "rw" }, { @@ -157,57 +179,53 @@ class OrchestratorCli(orchestrator.OrchestratorClientMixin, MgrModule): return HandleCommandResult(stdout="\n".join(lines)) - def _service_add(self, cmd): - svc_type = cmd['svc_type'] - if svc_type == "osd": - device_spec = cmd['svc_arg'] - try: - node_name, block_device = device_spec.split(":") - except TypeError: - return HandleCommandResult(-errno.EINVAL, - stderr="Invalid device spec, should be :") - - spec = orchestrator.OsdCreationSpec() - spec.node = node_name - spec.format = "bluestore" - spec.drive_group = orchestrator.DriveGroupSpec([block_device]) - - completion = self.create_osds(spec) - self._orchestrator_wait([completion]) - - return HandleCommandResult() - - elif svc_type == "mds": - fs_name = cmd['svc_arg'] - - spec = orchestrator.StatelessServiceSpec() - spec.name = fs_name + def _osd_add(self, cmd): + device_spec = cmd['svc_arg'] + try: + node_name, block_device = device_spec.split(":") + except TypeError: + return HandleCommandResult(-errno.EINVAL, + stderr="Invalid device spec, should be :") - completion = self.add_stateless_service(svc_type, spec) - self._orchestrator_wait([completion]) + spec = orchestrator.OsdCreationSpec() + spec.node = node_name + spec.format = "bluestore" + spec.drive_group = orchestrator.DriveGroupSpec([block_device]) - return HandleCommandResult() - elif svc_type == "rgw": - store_name = cmd['svc_arg'] + completion = self.create_osds(spec) + self._orchestrator_wait([completion]) - spec = orchestrator.StatelessServiceSpec() - spec.name = store_name + return HandleCommandResult() - completion = self.add_stateless_service(svc_type, spec) - self._orchestrator_wait([completion]) + def _add_stateless_svc(self, svc_type, spec): + completion = self.add_stateless_service(svc_type, spec) + self._orchestrator_wait([completion]) + return HandleCommandResult() - return HandleCommandResult() - else: - raise NotImplementedError(svc_type) + def _mds_add(self, cmd): + spec = orchestrator.StatelessServiceSpec() + spec.name = cmd['svc_arg'] + return self._add_stateless_svc("mds", spec) - def _service_rm(self, cmd): - svc_type = cmd['svc_type'] - svc_id = cmd['svc_id'] + def _rgw_add(self, cmd): + spec = orchestrator.StatelessServiceSpec() + spec.name = cmd['svc_arg'] + return self._add_stateless_svc("rgw", spec) + def _rm_stateless_svc(self, svc_type, svc_id): completion = self.remove_stateless_service(svc_type, svc_id) self._orchestrator_wait([completion]) return HandleCommandResult() + def _osd_rm(self, cmd): + return self._rm_stateless_svc("osd", cmd['svc_id']) + + def _mds_rm(self, cmd): + return self._rm_stateless_svc("mds", cmd['svc_id']) + + def _rgw_rm(self, cmd): + return self._rm_stateless_svc("rgw", cmd['svc_id']) + def _set_backend(self, cmd): """ We implement a setter command instead of just having the user @@ -289,10 +307,18 @@ class OrchestratorCli(orchestrator.OrchestratorClientMixin, MgrModule): return self._list_services(cmd) elif cmd['prefix'] == "orchestrator service status": return self._list_services(cmd) # TODO: create more detailed output - elif cmd['prefix'] == "orchestrator service add": - return self._service_add(cmd) - elif cmd['prefix'] == "orchestrator service rm": - return self._service_rm(cmd) + elif cmd['prefix'] == "orchestrator osd add": + return self._osd_add(cmd) + elif cmd['prefix'] == "orchestrator osd rm": + return self._osd_rm(cmd) + elif cmd['prefix'] == "orchestrator mds add": + return self._mds_add(cmd) + elif cmd['prefix'] == "orchestrator mds rm": + return self._mds_rm(cmd) + elif cmd['prefix'] == "orchestrator rgw add": + return self._rgw_add(cmd) + elif cmd['prefix'] == "orchestrator rgw rm": + return self._rgw_rm(cmd) elif cmd['prefix'] == "orchestrator set backend": return self._set_backend(cmd) elif cmd['prefix'] == "orchestrator status":