From: John Mulligan Date: Thu, 25 May 2023 23:30:11 +0000 (-0400) Subject: mgr/cephadm: update package to use ArgumentSpec based types X-Git-Tag: v19.0.0~926^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=de16e6cb7d4bb0c4473977d56162f0d591811604;p=ceph.git 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 --- diff --git a/src/pybind/mgr/cephadm/exchange.py b/src/pybind/mgr/cephadm/exchange.py index 22aa350e594b..76a6134072ad 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 a89c581c4f09..6ef4a5e0446c 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 66fa2c703042..b34be195fa38 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 829a46d1777b..4c3ac44a5625 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, @@ -940,8 +943,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 @@ -1006,8 +1009,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]: