]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/cephadm: update package to use ArgumentSpec based types
authorJohn Mulligan <jmulligan@redhat.com>
Thu, 25 May 2023 23:30:11 +0000 (19:30 -0400)
committerJohn Mulligan <jmulligan@redhat.com>
Thu, 29 Jun 2023 18:50:55 +0000 (14:50 -0400)
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 <jmulligan@redhat.com>
src/pybind/mgr/cephadm/exchange.py
src/pybind/mgr/cephadm/serve.py
src/pybind/mgr/cephadm/services/cephadmservice.py
src/pybind/mgr/orchestrator/_interface.py

index 22aa350e594bd79c510426b75e18d2a373f3e19d..76a6134072ad3c1766ec4637968bfaac81b5eb6d 100644 (file)
@@ -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
index a89c581c4f095ac750b5007716d8a42a8aa759bf..6ef4a5e0446cab40094ccda217077f8f15b56c5a 100644 (file)
@@ -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:
index 66fa2c7030429d93871a0f4e03a2f3d1dc9e5a51..b34be195fa38c68d02a8b07cda50e009061f15a9 100644 (file)
@@ -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
index 829a46d1777b60c8da804208ae0345564e1c32f9..4c3ac44a5625f8f0b767f946979782012b1fa1ff 100644 (file)
@@ -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]: