def test_get_init_containers_with_git_without_connection(self):
     git1 = V1GitConnection(revision="test", url="https://test.com")
     git2 = V1GitConnection(revision="test", url="https://test.com")
     containers = self.converter.get_init_containers(
         contexts=None,
         artifacts_store=None,
         init_connections=[
             V1Init(git=git1,
                    container=k8s_schemas.V1Container(name="test")),
             V1Init(git=git2, path="/test"),
         ],
         init_containers=[],
         connection_by_names={},
         polyaxon_init=V1PolyaxonInitContainer(image="foo/foo"),
     )
     assert containers == [
         get_git_init_container(
             connection=V1ConnectionType(name=git1.get_name(),
                                         kind=V1ConnectionKind.GIT,
                                         schema=git1),
             polyaxon_init=V1PolyaxonInitContainer(image="foo/foo"),
             env=self.converter.get_init_service_env_vars(),
             contexts=None,
         ),
         get_git_init_container(
             container=k8s_schemas.V1Container(name="test"),
             connection=V1ConnectionType(name=git2.get_name(),
                                         kind=V1ConnectionKind.GIT,
                                         schema=git1),
             mount_path="/test",
             polyaxon_init=V1PolyaxonInitContainer(image="foo/foo"),
             env=self.converter.get_init_service_env_vars(),
             contexts=None,
         ),
     ]
Beispiel #2
0
    def test_get_git_init_container_raises_for_missing_info(self):
        with self.assertRaises(PolypodException):
            get_git_init_container(polyaxon_init=V1PolyaxonInitContainer(),
                                   connection=None,
                                   contexts=None)

        with self.assertRaises(PolypodException):
            get_git_init_container(
                polyaxon_init=V1PolyaxonInitContainer(image="foo/test"),
                connection=None,
                mount_path=None,
                contexts=None,
            )
Beispiel #3
0
    def handle_init_connections(
        self,
        polyaxon_init: V1PolyaxonInitContainer,
        artifacts_store: V1ConnectionType,
        init_connections: List[V1Init],
        connection_by_names: Dict[str, V1ConnectionType],
        contexts: PluginsContextsSpec,
    ) -> List[k8s_schemas.V1Container]:
        containers = []
        external_host = contexts.external_host if contexts else False

        # Prepare connections that Polyaxon can init automatically
        for init_connection in init_connections:
            if init_connection.connection:
                connection_spec = connection_by_names.get(
                    init_connection.connection)
                # Handling ssh with git
                if (V1ConnectionKind.is_ssh(connection_spec.kind)
                        and init_connection.git):
                    connection_spec.schema.patch_git(init_connection.git)
                    containers.append(
                        get_git_init_container(
                            polyaxon_init=polyaxon_init,
                            connection=connection_spec,
                            container=init_connection.container,
                            env=self.get_init_service_env_vars(
                                external_host=external_host),
                            mount_path=init_connection.path,
                            contexts=contexts,
                            track=True,
                        ))
                elif V1ConnectionKind.is_git(connection_spec.kind):
                    if init_connection.git:  # Update the default schema
                        connection_spec.schema.patch(init_connection.git)
                    containers.append(
                        get_git_init_container(
                            polyaxon_init=polyaxon_init,
                            connection=connection_spec,
                            container=init_connection.container,
                            env=self.get_init_service_env_vars(
                                external_host=external_host),
                            mount_path=init_connection.path,
                            contexts=contexts,
                            track=True,
                        ))
                elif V1ConnectionKind.is_artifact(connection_spec.kind):
                    containers.append(
                        get_store_container(
                            polyaxon_init=polyaxon_init,
                            connection=connection_spec,
                            artifacts=init_connection.artifacts,
                            container=init_connection.container,
                            env=self.get_init_service_env_vars(
                                external_host=external_host),
                            mount_path=init_connection.path,
                            is_default_artifacts_store=artifacts_store and
                            init_connection.connection == artifacts_store.name,
                        ))
                else:
                    containers.append(
                        get_custom_init_container(
                            connection=connection_spec,
                            container=init_connection.container,
                            env=self.get_init_service_env_vars(
                                external_host=external_host),
                            mount_path=init_connection.path,
                            contexts=contexts,
                        ))
            else:
                # artifacts init without connection should default to the artifactsStore
                if init_connection.artifacts:
                    containers.append(
                        get_store_container(
                            polyaxon_init=polyaxon_init,
                            connection=artifacts_store,
                            artifacts=init_connection.artifacts,
                            container=init_connection.container,
                            env=self.get_init_service_env_vars(
                                external_host=external_host),
                            mount_path=init_connection.path,
                            is_default_artifacts_store=True,
                        ))
                # git init without connection
                if init_connection.git:
                    git_name = init_connection.git.get_name()
                    containers.append(
                        get_git_init_container(
                            polyaxon_init=polyaxon_init,
                            connection=V1ConnectionType(
                                name=git_name,
                                kind=V1ConnectionKind.GIT,
                                schema=init_connection.git,
                                secret=None,
                            ),
                            container=init_connection.container,
                            env=self.get_init_service_env_vars(
                                external_host=external_host),
                            mount_path=init_connection.path,
                            contexts=contexts,
                            track=False,
                        ))
                # Dockerfile initialization
                if init_connection.dockerfile:
                    containers.append(
                        get_dockerfile_init_container(
                            polyaxon_init=polyaxon_init,
                            dockerfile_args=init_connection.dockerfile,
                            env=self.get_init_service_env_vars(
                                external_host=external_host),
                            mount_path=init_connection.path,
                            contexts=contexts,
                            run_path=self.run_path,
                            run_instance=self.run_instance,
                        ))
                # File initialization
                if init_connection.file:
                    containers.append(
                        get_file_init_container(
                            polyaxon_init=polyaxon_init,
                            file_args=init_connection.file,
                            env=self.get_init_service_env_vars(
                                external_host=external_host),
                            mount_path=init_connection.path,
                            contexts=contexts,
                            run_path=self.run_path,
                            run_instance=self.run_instance,
                        ))

        return containers
