From 70a67f9fbbe725b25bdf0138af59d1907e1bc96f Mon Sep 17 00:00:00 2001 From: John Mulligan Date: Mon, 29 May 2023 16:54:20 -0400 Subject: [PATCH] xxx: DELETEME: hack to find invalid type assignments Signed-off-by: John Mulligan --- src/pybind/mgr/cephadm/services/cephadmservice.py | 9 +++++++++ src/pybind/mgr/orchestrator/_interface.py | 9 +++++++++ src/python-common/ceph/deployment/service_spec.py | 11 +++++++++++ 3 files changed, 29 insertions(+) diff --git a/src/pybind/mgr/cephadm/services/cephadmservice.py b/src/pybind/mgr/cephadm/services/cephadmservice.py index b34be195fa38c..26eeb94d30700 100644 --- a/src/pybind/mgr/cephadm/services/cephadmservice.py +++ b/src/pybind/mgr/cephadm/services/cephadmservice.py @@ -110,6 +110,15 @@ class CephadmDaemonDeploySpec: self.extra_container_args = extra_container_args self.extra_entrypoint_args = extra_entrypoint_args + def __setattr__(self, name: str, value: Any) -> None: + if value is not None and name in ('extra_container_args', 'extra_entrypoint_args'): + for v in value: + tname = str(type(v)) + if 'ArgumentSpec' not in tname: + raise TypeError(f"{name} is not all ArgumentSpec values: {v!r}(is {type(v)} in {value!r}") + + super().__setattr__(name, value) + def name(self) -> str: return '%s.%s' % (self.daemon_type, self.daemon_id) diff --git a/src/pybind/mgr/orchestrator/_interface.py b/src/pybind/mgr/orchestrator/_interface.py index 4c3ac44a5625f..044fb455db38f 100644 --- a/src/pybind/mgr/orchestrator/_interface.py +++ b/src/pybind/mgr/orchestrator/_interface.py @@ -1018,6 +1018,15 @@ class DaemonDescription(object): self.extra_entrypoint_args = ArgumentSpec.from_general_args( extra_entrypoint_args) + def __setattr__(self, name: str, value: Any) -> None: + if value is not None and name in ('extra_container_args', 'extra_entrypoint_args'): + for v in value: + tname = str(type(v)) + if 'ArgumentSpec' not in tname: + raise TypeError(f"{name} is not all ArgumentSpec values: {v!r}(is {type(v)} in {value!r}") + + super().__setattr__(name, value) + @property def status(self) -> Optional[DaemonDescriptionStatus]: return self._status diff --git a/src/python-common/ceph/deployment/service_spec.py b/src/python-common/ceph/deployment/service_spec.py index 3c9e0483b0444..2f981ede5fba4 100644 --- a/src/python-common/ceph/deployment/service_spec.py +++ b/src/python-common/ceph/deployment/service_spec.py @@ -737,6 +737,17 @@ class ServiceSpec(object): extra_entrypoint_args) self.custom_configs: Optional[List[CustomConfig]] = custom_configs + def __setattr__(self, name: str, value: Any) -> None: + if value is not None and name in ('extra_container_args', 'extra_entrypoint_args'): + for v in value: + tname = str(type(v)) + if 'ArgumentSpec' not in tname: + raise TypeError( + f"{name} is not all ArgumentSpec values:" + f" {v!r}(is {type(v)} in {value!r}") + + super().__setattr__(name, value) + @classmethod @handle_type_error def from_json(cls: Type[ServiceSpecT], json_spec: Dict) -> ServiceSpecT: -- 2.39.5