From bd5925a9b47c780a4672e6abe5341e415b1c70d5 Mon Sep 17 00:00:00 2001 From: John Mulligan Date: Thu, 25 May 2023 19:30:11 -0400 Subject: [PATCH] mgr/cephadm: update package to use ArgumentSpec based types Update the cephadm mgr module to match the changes to use ArgumentSpec based types for extra_container_args and extra_entrypoint args. Update orchestrator/_interface.py to match the changes to use ArgumentSpec based types for extra_container_args and extra_entrypoint args. The job of splitting up arguments is no longer done here but lies in a method of the ArgumentSpec type. Signed-off-by: John Mulligan (cherry picked from commit de16e6cb7d4bb0c4473977d56162f0d591811604) --- src/pybind/mgr/cephadm/exchange.py | 4 ++-- src/pybind/mgr/cephadm/serve.py | 24 ++++++++++++------- .../mgr/cephadm/services/cephadmservice.py | 10 ++++---- src/pybind/mgr/orchestrator/_interface.py | 17 +++++++++---- 4 files changed, 37 insertions(+), 18 deletions(-) diff --git a/src/pybind/mgr/cephadm/exchange.py b/src/pybind/mgr/cephadm/exchange.py index 22aa350e594bd..76a6134072ad3 100644 --- a/src/pybind/mgr/cephadm/exchange.py +++ b/src/pybind/mgr/cephadm/exchange.py @@ -87,8 +87,8 @@ class DeployMeta: deployed_by: Optional[List[str]] = None, rank: Optional[int] = None, rank_generation: Optional[int] = None, - extra_container_args: Optional[List[str]] = None, - extra_entrypoint_args: Optional[List[str]] = None, + extra_container_args: Optional[List[Union[str, Dict[str, Any]]]] = None, + extra_entrypoint_args: Optional[List[Union[str, Dict[str, Any]]]] = None, ): self.data = dict(init_data or {}) # set fields diff --git a/src/pybind/mgr/cephadm/serve.py b/src/pybind/mgr/cephadm/serve.py index 79aedad2b97fd..85532b0b938c6 100644 --- a/src/pybind/mgr/cephadm/serve.py +++ b/src/pybind/mgr/cephadm/serve.py @@ -11,6 +11,8 @@ from typing import TYPE_CHECKING, Optional, List, cast, Dict, Any, Union, Tuple, from ceph.deployment import inventory from ceph.deployment.drive_group import DriveGroupSpec from ceph.deployment.service_spec import ( + ArgumentList, + ArgumentSpec, CustomContainerSpec, PlacementSpec, RGWSpec, @@ -1289,8 +1291,12 @@ class CephadmServe: deployed_by=self.mgr.get_active_mgr_digests(), rank=daemon_spec.rank, rank_generation=daemon_spec.rank_generation, - extra_container_args=extra_container_args, - extra_entrypoint_args=extra_entrypoint_args, + extra_container_args=ArgumentSpec.map_json( + extra_container_args, + ), + extra_entrypoint_args=ArgumentSpec.map_json( + extra_entrypoint_args, + ), ), config_blobs=daemon_spec.final_config, ).dump_json_str(), @@ -1338,19 +1344,21 @@ class CephadmServe: self.mgr.cephadm_services[servict_type].post_remove(dd, is_failed_deploy=True) raise - def _setup_extra_deployment_args(self, daemon_spec: CephadmDaemonDeploySpec, params: Dict[str, Any]) -> Tuple[CephadmDaemonDeploySpec, Optional[List[str]], Optional[List[str]]]: + def _setup_extra_deployment_args( + self, + daemon_spec: CephadmDaemonDeploySpec, + params: Dict[str, Any], + ) -> Tuple[CephadmDaemonDeploySpec, Optional[ArgumentList], Optional[ArgumentList]]: # this function is for handling any potential user specified # (in the service spec) extra runtime or entrypoint args for a daemon # we are going to deploy. Effectively just adds a set of extra args to # pass to the cephadm binary to indicate the daemon being deployed # needs extra runtime/entrypoint args. Returns the modified daemon spec # as well as what args were added (as those are included in unit.meta file) - def _to_args(lst: List[str]) -> List[str]: + def _to_args(lst: ArgumentList) -> List[str]: out: List[str] = [] - for value in lst: - for arg in value.split(' '): - if arg: - out.append(arg) + for argspec in lst: + out.extend(argspec.to_args()) return out try: diff --git a/src/pybind/mgr/cephadm/services/cephadmservice.py b/src/pybind/mgr/cephadm/services/cephadmservice.py index 66fa2c7030429..b34be195fa38c 100644 --- a/src/pybind/mgr/cephadm/services/cephadmservice.py +++ b/src/pybind/mgr/cephadm/services/cephadmservice.py @@ -11,7 +11,9 @@ from typing import TYPE_CHECKING, List, Callable, TypeVar, \ from mgr_module import HandleCommandResult, MonCommandFailed from ceph.deployment.service_spec import ( + ArgumentList, CephExporterSpec, + GeneralArgList, MONSpec, RGWSpec, ServiceSpec, @@ -66,8 +68,8 @@ class CephadmDaemonDeploySpec: ports: Optional[List[int]] = None, rank: Optional[int] = None, rank_generation: Optional[int] = None, - extra_container_args: Optional[List[str]] = None, - extra_entrypoint_args: Optional[List[str]] = None, + extra_container_args: Optional[ArgumentList] = None, + extra_entrypoint_args: Optional[ArgumentList] = None, ): """ A data struction to encapsulate `cephadm deploy ... @@ -151,8 +153,8 @@ class CephadmDaemonDeploySpec: ports=self.ports, rank=self.rank, rank_generation=self.rank_generation, - extra_container_args=self.extra_container_args, - extra_entrypoint_args=self.extra_entrypoint_args, + extra_container_args=cast(GeneralArgList, self.extra_container_args), + extra_entrypoint_args=cast(GeneralArgList, self.extra_entrypoint_args), ) @property diff --git a/src/pybind/mgr/orchestrator/_interface.py b/src/pybind/mgr/orchestrator/_interface.py index 2c6458e81fd29..f9957e8049d72 100644 --- a/src/pybind/mgr/orchestrator/_interface.py +++ b/src/pybind/mgr/orchestrator/_interface.py @@ -31,6 +31,9 @@ import yaml from ceph.deployment import inventory from ceph.deployment.service_spec import ( + ArgumentList, + ArgumentSpec, + GeneralArgList, IngressSpec, IscsiServiceSpec, MDSSpec, @@ -959,8 +962,8 @@ class DaemonDescription(object): deployed_by: Optional[List[str]] = None, rank: Optional[int] = None, rank_generation: Optional[int] = None, - extra_container_args: Optional[List[str]] = None, - extra_entrypoint_args: Optional[List[str]] = None, + extra_container_args: Optional[GeneralArgList] = None, + extra_entrypoint_args: Optional[GeneralArgList] = None, ) -> None: #: Host is at the same granularity as InventoryHost @@ -1025,8 +1028,14 @@ class DaemonDescription(object): self.is_active = is_active - self.extra_container_args = extra_container_args - self.extra_entrypoint_args = extra_entrypoint_args + self.extra_container_args: Optional[ArgumentList] = None + self.extra_entrypoint_args: Optional[ArgumentList] = None + if extra_container_args: + self.extra_container_args = ArgumentSpec.from_general_args( + extra_container_args) + if extra_entrypoint_args: + self.extra_entrypoint_args = ArgumentSpec.from_general_args( + extra_entrypoint_args) @property def status(self) -> Optional[DaemonDescriptionStatus]: -- 2.39.5