From 5f5d8453815baf64b93a2c14b9e026e9fe71a291 Mon Sep 17 00:00:00 2001 From: Adam King Date: Mon, 19 Jun 2023 15:46:45 -0400 Subject: [PATCH] mgr/cephadm: add extra_container_args and custom_configs to CustomContainer 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 (cherry picked from commit b66892a668d487f4b7ede147eb8855d166c3d1f9) --- .../ceph/deployment/service_spec.py | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/python-common/ceph/deployment/service_spec.py b/src/python-common/ceph/deployment/service_spec.py index bcebf23c208..1b9cddd8ee8 100644 --- a/src/python-common/ceph/deployment/service_spec.py +++ b/src/python-common/ceph/deployment/service_spec.py @@ -1373,7 +1373,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]] = {}, @@ -1385,6 +1384,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 @@ -1394,7 +1396,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 @@ -1427,6 +1431,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) -- 2.39.5