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: v16.2.0~5^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=4eb259c8177d8d3b8cb13d7026fb7cc0835c08c6;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 (cherry picked from commit 248173efcdebf67d4dae3bf8b4d26122d6eca911) --- 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 129f771ad895..c9699189f127 100644 --- a/src/pybind/mgr/orchestrator/module.py +++ b/src/pybind/mgr/orchestrator/module.py @@ -673,6 +673,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 @@ -743,7 +744,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: @@ -757,7 +758,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) @@ -990,6 +991,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: @@ -1021,10 +1023,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: @@ -1044,6 +1046,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: @@ -1055,7 +1058,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, @@ -1068,6 +1071,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: @@ -1084,7 +1088,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, @@ -1095,6 +1099,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: @@ -1109,7 +1114,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, @@ -1121,6 +1126,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: @@ -1137,7 +1143,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: