From: Adam King Date: Wed, 24 Mar 2021 18:29:28 +0000 (-0400) Subject: mgr/cephadm: no-overwite flag for apply command X-Git-Tag: v17.1.0~2452^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=248173efcdebf67d4dae3bf8b4d26122d6eca911;p=ceph.git mgr/cephadm: no-overwite flag for apply command no-overwrite flag makes it so cephadm will only apply the spec if the spec does not already exist. Signed-off-by: Adam King --- diff --git a/src/pybind/mgr/cephadm/module.py b/src/pybind/mgr/cephadm/module.py index 072db303bdf1..2e222dc53a6a 100644 --- a/src/pybind/mgr/cephadm/module.py +++ b/src/pybind/mgr/cephadm/module.py @@ -2156,9 +2156,18 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule, return "Scheduled %s update..." % spec.service_name() @handle_orch_error - def apply(self, specs: Sequence[GenericSpec]) -> List[str]: + def apply(self, specs: Sequence[GenericSpec], no_overwrite: bool = False) -> List[str]: results = [] for spec in specs: + if no_overwrite: + if spec.service_type == 'host' and cast(HostSpec, spec).hostname in self.inventory: + results.append('Skipped %s host spec. To change %s spec omit --no-overwrite flag' + % (cast(HostSpec, spec).hostname, spec.service_type)) + continue + elif cast(ServiceSpec, spec).service_name() in self.spec_store: + results.append('Skipped %s service spec. To change %s spec omit --no-overwrite flag' + % (cast(ServiceSpec, spec).service_name(), cast(ServiceSpec, spec).service_name())) + continue results.append(self._apply(spec)) return results diff --git a/src/pybind/mgr/orchestrator/_interface.py b/src/pybind/mgr/orchestrator/_interface.py index 5fd38f856a71..b27387ef8c2c 100644 --- a/src/pybind/mgr/orchestrator/_interface.py +++ b/src/pybind/mgr/orchestrator/_interface.py @@ -432,7 +432,7 @@ class Orchestrator(object): raise NotImplementedError() @handle_orch_error - def apply(self, specs: Sequence["GenericSpec"]) -> List[str]: + def apply(self, specs: Sequence["GenericSpec"], no_overwrite: bool = False) -> List[str]: """ Applies any spec """ diff --git a/src/pybind/mgr/orchestrator/module.py b/src/pybind/mgr/orchestrator/module.py index 9eb3c5b1acfa..107191946372 100644 --- a/src/pybind/mgr/orchestrator/module.py +++ b/src/pybind/mgr/orchestrator/module.py @@ -674,6 +674,7 @@ class OrchestratorCli(OrchestratorClientMixin, MgrModule, format: Format = Format.plain, unmanaged: Optional[bool] = None, dry_run: bool = False, + no_overwrite: bool = False, inbuf: Optional[str] = None) -> HandleCommandResult: """ Create OSD daemon(s) using a drive group spec @@ -744,7 +745,7 @@ Examples: spec.preview_only = True dg_specs.append(spec) - return self._apply_misc(dg_specs, dry_run, format) + return self._apply_misc(dg_specs, dry_run, format, no_overwrite) if all_available_devices: if unmanaged is None: @@ -758,7 +759,7 @@ Examples: preview_only=dry_run ) ] - return self._apply_misc(dg_specs, dry_run, format) + return self._apply_misc(dg_specs, dry_run, format, no_overwrite) return HandleCommandResult(-errno.EINVAL, stderr=usage) @@ -991,6 +992,7 @@ Usage: dry_run: bool = False, format: Format = Format.plain, unmanaged: bool = False, + no_overwrite: bool = False, inbuf: Optional[str] = None) -> HandleCommandResult: """Update the size or placement for a service or apply a large yaml spec""" usage = """Usage: @@ -1022,10 +1024,10 @@ Usage: raise OrchestratorValidationError(usage) specs = [ServiceSpec(service_type.value, placement=placementspec, unmanaged=unmanaged, preview_only=dry_run)] - return self._apply_misc(specs, dry_run, format) + return self._apply_misc(specs, dry_run, format, no_overwrite) - def _apply_misc(self, specs: Sequence[GenericSpec], dry_run: bool, format: Format) -> HandleCommandResult: - completion = self.apply(specs) + def _apply_misc(self, specs: Sequence[GenericSpec], dry_run: bool, format: Format, no_overwrite: bool = False) -> HandleCommandResult: + completion = self.apply(specs, no_overwrite) raise_if_exception(completion) out = completion.result_str() if dry_run: @@ -1045,6 +1047,7 @@ Usage: dry_run: bool = False, unmanaged: bool = False, format: Format = Format.plain, + no_overwrite: bool = False, inbuf: Optional[str] = None) -> HandleCommandResult: """Update the number of MDS instances for the given fs_name""" if inbuf: @@ -1056,7 +1059,7 @@ Usage: placement=PlacementSpec.from_string(placement), unmanaged=unmanaged, preview_only=dry_run) - return self._apply_misc([spec], dry_run, format) + return self._apply_misc([spec], dry_run, format, no_overwrite) @_cli_write_command('orch apply rgw') def _apply_rgw(self, @@ -1069,6 +1072,7 @@ Usage: dry_run: bool = False, format: Format = Format.plain, unmanaged: bool = False, + no_overwrite: bool = False, inbuf: Optional[str] = None) -> HandleCommandResult: """Update the number of RGW instances for the given zone""" if inbuf: @@ -1085,7 +1089,7 @@ Usage: preview_only=dry_run ) - return self._apply_misc([spec], dry_run, format) + return self._apply_misc([spec], dry_run, format, no_overwrite) @_cli_write_command('orch apply nfs') def _apply_nfs(self, @@ -1096,6 +1100,7 @@ Usage: format: Format = Format.plain, dry_run: bool = False, unmanaged: bool = False, + no_overwrite: bool = False, inbuf: Optional[str] = None) -> HandleCommandResult: """Scale an NFS service""" if inbuf: @@ -1110,7 +1115,7 @@ Usage: preview_only=dry_run ) - return self._apply_misc([spec], dry_run, format) + return self._apply_misc([spec], dry_run, format, no_overwrite) @_cli_write_command('orch apply iscsi') def _apply_iscsi(self, @@ -1122,6 +1127,7 @@ Usage: unmanaged: bool = False, dry_run: bool = False, format: Format = Format.plain, + no_overwrite: bool = False, inbuf: Optional[str] = None) -> HandleCommandResult: """Scale an iSCSI service""" if inbuf: @@ -1138,7 +1144,7 @@ Usage: preview_only=dry_run ) - return self._apply_misc([spec], dry_run, format) + return self._apply_misc([spec], dry_run, format, no_overwrite) @_cli_write_command('orch set backend') def _set_backend(self, module_name: Optional[str] = None) -> HandleCommandResult: