def test_get_mounts(self): assert (get_mounts( use_auth_context=False, use_artifacts_context=False, use_docker_context=False, use_shm_context=False, ) == []) assert get_mounts( use_auth_context=True, use_artifacts_context=True, use_docker_context=True, use_shm_context=True, ) == [ get_auth_context_mount(read_only=True), get_artifacts_context_mount(read_only=False), get_docker_context_mount(), get_shm_context_mount(), ]
def test_main_container(self): store = V1ConnectionType( name="test_gcs", kind=V1ConnectionKind.S3, schema=V1BucketConnection(bucket="s3://foo"), secret=None, ) contexts = PluginsContextsSpec.from_config( V1Plugins.from_dict({}), default_auth=True ) main_container = k8s_schemas.V1Container( name="main", image="foo/test", image_pull_policy="IfNotPresent", command=["foo", "bar"], args=["arg1", "arg2"], ) container = self.converter.get_main_container( main_container=main_container, contexts=contexts, artifacts_store=store, init_connections=[], connections=[], connection_by_names={}, log_level="info", secrets=[], config_maps=[], kv_env_vars=[], ports=None, ) expected_container = get_main_container( container_id="dummy", main_container=main_container, contexts=contexts, volume_mounts=get_mounts( use_auth_context=True, use_artifacts_context=False, use_docker_context=False, use_shm_context=False, ), log_level="info", artifacts_store=store, connections=[], init=[], connection_by_names={}, secrets=[], config_maps=[], kv_env_vars=[], env=self.converter.get_main_env_vars(), ports=None, run_path="/test", ) assert container == expected_container
def test_get_main_container_host_paths(self): contexts = PluginsContextsSpec( auth=True, docker=False, shm=False, collect_logs=True, collect_artifacts=True, collect_resources=True, auto_resume=True, sync_statuses=True, external_host=False, sidecar=None, ) volume_mounts = get_mounts( use_auth_context=contexts.auth, use_artifacts_context=False, use_docker_context=contexts.docker, use_shm_context=contexts.shm, ) artifacts_store = V1ConnectionType( name="plx-outputs", kind=V1ConnectionKind.HOST_PATH, schema=V1HostPathConnection(mount_path="/tmp/plx/outputs", host_path="/tmp/plx/outputs"), ) container = get_main_container( container_id="test", main_container=k8s_schemas.V1Container(name="main"), contexts=PluginsContextsSpec.from_config( V1Plugins(collect_artifacts=True, collect_logs=True)), volume_mounts=volume_mounts, log_level=None, artifacts_store=artifacts_store, init=[], connections=[], connection_by_names={artifacts_store.name: artifacts_store}, secrets=[], config_maps=[], kv_env_vars=None, env=None, ports=None, run_path="run_path", ) assert container.volume_mounts == [ get_auth_context_mount(read_only=True), get_artifacts_context_mount(read_only=False), ]
def get_main_container( self, main_container: k8s_schemas.V1Container, contexts: PluginsContextsSpec, artifacts_store: V1ConnectionType, connections: List[str], init_connections: Optional[List[V1Init]], connection_by_names: Dict[str, V1ConnectionType], log_level: str, secrets: Optional[Iterable[V1K8sResourceType]], config_maps: Optional[Iterable[V1K8sResourceType]], kv_env_vars: List[List] = None, ports: List[int] = None, ) -> k8s_schemas.V1Container: env = self.get_main_env_vars( external_host=contexts.external_host if contexts else False) volume_mounts = get_mounts( use_auth_context=contexts.auth, use_artifacts_context= False, # Main container has a check and handling for this use_docker_context=contexts.docker, use_shm_context=contexts.shm, ) return get_main_container( container_id=self.MAIN_CONTAINER_ID, main_container=main_container, volume_mounts=volume_mounts, log_level=log_level, contexts=contexts, artifacts_store=artifacts_store, connections=connections, init=init_connections, connection_by_names=connection_by_names, secrets=secrets, config_maps=config_maps, kv_env_vars=kv_env_vars, env=env, ports=ports, run_path=self.run_path, )
def get_sidecar_container( container_id: str, polyaxon_sidecar: V1PolyaxonSidecarContainer, env: List[k8s_schemas.V1EnvVar], artifacts_store: V1ConnectionType, contexts: PluginsContextsSpec, run_path: Optional[str], ) -> Optional[k8s_schemas.V1Container]: if artifacts_store and not contexts: raise PolypodException( "Logs/artifacts store was passed and contexts was not passed.") has_artifacts = artifacts_store and contexts.collect_artifacts has_logs = artifacts_store and contexts.collect_logs if not has_logs and not has_artifacts: # No sidecar return None if (has_artifacts or has_logs) and not run_path: raise PolypodException( "Logs store / outputs store must have a run_path.") env = get_sidecar_env_vars( env_vars=env, container_id=container_id, artifacts_store_name=artifacts_store.name, ) volume_mounts = get_mounts( use_auth_context=contexts.auth, use_artifacts_context=has_artifacts, use_docker_context=False, use_shm_context=False, ) sidecar_args = get_sidecar_args( container_id=container_id, sleep_interval=polyaxon_sidecar.sleep_interval, sync_interval=polyaxon_sidecar.sync_interval, ) env_from = [] secret = None if artifacts_store.is_bucket: secret = artifacts_store.get_secret() volume_mounts += to_list(get_mount_from_resource(resource=secret), check_none=True) env += to_list(get_items_from_secret(secret=secret), check_none=True) env_from += to_list(get_env_from_secret(secret=secret), check_none=True) config_map = artifacts_store.get_config_map() volume_mounts += to_list(get_mount_from_resource(resource=config_map), check_none=True) env += to_list(get_items_from_config_map(config_map=config_map), check_none=True) env_from += to_list(get_env_from_config_map(config_map=config_map), check_none=True) else: volume_mounts += to_list(get_mount_from_store(store=artifacts_store), check_none=True) env += to_list( get_connection_env_var(connection=artifacts_store, secret=secret), check_none=True, ) return k8s_schemas.V1Container( name=SIDECAR_CONTAINER, image=polyaxon_sidecar.get_image(), image_pull_policy=polyaxon_sidecar.image_pull_policy, command=["/bin/bash", "-c"], args=[sidecar_args], env=env, env_from=env_from, resources=polyaxon_sidecar.get_resources(), volume_mounts=volume_mounts, )