示例#1
0
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)
示例#2
0
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
示例#3
0
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