def test_event_logger_from_non_manged_run(self): settings.CLIENT_CONFIG.is_managed = False run = Run(project="owner-test.test") assert run.get_artifacts_path() == TEMP_RUN_ARTIFACTS assert run.get_outputs_path() == TEMP_RUN_ARTIFACTS assert run._event_logger is None # Add run id run = Run(project="owner-test.test", run_uuid="uuid") assert run.get_artifacts_path() == TEMP_RUN_ARTIFACTS assert run.get_outputs_path() == TEMP_RUN_ARTIFACTS assert run._event_logger is None run.set_artifacts_path() assert run.get_artifacts_path() == CONTEXT_MOUNT_ARTIFACTS_FORMAT.format("uuid") assert run.get_outputs_path() == CONTEXT_MOUNT_RUN_OUTPUTS_FORMAT.format("uuid") with patch("polyaxon.tracking.run.EventFileWriter") as mock_call: run.set_run_event_logger() assert mock_call.call_count == 1 with patch("polyaxon.tracking.run.ResourceFileWriter") as mock_call: run.set_run_resource_logger() assert mock_call.call_count == 1 settings.CLIENT_CONFIG.is_managed = True with patch("polyaxon.tracking.run.EventFileWriter") as event_call: with patch("polyaxon.tracking.run.ResourceFileWriter") as resource_call: run = Run(project="owner-test.test", run_uuid="uuid") assert event_call.call_count == 1 assert resource_call.call_count == 1 assert run.get_artifacts_path() == CONTEXT_MOUNT_ARTIFACTS_FORMAT.format("uuid") assert run.get_outputs_path() == CONTEXT_MOUNT_RUN_OUTPUTS_FORMAT.format("uuid")
def test_get_file_init_container(self): file_args = V1FileType(content="test") container = get_file_init_container( polyaxon_init=V1PolyaxonInitContainer(image="foo", image_tag=""), contexts=PluginsContextsSpec.from_config(V1Plugins(auth=True)), file_args=V1FileType(content="test"), run_path="test", run_instance="foo.bar.runs.uuid", ) assert INIT_FILE_CONTAINER_PREFIX in container.name assert container.image == "foo" assert container.image_pull_policy is None assert container.command == ["polyaxon", "initializer", "file"] assert container.resources == get_init_resources() assert container.volume_mounts == [ get_connections_context_mount( name=constants.CONTEXT_VOLUME_ARTIFACTS, mount_path=CONTEXT_MOUNT_ARTIFACTS, ), get_auth_context_mount(read_only=True), ] assert file_args.to_dict(dump=True) == '{"content":"test"}' assert container.args == [ "--file-context={}".format('{"content":"test","filename":"file"}'), "--filepath={}".format(CONTEXT_MOUNT_ARTIFACTS), "--copy-path={}".format( CONTEXT_MOUNT_RUN_OUTPUTS_FORMAT.format("test")), "--track", ] file_args = V1FileType(filename="test", content="test") container = get_file_init_container( polyaxon_init=V1PolyaxonInitContainer( image="init/init", image_tag="", image_pull_policy="IfNotPresent"), contexts=PluginsContextsSpec.from_config(V1Plugins(auth=True)), file_args=file_args, run_path="test", run_instance="foo.bar.runs.uuid", ) assert INIT_FILE_CONTAINER_PREFIX in container.name assert container.image == "init/init" assert container.image_pull_policy == "IfNotPresent" assert container.command == ["polyaxon", "initializer", "file"] assert container.args == [ "--file-context={}".format(file_args.to_dict(dump=True)), "--filepath={}".format(CONTEXT_MOUNT_ARTIFACTS), "--copy-path={}".format( CONTEXT_MOUNT_RUN_OUTPUTS_FORMAT.format("test")), "--track", ] assert container.resources == get_init_resources() assert container.volume_mounts == [ get_connections_context_mount( name=constants.CONTEXT_VOLUME_ARTIFACTS, mount_path=CONTEXT_MOUNT_ARTIFACTS, ), get_auth_context_mount(read_only=True), ]
def test_event_logger_from_a_managed_run(self): # Set managed flag settings.CLIENT_CONFIG.is_managed = True os.environ[POLYAXON_KEYS_RUN_INSTANCE] = "user.project_bar.runs.uid" run = Run() assert run.get_artifacts_path() == CONTEXT_MOUNT_ARTIFACTS_FORMAT.format("uid") assert run.get_outputs_path() == CONTEXT_MOUNT_RUN_OUTPUTS_FORMAT.format("uid") assert run._event_logger is None # Set collect flag os.environ[POLYAXON_KEYS_COLLECT_ARTIFACTS] = "true" os.environ[POLYAXON_KEYS_COLLECT_RESOURCES] = "true" # Add run id with patch("polyaxon.tracking.run.Run.set_run_event_logger") as event_call: with patch( "polyaxon.tracking.run.Run.set_run_resource_logger" ) as resource_call: Run(project="test.test", run_uuid="uuid") assert event_call.call_count == 1 assert resource_call.call_count == 1 # Set run info os.environ[POLYAXON_KEYS_RUN_INSTANCE] = "user.project_bar.runs.uid" # Add run id with patch("polyaxon.tracking.run.Run.set_run_event_logger") as event_call: with patch( "polyaxon.tracking.run.Run.set_run_resource_logger" ) as resource_call: Run() assert event_call.call_count == 1 assert resource_call.call_count == 1
def set_artifacts_path(self, artifacts_path: str = None): _artifacts_path = artifacts_path or CONTEXT_MOUNT_ARTIFACTS_FORMAT.format( self.run_uuid ) if artifacts_path: _outputs_path = "{}/outputs".format(artifacts_path) else: _outputs_path = CONTEXT_MOUNT_RUN_OUTPUTS_FORMAT.format(self.run_uuid) self._artifacts_path = _artifacts_path self._outputs_path = _outputs_path
def get_dockerfile_init_container( polyaxon_init: V1PolyaxonInitContainer, dockerfile_args: V1DockerfileType, contexts: PluginsContextsSpec, run_path: str, run_instance: str, env: List[k8s_schemas.V1EnvVar] = None, mount_path: Optional[str] = None, ) -> k8s_schemas.V1Container: env = to_list(env, check_none=True) env = env + [get_run_instance_env_var(run_instance)] 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)) return k8s_schemas.V1Container( name=generate_container_name(INIT_DOCKERFILE_CONTAINER_PREFIX), image=polyaxon_init.get_image(), image_pull_policy=polyaxon_init.image_pull_policy, command=["polyaxon", "docker", "generate"], args=[ "--build-context={}".format(dockerfile_args.to_dict(dump=True)), "--destination={}".format(mount_path), "--copy-path={}".format(CONTEXT_MOUNT_RUN_OUTPUTS_FORMAT.format(run_path)), "--track", ], env=env, resources=polyaxon_init.get_resources(), volume_mounts=volume_mounts, )
def set_run_event_path(self): self._artifacts_path = CONTEXT_MOUNT_ARTIFACTS_FORMAT.format(self.run_uuid) self._outputs_path = CONTEXT_MOUNT_RUN_OUTPUTS_FORMAT.format(self.run_uuid)
def test_get_dockerfile_init_container(self): dockerfile_args = V1DockerfileType(image="test/test") container = get_dockerfile_init_container( polyaxon_init=V1PolyaxonInitContainer(image="foo", image_tag=""), dockerfile_args=dockerfile_args, env=None, contexts=PluginsContextsSpec.from_config(V1Plugins(auth=True)), run_path="test", run_instance="foo.bar.runs.uuid", ) assert INIT_DOCKERFILE_CONTAINER_PREFIX in container.name assert container.image == "foo" assert container.image_pull_policy is None assert container.command == ["polyaxon", "docker", "generate"] assert container.args == [ "--build-context={}".format(dockerfile_args.to_dict(dump=True)), "--destination={}".format(CONTEXT_MOUNT_ARTIFACTS), "--copy-path={}".format( CONTEXT_MOUNT_RUN_OUTPUTS_FORMAT.format("test")), "--track", ] assert container.env == [ get_run_instance_env_var(run_instance="foo.bar.runs.uuid") ] assert container.resources == get_init_resources() assert container.volume_mounts == [ get_connections_context_mount( name=constants.CONTEXT_VOLUME_ARTIFACTS, mount_path=CONTEXT_MOUNT_ARTIFACTS, ), get_auth_context_mount(read_only=True), ] dockerfile_args = V1DockerfileType( image="test/test", lang_env="LANG", run=["step1", "step2"], env=[["key1", "val1"], ["key2", "val2"]], uid=2222, gid=2222, ) container = get_dockerfile_init_container( polyaxon_init=V1PolyaxonInitContainer( image="init/init", image_tag="", image_pull_policy="IfNotPresent"), env=[], dockerfile_args=dockerfile_args, mount_path="/somepath", contexts=PluginsContextsSpec.from_config(V1Plugins(auth=True)), run_path="test", run_instance="foo.bar.runs.uuid", ) assert INIT_DOCKERFILE_CONTAINER_PREFIX in container.name assert container.image == "init/init" assert container.image_pull_policy == "IfNotPresent" assert container.command == ["polyaxon", "docker", "generate"] assert container.args == [ "--build-context={}".format(dockerfile_args.to_dict(dump=True)), "--destination=/somepath", "--copy-path={}".format( CONTEXT_MOUNT_RUN_OUTPUTS_FORMAT.format("test")), "--track", ] assert container.env == [ get_run_instance_env_var(run_instance="foo.bar.runs.uuid") ] assert container.resources == get_init_resources() assert container.volume_mounts == [ get_connections_context_mount(name=get_volume_name("/somepath"), mount_path="/somepath"), get_auth_context_mount(read_only=True), ]