예제 #1
0
 def start_manager(self):
     if TEST_ENV in ["boot2docker", "boot2docker-local"]:
         self.job_manager = RemoteDockerJobManager([{
             "remote_host": "192.168.59.103",
             "remote_docker_port": 2375,
             "remote_agent_port": 63456
         }], {"default": "ingi/inginious-c-default"}, "./tasks", self.course_factory, self.task_factory, is_testing=True)
     elif TEST_ENV == "jenkins":
         self.job_manager = RemoteDockerJobManager([{
             "remote_host": "localhost",
             "remote_docker_port": 2375,
             "remote_agent_port": 63456
         }], {"default": "ingi/inginious-c-default"}, "./tasks", self.course_factory, self.task_factory, is_testing=True)
     self.job_manager.start()
예제 #2
0
def create_job_manager(configuration,
                       plugin_manager,
                       task_directory,
                       course_factory,
                       task_factory,
                       is_testing=False):
    """ Creates a new inginious.backend job manager from the configuration """

    # Create the job manager
    backend_type = configuration.get("backend", "local")
    if backend_type == "local":
        return LocalJobManager(
            configuration.get(
                'containers', {
                    "default": "ingi/inginious-c-default",
                    "sekexe": "ingi/inginious-c-sekexe"
                }), task_directory, course_factory, task_factory,
            configuration.get('local_agent_tmp_dir', "/tmp/inginious_agent"),
            plugin_manager, is_testing)
    elif backend_type == "remote":
        return RemoteDockerJobManager(
            configuration.get("docker_daemons", []),
            configuration.get(
                'containers', {
                    "default": "ingi/inginious-c-default",
                    "sekexe": "ingi/inginious-c-sekexe"
                }), task_directory, course_factory, task_factory,
            plugin_manager, is_testing)
    elif backend_type == "remote_manual":
        return RemoteManualAgentJobManager(
            configuration.get("agents", [{
                "host": "localhost",
                "port": 5001
            }]),
            configuration.get(
                'containers', {
                    "default": "ingi/inginious-c-default",
                    "sekexe": "ingi/inginious-c-sekexe"
                }), task_directory, course_factory, task_factory,
            plugin_manager, is_testing)
    elif backend_type == "docker_machine":
        return DockerMachineJobManager(
            configuration.get("machines", []),
            configuration.get(
                'containers', {
                    "default": "ingi/inginious-c-default",
                    "sekexe": "ingi/inginious-c-sekexe"
                }), task_directory, course_factory, task_factory,
            plugin_manager, is_testing)
    else:
        raise Exception("Unknown inginious.backend {}".format(backend_type))
예제 #3
0
 def start_manager(self):
     if TEST_ENV in ["boot2docker", "boot2docker-local"]:
         self.job_manager = RemoteDockerJobManager(
             [{
                 "remote_host": "192.168.59.103",
                 "remote_docker_port": 2375,
                 "remote_agent_port": 63456
             }], {"default": "ingi/inginious-c-default"},
             "./tasks",
             self.course_factory,
             self.task_factory,
             is_testing=True)
     elif TEST_ENV == "jenkins":
         self.job_manager = RemoteDockerJobManager(
             [{
                 "remote_host": "localhost",
                 "remote_docker_port": 2375,
                 "remote_agent_port": 63456
             }], {"default": "ingi/inginious-c-default"},
             "./tasks",
             self.course_factory,
             self.task_factory,
             is_testing=True)
     self.job_manager.start()
