def get_base_store_container( container: Optional[k8s_schemas.V1Container], container_name: str, polyaxon_init: V1PolyaxonInitContainer, store: V1ConnectionType, env: List[k8s_schemas.V1EnvVar], env_from: List[k8s_schemas.V1EnvFromSource], volume_mounts: List[k8s_schemas.V1VolumeMount], args: List[str], is_artifact_store: Optional[bool] = False, ) -> Optional[k8s_schemas.V1Container]: env = env or [] env_from = env_from or [] volume_mounts = volume_mounts or [] # Artifact store needs to allow init the contexts as well, so the store is not required if not is_artifact_store and not store: raise PolypodException("Init store container requires a store") secret = None if store.is_bucket: if not is_artifact_store: secret = store.get_secret() volume_mounts = volume_mounts + to_list( get_mount_from_resource(resource=secret), check_none=True) env = env + to_list(get_items_from_secret(secret=secret), check_none=True) env_from = env_from + to_list(get_env_from_secret(secret=secret), check_none=True) env += to_list(get_connection_env_var(connection=store, secret=secret), check_none=True) config_map = store.get_config_map() volume_mounts = volume_mounts + to_list( get_mount_from_resource(resource=config_map), check_none=True) env = env + to_list( get_items_from_config_map(config_map=config_map), check_none=True) env_from = env_from + to_list( get_env_from_config_map(config_map=config_map), check_none=True) else: volume_mounts = volume_mounts + to_list( get_mount_from_store(store=store), check_none=True) env += to_list(get_connection_env_var(connection=store, secret=secret), check_none=True) return patch_container( container=container, name=container_name, image=polyaxon_init.get_image(), image_pull_policy=polyaxon_init.image_pull_policy, command=["/bin/sh", "-c"], args=args, env=env, env_from=env_from, resources=polyaxon_init.get_resources(), volume_mounts=volume_mounts, )
def get_custom_init_container( connection: V1ConnectionType, contexts: PluginsContextsSpec, container: Optional[k8s_schemas.V1Container], env: List[k8s_schemas.V1EnvVar] = None, mount_path: str = None, ) -> k8s_schemas.V1Container: if not connection: raise PolypodException( "A connection is required to create a repo context.") volume_name = (get_volume_name(mount_path) if mount_path else constants.CONTEXT_VOLUME_ARTIFACTS) mount_path = mount_path or CONTEXT_MOUNT_ARTIFACTS volume_mounts = [ get_connections_context_mount(name=volume_name, mount_path=mount_path) ] if contexts and contexts.auth: volume_mounts.append(get_auth_context_mount(read_only=True)) env = to_list(env, check_none=True) env_from = [] secret = connection.get_secret() if 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) env += to_list(get_connection_env_var(connection=connection, secret=secret), check_none=True) config_map = connection.get_config_map() if 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) container_name = container.name or generate_container_name( INIT_CUSTOM_CONTAINER_PREFIX, connection.name) return patch_container( container=container, name=container_name, env=env, env_from=env_from, volume_mounts=volume_mounts, )
def get_container(tuner_container: V1Container, container: V1Container = None) -> V1Container: if container: return patch_container( container=container, name=container.name, image=tuner_container.image, image_pull_policy=tuner_container.image_pull_policy, command=tuner_container.command, args=tuner_container.args, env=tuner_container.env, env_from=tuner_container.env_from, volume_mounts=tuner_container.volume_mounts, resources=tuner_container.resources, ) return tuner_container
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, )
def get_git_init_container( polyaxon_init: V1PolyaxonInitContainer, connection: V1ConnectionType, contexts: PluginsContextsSpec, container: Optional[k8s_schemas.V1Container] = None, env: List[k8s_schemas.V1EnvVar] = None, mount_path: str = None, track: bool = False, ) -> k8s_schemas.V1Container: if not connection: raise PolypodException( "A connection is required to create a repo context.") if not container: container = k8s_schemas.V1Container(name=generate_container_name( INIT_GIT_CONTAINER_PREFIX, connection.name), ) volume_name = (get_volume_name(mount_path) if mount_path else constants.CONTEXT_VOLUME_ARTIFACTS) mount_path = mount_path or CONTEXT_MOUNT_ARTIFACTS volume_mounts = [ get_connections_context_mount(name=volume_name, mount_path=mount_path) ] if contexts and contexts.auth: volume_mounts.append(get_auth_context_mount(read_only=True)) env = to_list(env, check_none=True) env_from = [] secret = connection.get_secret() if 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) env += to_list(get_connection_env_var(connection=connection, secret=secret), check_none=True) config_map = connection.get_config_map() if 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) args = get_repo_context_args( name=connection.name, url=connection.schema.url, revision=connection.schema.revision, mount_path=mount_path, connection=connection.name if track else None, ) return patch_container( container=container, name=generate_container_name(INIT_GIT_CONTAINER_PREFIX, connection.name), image=polyaxon_init.get_image(), image_pull_policy=polyaxon_init.image_pull_policy, command=["polyaxon", "initializer", "git"], args=args, env=env, env_from=env_from, volume_mounts=volume_mounts, resources=polyaxon_init.get_resources(), )