def patch_container( container: k8s_schemas.V1Container, name: str = None, command: List[str] = None, args: List[str] = None, image: str = None, image_pull_policy: str = None, env: List[k8s_schemas.V1EnvVar] = None, env_from: List[k8s_schemas.V1EnvFromSource] = None, volume_mounts: List[k8s_schemas.V1VolumeMount] = None, ports: List[k8s_schemas.V1ContainerPort] = None, resources: k8s_schemas.V1ResourceRequirements = None, ) -> k8s_schemas.V1Container: container.name = name or container.name container.env = to_list(container.env, check_none=True) + to_list( env, check_none=True) container.env_from = to_list(container.env_from, check_none=True) + to_list(env_from, check_none=True) container.volume_mounts = to_list( container.volume_mounts, check_none=True) + to_list(volume_mounts, check_none=True) container.ports = to_list(container.ports, check_none=True) + to_list( ports, check_none=True) container.resources = container.resources or resources container.image_pull_policy = container.image_pull_policy or image_pull_policy container.image = container.image or image if not any([container.command, container.args]): container.command = command container.args = args return sanitize_container(container)
def sanitize_container_env( container: k8s_schemas.V1Container, ) -> k8s_schemas.V1Container: def sanitize_env_dict(d: Dict): return { d_k: sanitize_value(d_v, handle_dict=False) if d_k in ["name", "value"] else sanitize_value(d_v, handle_dict=True) for d_k, d_v in d.items() } def sanitize_value(d, handle_dict: bool = False): if isinstance(d, str): return d if not isinstance(d, Mapping): return json.dumps(d) if not handle_dict: return json.dumps(d) return { d_k: sanitize_value(d_v, handle_dict=True) for d_k, d_v in d.items() } if container.env: env = [] for e in container.env: if isinstance(e, Mapping): e = sanitize_env_dict(e) env.append(e) elif isinstance(e, k8s_schemas.V1EnvVar): if e.value is not None: e.value = sanitize_value(e.value, handle_dict=False) env.append(e) container.env = env return container
def sanitize_container_env( container: k8s_schemas.V1Container, ) -> k8s_schemas.V1Container: if container.env: env = [] for e in container.env: if e: if isinstance(e, Mapping): e = {k: str(v) for k, v in e.items()} elif e.value: e.value = str(e.value) env.append(e) container.env = env return container