]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/cephadm: add extra_container_args and custom_configs to CustomContainer
authorAdam King <adking@redhat.com>
Mon, 19 Jun 2023 19:46:45 +0000 (15:46 -0400)
committerAdam King <adking@redhat.com>
Tue, 11 Jul 2023 13:37:28 +0000 (09:37 -0400)
CustomContainer was skipped previously for the extra_container_args
and custom_configs feature as these could already be done
using other fields within the custom container service spec
(the "args" and "files" fields respectively). It seems
desirable for us to allow setting these things for custom
containers the same as for other services for uniformity sake
and this allows us to use custom containers to test
these features.

Signed-off-by: Adam King <adking@redhat.com>
src/python-common/ceph/deployment/service_spec.py

index 2f981ede5fba4cbd28ebcfcb7e30b81d7ebe6972..afb8b0acb02a7dd0b67dd8e59459149dfab05331 100644 (file)
@@ -1282,7 +1282,6 @@ class CustomContainerSpec(ServiceSpec):
                  preview_only: bool = False,
                  image: Optional[str] = None,
                  entrypoint: Optional[str] = None,
-                 extra_entrypoint_args: Optional[GeneralArgList] = None,
                  uid: Optional[int] = None,
                  gid: Optional[int] = None,
                  volume_mounts: Optional[Dict[str, str]] = {},
@@ -1294,6 +1293,9 @@ class CustomContainerSpec(ServiceSpec):
                  ports: Optional[List[int]] = [],
                  dirs: Optional[List[str]] = [],
                  files: Optional[Dict[str, Any]] = {},
+                 extra_container_args: Optional[GeneralArgList] = None,
+                 extra_entrypoint_args: Optional[GeneralArgList] = None,
+                 custom_configs: Optional[List[CustomConfig]] = None,
                  ):
         assert service_type == 'container'
         assert service_id is not None
@@ -1303,7 +1305,9 @@ class CustomContainerSpec(ServiceSpec):
             service_type, service_id,
             placement=placement, unmanaged=unmanaged,
             preview_only=preview_only, config=config,
-            networks=networks, extra_entrypoint_args=extra_entrypoint_args)
+            networks=networks, extra_container_args=extra_container_args,
+            extra_entrypoint_args=extra_entrypoint_args,
+            custom_configs=custom_configs)
 
         self.image = image
         self.entrypoint = entrypoint
@@ -1336,6 +1340,19 @@ class CustomContainerSpec(ServiceSpec):
                 config_json[prop] = value
         return config_json
 
+    def validate(self) -> None:
+        super(CustomContainerSpec, self).validate()
+
+        if self.args and self.extra_container_args:
+            raise SpecValidationError(
+                '"args" and "extra_container_args" are mutually exclusive '
+                '(and both serve the same purpose)')
+
+        if self.files and self.custom_configs:
+            raise SpecValidationError(
+                '"files" and "custom_configs" are mutually exclusive '
+                '(and both serve the same purpose)')
+
 
 yaml.add_representer(CustomContainerSpec, ServiceSpec.yaml_representer)