Beispiel #4
0
    def test_get_git_init_container(self):
        connection = V1ConnectionType(
            name="user/foo",
            kind=V1ConnectionKind.GIT,
            schema=V1GitConnection(url="foo.com"),
        )
        container = get_git_init_container(
            polyaxon_init=V1PolyaxonInitContainer(image="foo", image_tag=""),
            connection=connection,
            contexts=PluginsContextsSpec.from_config(V1Plugins(auth=True)),
        )
        assert container.name == INIT_GIT_CONTAINER.format(connection.name)
        assert container.image == "foo"
        assert container.image_pull_policy is None
        assert container.command == ["polyaxon", "initializer", "git"]
        assert container.env == get_connection_env_var(connection=connection,
                                                       secret=None)
        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),
        ]

        container = get_git_init_container(
            polyaxon_init=V1PolyaxonInitContainer(
                image="init/init",
                image_tag="",
                image_pull_policy="IfNotPresent"),
            connection=connection,
            contexts=PluginsContextsSpec.from_config(V1Plugins(auth=True)),
        )
        assert container.name == INIT_GIT_CONTAINER.format(connection.name)
        assert container.image == "init/init"
        assert container.image_pull_policy == "IfNotPresent"
        assert container.command == ["polyaxon", "initializer", "git"]
        assert container.args == [
            "--repo_path={}/{}".format(CONTEXT_MOUNT_ARTIFACTS,
                                       connection.name),
            "--url={}".format(connection.schema.url),
        ]
        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),
        ]

        connection = V1ConnectionType(
            name="user/foo",
            kind=V1ConnectionKind.GIT,
            schema=V1GitConnection(
                url="foo.com",
                revision="00b9d2ea01c40f58d6b4051319f9375675a43c02"),
        )
        container = get_git_init_container(
            polyaxon_init=V1PolyaxonInitContainer(
                image="init/init",
                image_tag="",
                image_pull_policy="IfNotPresent"),
            connection=connection,
            mount_path="/somepath",
            contexts=PluginsContextsSpec.from_config(V1Plugins(auth=True)),
        )
        assert container.name == INIT_GIT_CONTAINER.format(connection.name)
        assert container.image == "init/init"
        assert container.image_pull_policy == "IfNotPresent"
        assert container.command == ["polyaxon", "initializer", "git"]
        assert container.args == [
            "--repo_path=/somepath/{}".format(connection.name),
            "--url={}".format(connection.schema.url),
            "--revision=00b9d2ea01c40f58d6b4051319f9375675a43c02",
        ]
        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),
        ]
Beispiel #5
0
    def handle_init_connections(
        self,
        polyaxon_init: V1PolyaxonInitContainer,
        init_connections: List[V1Init],
        connection_by_names: Dict[str, V1ConnectionType],
        contexts: PluginsContextsSpec,
    ) -> List[k8s_schemas.V1Container]:
        containers = []

        # Prepare connections that Polyaxon can inti automatically
        for init_connection in init_connections:
            if init_connection.connection:
                connection_spec = connection_by_names.get(
                    init_connection.connection)
                if init_connection.git:  # Update the default schema
                    connection_spec.schema.patch(init_connection.git)
                if connection_spec.kind == V1ConnectionKind.GIT:
                    containers.append(
                        get_git_init_container(
                            polyaxon_init=polyaxon_init,
                            connection=connection_spec,
                            container=init_connection.container,
                            env=self.get_init_service_env_vars(),
                            mount_path=init_connection.path,
                            contexts=contexts,
                            track=True,
                        ))
                if V1ConnectionKind.is_artifact(connection_spec.kind):
                    containers.append(
                        get_store_container(
                            polyaxon_init=polyaxon_init,
                            connection=connection_spec,
                            artifacts=init_connection.artifacts,
                            container=init_connection.container,
                            env=self.get_init_service_env_vars(),
                            mount_path=init_connection.path,
                        ))
            else:
                # git init without connection
                if init_connection.git:
                    git_name = init_connection.git.get_name()
                    containers.append(
                        get_git_init_container(
                            polyaxon_init=polyaxon_init,
                            connection=V1ConnectionType(
                                name=git_name,
                                kind=V1ConnectionKind.GIT,
                                schema=init_connection.git,
                                secret=None,
                            ),
                            container=init_connection.container,
                            env=self.get_init_service_env_vars(),
                            mount_path=init_connection.path,
                            contexts=contexts,
                            track=False,
                        ))
                # Dockerfile initialization
                if init_connection.dockerfile:
                    containers.append(
                        get_dockerfile_init_container(
                            polyaxon_init=polyaxon_init,
                            dockerfile_args=init_connection.dockerfile,
                            env=self.get_init_service_env_vars(),
                            mount_path=init_connection.path,
                            contexts=contexts,
                            run_path=self.run_path,
                        ))

        return containers