예제 #4
0
class TestDockerJobManager(object):
    def setUp(self):

        if TEST_ENV is None:
            raise SkipTest("Testing the Docker Job Manager is disabled.")
        elif TEST_ENV in ["boot2docker", "boot2docker-local"]:
            self.docker_connection = docker.Client(
                base_url="tcp://192.168.59.103:2375")
        elif TEST_ENV == "jenkins":
            self.docker_connection = docker.Client(
                base_url="tcp://localhost:2375")
        else:
            raise Exception(
                "Unknown method for testing the Docker Job Manager!")

        # Force the removal of all containers/images linked to this test
        try:
            self.docker_connection.remove_container("inginious-agent",
                                                    force=True)
        except:
            pass

        try:
            self.docker_connection.remove_image("ingi/inginious-agent",
                                                force=True)
        except:
            pass

        self.course_factory, self.task_factory = create_factories("./tasks")

        self.setUpDocker()
        self.job_manager = None
        self.setUpJobManager()

    def setUpDocker(self):
        pass

    def setUpJobManager(self):
        pass

    def start_manager(self):
        if TEST_ENV in ["boot2docker", "boot2docker-local"]:
            self.job_manager = RemoteDockerJobManager(
                [{
                    "remote_host": "192.168.59.103",
                    "remote_docker_port": 2375,
                    "remote_agent_port": 63456
                }], {"default": "ingi/inginious-c-default"},
                "./tasks",
                self.course_factory,
                self.task_factory,
                is_testing=True)
        elif TEST_ENV == "jenkins":
            self.job_manager = RemoteDockerJobManager(
                [{
                    "remote_host": "localhost",
                    "remote_docker_port": 2375,
                    "remote_agent_port": 63456
                }], {"default": "ingi/inginious-c-default"},
                "./tasks",
                self.course_factory,
                self.task_factory,
                is_testing=True)
        self.job_manager.start()

    def build_fake_agent(self, dockerfile="FakeAgentDockerfile"):
        dockerfile_dir = os.path.abspath(
            os.path.join(os.path.dirname(os.path.realpath(__file__)),
                         "utils/"))
        print[
            line for line in self.docker_connection.build(
                dockerfile_dir,
                dockerfile=dockerfile,
                rm=True,
                tag="ingi/inginious-agent")
        ]

    def start_fake_agent(self):
        response = self.docker_connection.create_container(
            "ingi/inginious-agent", detach=True, name="inginious-agent")
        container_id = response["Id"]

        # Start the container
        self.docker_connection.start(container_id)

    def tearDown(self):
        # sanitize a bit Docker...
        if self.job_manager is not None:
            self.job_manager.close()

        try:
            self.docker_connection.remove_container("inginious-agent",
                                                    force=True)
        except:
            pass

        try:
            self.docker_connection.remove_image("ingi/inginious-agent",
                                                force=True)
        except:
            pass
예제 #5
0
 def test_invalid_agent_already_started(self):
     assert RemoteDockerJobManager.is_agent_valid_and_started(
         self.docker_connection, "inginious-agent") is False
예제 #6
0
 def test_agent_no_image(self):
     assert RemoteDockerJobManager.is_agent_image_update_needed(
         self.docker_connection) is True
예제 #7
0
class TestDockerJobManager(object):
    def setUp(self):

        if TEST_ENV is None:
            raise SkipTest("Testing the Docker Job Manager is disabled.")
        elif TEST_ENV in ["boot2docker", "boot2docker-local"]:
            self.docker_connection = docker.Client(base_url="tcp://192.168.59.103:2375")
        elif TEST_ENV == "jenkins":
            self.docker_connection = docker.Client(base_url="tcp://localhost:2375")
        else:
            raise Exception("Unknown method for testing the Docker Job Manager!")

        # Force the removal of all containers/images linked to this test
        try:
            self.docker_connection.remove_container("inginious-agent", force=True)
        except:
            pass

        try:
            self.docker_connection.remove_image("ingi/inginious-agent", force=True)
        except:
            pass

        self.course_factory, self.task_factory = create_factories("./tasks")

        self.setUpDocker()
        self.job_manager = None
        self.setUpJobManager()

    def setUpDocker(self):
        pass

    def setUpJobManager(self):
        pass

    def start_manager(self):
        if TEST_ENV in ["boot2docker", "boot2docker-local"]:
            self.job_manager = RemoteDockerJobManager([{
                "remote_host": "192.168.59.103",
                "remote_docker_port": 2375,
                "remote_agent_port": 63456
            }], {"default": "ingi/inginious-c-default"}, "./tasks", self.course_factory, self.task_factory, is_testing=True)
        elif TEST_ENV == "jenkins":
            self.job_manager = RemoteDockerJobManager([{
                "remote_host": "localhost",
                "remote_docker_port": 2375,
                "remote_agent_port": 63456
            }], {"default": "ingi/inginious-c-default"}, "./tasks", self.course_factory, self.task_factory, is_testing=True)
        self.job_manager.start()

    def build_fake_agent(self, dockerfile="FakeAgentDockerfile"):
        dockerfile_dir = os.path.abspath(os.path.join(os.path.dirname(os.path.realpath(__file__)), "utils/"))
        print [line for line in self.docker_connection.build(dockerfile_dir, dockerfile=dockerfile, rm=True, tag="ingi/inginious-agent")]

    def start_fake_agent(self):
        response = self.docker_connection.create_container(
            "ingi/inginious-agent",
            detach=True,
            name="inginious-agent"
        )
        container_id = response["Id"]

        # Start the container
        self.docker_connection.start(container_id)

    def tearDown(self):
        # sanitize a bit Docker...
        if self.job_manager is not None:
            self.job_manager.close()

        try:
            self.docker_connection.remove_container("inginious-agent", force=True)
        except:
            pass

        try:
            self.docker_connection.remove_image("ingi/inginious-agent", force=True)
        except:
            pass
예제 #8
0
 def test_invalid_agent_already_started(self):
     assert RemoteDockerJobManager.is_agent_valid_and_started(self.docker_connection, "inginious-agent") is False
예제 #9
0
 def test_agent_no_image(self):
     assert RemoteDockerJobManager.is_agent_image_update_needed(self.docker_connection) is True