Exemplo n.º 1
0
    def test_get_env_vars_with_config_maps(self):
        assert (get_env_vars(
            contexts=None,
            log_level=None,
            kv_env_vars=None,
            artifacts_store_name=None,
            connections=None,
            secrets=None,
            config_maps=[self.resource1, self.resource2],
        ) == get_items_from_config_map(config_map=self.resource1) +
                get_items_from_config_map(config_map=self.resource2))

        assert (get_env_vars(
            contexts=None,
            log_level=None,
            kv_env_vars=None,
            artifacts_store_name=None,
            connections=None,
            secrets=None,
            config_maps=[
                self.resource1,
                self.resource2,
                self.resource3,
                self.resource4,
            ],
        ) == get_items_from_config_map(config_map=self.resource1) +
                get_items_from_config_map(config_map=self.resource2) +
                get_items_from_config_map(config_map=self.resource3) +
                get_items_from_config_map(config_map=self.resource4))
Exemplo n.º 2
0
    def test_get_env_vars_with_kv_env_vars(self):
        # Check wrong kv env vars
        with self.assertRaises(PolypodException):
            get_env_vars(
                contexts=None,
                log_level=None,
                kv_env_vars=["x", "y", "z"],
                artifacts_store_name=None,
                connections=None,
                secrets=None,
                config_maps=None,
            )
        with self.assertRaises(PolypodException):
            get_env_vars(
                contexts=None,
                log_level=None,
                kv_env_vars={"x": "y"},
                artifacts_store_name=None,
                connections=None,
                secrets=None,
                config_maps=None,
            )

        # Valid kv env vars
        assert (get_env_vars(
            contexts=None,
            log_level=None,
            kv_env_vars=[["key1", "val1"], ["key2", "val2"]],
            artifacts_store_name=None,
            connections=None,
            secrets=None,
            config_maps=None,
        ) == get_kv_env_vars([["key1", "val1"], ["key2", "val2"]]))
Exemplo n.º 3
0
    def test_get_env_vars_with_secrets(self):
        assert (get_env_vars(
            contexts=None,
            log_level=None,
            kv_env_vars=None,
            connections=None,
            secrets=[self.resource1, self.resource2],
            config_maps=None,
        ) == get_items_from_secret(secret=self.resource1) +
                get_items_from_secret(secret=self.resource2))

        assert (get_env_vars(
            contexts=None,
            log_level=None,
            kv_env_vars=None,
            connections=None,
            secrets=[
                self.resource1,
                self.resource2,
                self.resource3,
                self.resource4,
            ],
            config_maps=None,
        ) == get_items_from_secret(secret=self.resource1) +
                get_items_from_secret(secret=self.resource2) +
                get_items_from_secret(secret=self.resource3) +
                get_items_from_secret(secret=self.resource4))
Exemplo n.º 4
0
    def test_get_env_vars_with_artifacts_store(self):
        assert (get_env_vars(
            contexts=None,
            log_level=None,
            kv_env_vars=None,
            connections=None,
            secrets=None,
            config_maps=None,
        ) == [])

        assert get_env_vars(
            contexts=PluginsContextsSpec.from_config(
                V1Plugins(collect_logs=False,
                          collect_artifacts=True,
                          collect_resources=True)),
            log_level=None,
            kv_env_vars=None,
            connections=None,
            secrets=None,
            config_maps=None,
        ) == [
            get_env_var(name=POLYAXON_KEYS_COLLECT_ARTIFACTS, value=True),
            get_env_var(name=POLYAXON_KEYS_COLLECT_RESOURCES, value=True),
        ]

        assert (get_env_vars(
            contexts=PluginsContextsSpec.from_config(
                V1Plugins(
                    collect_logs=False,
                    collect_artifacts=False,
                    collect_resources=False,
                )),
            log_level=None,
            kv_env_vars=None,
            connections=None,
            secrets=None,
            config_maps=None,
        ) == [])

        assert (get_env_vars(
            contexts=None,
            log_level=None,
            kv_env_vars=None,
            connections=None,
            secrets=None,
            config_maps=None,
        ) == [])

        assert get_env_vars(
            contexts=PluginsContextsSpec.from_config(
                V1Plugins(collect_logs=False,
                          collect_artifacts=True,
                          collect_resources=False)),
            log_level=None,
            kv_env_vars=None,
            connections=None,
            secrets=None,
            config_maps=None,
        ) == [get_env_var(name=POLYAXON_KEYS_COLLECT_ARTIFACTS, value=True)]
