def test_get_auth_context_container(self): container = get_auth_context_container( polyaxon_init=V1PolyaxonInitContainer( image="foo/foo", image_tag="", image_pull_policy="IfNotPresent" ), env=[], ) assert container.name == INIT_AUTH_CONTAINER assert container.image == "foo/foo" assert container.image_pull_policy == "IfNotPresent" assert container.command == ["polyaxon", "initializer", "auth"] assert container.args is None assert container.env == [] assert container.resources == get_init_resources() assert container.volume_mounts == [get_auth_context_mount(read_only=False)]
def get_init_containers( self, polyaxon_init: V1PolyaxonInitContainer, contexts: PluginsContextsSpec, artifacts_store: V1ConnectionType, init_connections: List[V1Init], init_containers: List[k8s_schemas.V1Container], connection_by_names: Dict[str, V1ConnectionType], ) -> List[k8s_schemas.V1Container]: init_containers = [ ensure_container_name(container=c, prefix=INIT_PREFIX) for c in to_list(init_containers, check_none=True) ] init_connections = to_list(init_connections, check_none=True) containers = [] # Add auth context if contexts and contexts.auth: containers.append( get_auth_context_container( polyaxon_init=polyaxon_init, env=self.get_auth_service_env_vars( external_host=contexts.external_host), )) # Add outputs if contexts and contexts.collect_artifacts: containers += to_list( get_artifacts_path_container( polyaxon_init=polyaxon_init, artifacts_store=artifacts_store, run_path=self.run_path, auto_resume=contexts.auto_resume, ), check_none=True, ) containers += self.handle_init_connections( polyaxon_init=polyaxon_init, artifacts_store=artifacts_store, init_connections=init_connections, connection_by_names=connection_by_names, contexts=contexts, ) init_containers = containers + init_containers return [sanitize_container(c) for c in init_containers]
def test_get_init_containers_with_auth(self): containers = self.converter.get_init_containers( polyaxon_init=V1PolyaxonInitContainer(image="foo/foo"), contexts=PluginsContextsSpec.from_config( V1Plugins(collect_logs=False, collect_artifacts=False)), artifacts_store=None, init_connections=None, is_resume=False, connection_by_names={}, init_containers=[], ) assert containers == [ get_auth_context_container( polyaxon_init=V1PolyaxonInitContainer(image="foo/foo"), env=self.converter.get_auth_service_env_vars(), ) ]
def test_get_init_containers_with_store_outputs(self): store = V1ConnectionType( name="test_gcs", kind=V1ConnectionKind.S3, schema=V1BucketConnection(bucket="s3://foo"), ) # No context containers = self.converter.get_init_containers( contexts=None, artifacts_store=store, init_connections=[], init_containers=[], connection_by_names={}, polyaxon_init=V1PolyaxonInitContainer(image="foo/foo"), ) assert containers == [] # With context containers = self.converter.get_init_containers( contexts=PluginsContextsSpec.from_config( V1Plugins(collect_artifacts=True, collect_logs=False, auth=True)), artifacts_store=store, init_connections=[], init_containers=[], connection_by_names={}, polyaxon_init=V1PolyaxonInitContainer(image="foo/foo"), ) assert containers == [ get_auth_context_container( polyaxon_init=V1PolyaxonInitContainer(image="foo/foo"), env=self.converter.get_auth_service_env_vars(), ), get_artifacts_path_container( polyaxon_init=V1PolyaxonInitContainer(image="foo/foo"), artifacts_store=store, run_path=self.converter.run_path, auto_resume=True, ), ]
def get_init_containers( self, polyaxon_init: V1PolyaxonInitContainer, contexts: PluginsContextsSpec, artifacts_store: V1ConnectionType, init_connections: List[V1Init], init_containers: List[k8s_schemas.V1Container], connection_by_names: Dict[str, V1ConnectionType], is_resume: bool = False, ) -> List[k8s_schemas.V1Container]: init_containers = init_containers or [] init_connections = init_connections or [] containers = [] # Add auth context if contexts and contexts.auth: containers.append( get_auth_context_container( polyaxon_init=polyaxon_init, env=self.get_auth_service_env_vars())) # Add outputs if contexts and contexts.collect_artifacts: containers += to_list( get_artifacts_path_container( polyaxon_init=polyaxon_init, artifacts_store=artifacts_store, run_path=self.run_path, clean=not is_resume, ), check_none=True, ) containers += self.handle_init_connections( polyaxon_init=polyaxon_init, init_connections=init_connections, connection_by_names=connection_by_names, contexts=contexts, ) return containers + init_containers
def test_get_init_containers_with_claim_outputs(self): store = V1ConnectionType( name="test_claim", kind=V1ConnectionKind.VOLUME_CLAIM, schema=V1ClaimConnection(mount_path="/claim/path", volume_claim="claim", read_only=True), ) # No context to enable the outputs containers = self.converter.get_init_containers( contexts=None, artifacts_store=store.name, init_connections=None, connection_by_names={}, init_containers=[], polyaxon_init=V1PolyaxonInitContainer(image="foo/foo"), ) assert containers == [] # Enable outputs containers = self.converter.get_init_containers( contexts=PluginsContextsSpec.from_config( V1Plugins(collect_artifacts=True, collect_logs=False)), artifacts_store=store, connection_by_names={}, init_connections=None, init_containers=[], polyaxon_init=V1PolyaxonInitContainer(image="foo/foo"), ) assert containers == [ get_artifacts_path_container( polyaxon_init=V1PolyaxonInitContainer(image="foo/foo"), artifacts_store=store, run_path=self.converter.run_path, auto_resume=True, ), ] # Use store for init containers = self.converter.get_init_containers( contexts=None, artifacts_store=None, connection_by_names={store.name: store}, init_connections=[V1Init(connection=store.name)], init_containers=[], polyaxon_init=V1PolyaxonInitContainer(image="foo/foo"), ) assert containers == [ get_store_container( polyaxon_init=V1PolyaxonInitContainer(image="foo/foo"), connection=store, artifacts=None, env=self.converter.get_init_service_env_vars(), ) ] # Use store for init and outputs containers = self.converter.get_init_containers( contexts=PluginsContextsSpec.from_config( V1Plugins(collect_artifacts=True, collect_logs=False)), artifacts_store=store, init_connections=[V1Init(connection=store.name)], connection_by_names={store.name: store}, init_containers=[], polyaxon_init=V1PolyaxonInitContainer(image="foo/foo"), ) assert containers == [ get_artifacts_path_container( polyaxon_init=V1PolyaxonInitContainer(image="foo/foo"), artifacts_store=store, run_path=self.converter.run_path, auto_resume=True, ), get_store_container( polyaxon_init=V1PolyaxonInitContainer(image="foo/foo"), connection=store, artifacts=None, env=self.converter.get_init_service_env_vars(), ), ] # Add Store store1 = V1ConnectionType( name="test_gcs", kind=V1ConnectionKind.S3, schema=V1BucketConnection(bucket="s3://foo"), secret=None, ) containers = self.converter.get_init_containers( contexts=PluginsContextsSpec.from_config( V1Plugins(collect_artifacts=True, collect_logs=False, auth=True)), artifacts_store=store, init_connections=[ V1Init( connection=store.name, artifacts=V1ArtifactsType(files=["/foo", "/bar"]), ), V1Init( connection=store1.name, artifacts=V1ArtifactsType(files=["/foo", "/bar"]), ), ], connection_by_names={ store.name: store, store1.name: store1 }, init_containers=[], polyaxon_init=V1PolyaxonInitContainer(image="foo/foo"), ) assert containers == [ get_auth_context_container( polyaxon_init=V1PolyaxonInitContainer(image="foo/foo"), env=self.converter.get_auth_service_env_vars(), ), get_artifacts_path_container( polyaxon_init=V1PolyaxonInitContainer(image="foo/foo"), artifacts_store=store, run_path=self.converter.run_path, auto_resume=True, ), get_store_container( polyaxon_init=V1PolyaxonInitContainer(image="foo/foo"), connection=store, artifacts=V1ArtifactsType(files=["/foo", "/bar"]), env=self.converter.get_init_service_env_vars(), ), get_store_container( polyaxon_init=V1PolyaxonInitContainer(image="foo/foo"), connection=store1, artifacts=V1ArtifactsType(files=["/foo", "/bar"]), env=self.converter.get_init_service_env_vars(), ), ]