From d07effa132041dc853cc4a968009f6458aca32fa Mon Sep 17 00:00:00 2001 From: Jeff Layton Date: Thu, 20 Dec 2018 06:56:01 -0500 Subject: [PATCH] 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 --- doc/mgr/orchestrator_cli.rst | 8 +- src/pybind/mgr/orchestrator_cli/module.py | 126 +++++++++++++--------- 2 files changed, 80 insertions(+), 54 deletions(-) diff --git a/doc/mgr/orchestrator_cli.rst b/doc/mgr/orchestrator_cli.rst index e91f25226cd8..a1c514fc72ad 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 43ed0c5cd80e..1d5bf33a5e27 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": -- 2.47.3