Exemplo n.º 5
0
    def test_get_env_vars_with_all(self):
        connection = V1ConnectionType(
            name="test_s3",
            kind=V1ConnectionKind.S3,
            schema=V1BucketConnection(bucket="s3//:foo"),
            secret=self.resource6.schema,
        )

        env_vars = get_env_vars(
            contexts=PluginsContextsSpec.from_config(
                V1Plugins(collect_logs=False,
                          collect_artifacts=True,
                          collect_resources=True)),
            log_level="info",
            kv_env_vars=[["key1", "val1"], ["key2", "val2"]],
            artifacts_store_name="test",
            connections=[connection],
            secrets=[
                self.resource1,
                self.resource2,
                self.resource3,
                self.resource4,
                self.resource6,
            ],
            config_maps=[
                self.resource1,
                self.resource2,
                self.resource3,
                self.resource4,
            ],
        )
        expected = [
            get_env_var(name=POLYAXON_KEYS_LOG_LEVEL, value="info"),
            get_env_var(name=POLYAXON_KEYS_COLLECT_ARTIFACTS, value=True),
            get_env_var(name=POLYAXON_KEYS_COLLECT_RESOURCES, value=True),
            get_env_var(name=POLYAXON_KEYS_ARTIFACTS_STORE_NAME, value="test"),
        ]
        expected += get_connection_env_var(connection=connection,
                                           secret=self.resource6)
        expected += get_kv_env_vars([["key1", "val1"], ["key2", "val2"]])
        expected += get_env_vars_from_k8s_resources(
            secrets=[
                self.resource1,
                self.resource2,
                self.resource3,
                self.resource4,
                self.resource6,
            ],
            config_maps=[
                self.resource1,
                self.resource2,
                self.resource3,
                self.resource4,
            ],
        )

        assert env_vars == expected
Exemplo n.º 6
0
 def test_get_env_vars(self):
     assert (get_env_vars(
         contexts=None,
         log_level=None,
         kv_env_vars=None,
         connections=None,
         secrets=None,
         config_maps=None,
     ) == [])
Exemplo n.º 7
0
def get_main_container(
    container_id: str,
    main_container: k8s_schemas.V1Container,
    volume_mounts: List[k8s_schemas.V1VolumeMount],
    contexts: PluginsContextsSpec,
    artifacts_store: Optional[V1ConnectionType],
    init: Optional[List[V1Init]],
    connections: Optional[List[str]],
    connection_by_names: Dict[str, V1ConnectionType],
    secrets: Optional[Iterable[V1K8sResourceType]],
    config_maps: Optional[Iterable[V1K8sResourceType]],
    log_level: str,
    run_path: Optional[str],
    kv_env_vars=None,
    env: List[k8s_schemas.V1EnvVar] = None,
    ports: List[int] = None,
) -> k8s_schemas.V1Container:
    """Pod job container for task."""
    connections = connections or []
    connection_by_names = connection_by_names or {}
    secrets = secrets or []
    config_maps = config_maps or []

    if artifacts_store and not run_path:
        raise PolypodException("Run path is required for main container.")

    if artifacts_store and not contexts.collect_artifacts:
        if artifacts_store.name not in connection_by_names:
            connection_by_names[artifacts_store.name] = artifacts_store
            connections.append(artifacts_store.name)

    requested_connections = [connection_by_names[c] for c in connections]
    requested_config_maps = get_requested_config_maps(
        config_maps=config_maps, connections=requested_connections)
    requested_secrets = get_requested_secrets(
        secrets=secrets, connections=requested_connections)

    # Mounts
    volume_mounts = to_list(volume_mounts, check_none=True)
    volume_mounts = volume_mounts + get_volume_mounts(
        contexts=contexts,
        init=init,
        connections=requested_connections,
        secrets=requested_secrets,
        config_maps=requested_config_maps,
    )

    # Env vars
    env = to_list(env, check_none=True)
    env = env + get_env_vars(
        contexts=contexts,
        log_level=log_level,
        kv_env_vars=kv_env_vars,
        connections=requested_connections,
        secrets=requested_secrets,
        config_maps=requested_config_maps,
    )

    # Env from
    env_from = get_env_from_k8s_resources(secrets=requested_secrets,
                                          config_maps=requested_config_maps)

    ports = [
        k8s_schemas.V1ContainerPort(container_port=port)
        for port in to_list(ports, check_none=True)
    ]

    return patch_container(
        container=main_container,
        name=container_id,
        env=env,
        env_from=env_from,
        volume_mounts=volume_mounts,
        ports=ports or None,
    )