Example #1
0
 def __init__(self, parameters, job_id):
     super().__init__(parameters, job_id)
     self.system_timeout = Timeout('system', LAVA_LXC_TIMEOUT)
     self.persistence = parameters['protocols'][self.name].get('persist',
                                                               False)
     if self.persistence:
         self.lxc_name = parameters['protocols'][self.name]['name']
     else:
         self.lxc_name = '-'.join(
             [parameters['protocols'][self.name]['name'], str(job_id)])
     self.lxc_dist = parameters['protocols'][self.name]['distribution']
     self.lxc_release = parameters['protocols'][self.name]['release']
     self.lxc_arch = parameters['protocols'][self.name].get('arch')
     self.lxc_template = parameters['protocols'][self.name].get(
         'template', 'download')
     self.lxc_mirror = parameters['protocols'][self.name].get('mirror',
                                                              None)
     self.lxc_security_mirror = parameters['protocols'][self.name].get(
         'security_mirror')
     self.verbose = parameters['protocols'][self.name].get('verbose', False)
     self.fastboot_reboot = parameters.get('reboot_to_fastboot', True)
     self.custom_lxc_path = False
     if LXC_PATH != lxc_path(parameters['dispatcher']):
         self.custom_lxc_path = True
     self.logger = logging.getLogger('dispatcher')
     self.job_prefix = parameters["dispatcher"].get("prefix", "")
Example #2
0
 def __init__(self, parameters, job_id):
     super().__init__(parameters, job_id)
     self.system_timeout = Timeout("system", LAVA_LXC_TIMEOUT)
     self.persistence = parameters["protocols"][self.name].get(
         "persist", False)
     if self.persistence:
         self.lxc_name = parameters["protocols"][self.name]["name"]
     else:
         self.lxc_name = "-".join(
             [parameters["protocols"][self.name]["name"],
              str(job_id)])
     self.lxc_dist = parameters["protocols"][self.name]["distribution"]
     self.lxc_release = parameters["protocols"][self.name]["release"]
     self.lxc_arch = parameters["protocols"][self.name].get("arch")
     self.lxc_template = parameters["protocols"][self.name].get(
         "template", "download")
     self.lxc_mirror = parameters["protocols"][self.name].get(
         "mirror", None)
     self.lxc_security_mirror = parameters["protocols"][self.name].get(
         "security_mirror")
     self.verbose = parameters["protocols"][self.name].get("verbose", False)
     self.fastboot_reboot = parameters.get("reboot_to_fastboot", True)
     self.custom_lxc_path = False
     if LXC_PATH != lxc_path(parameters["dispatcher"]):
         self.custom_lxc_path = True
     self.logger = logging.getLogger("dispatcher")
     self.job_prefix = parameters["dispatcher"].get("prefix", "")
Example #3
0
    def run(self, connection, max_end_time, args=None):
        connection = super(ApplyLxcOverlay, self).run(connection, max_end_time, args)
        overlay_file = self.get_namespace_data(action='compress-overlay', label='output', key='file')
        if overlay_file is None:
            self.logger.debug("skipped %s", self.name)
            return connection
        lxc_name = self.get_namespace_data(
            action='lxc-create-action',
            label='lxc', key='name')
        lxc_default_path = lxc_path(self.job.parameters['dispatcher'])
        lxc_rootfs_path = os.path.join(lxc_default_path, lxc_name, 'rootfs')
        if not os.path.exists(lxc_rootfs_path):
            raise LAVABug("Lxc container rootfs not found")
        tar_cmd = ['tar', '--warning', 'no-timestamp', '-C', lxc_rootfs_path,
                   '-xaf', overlay_file]
        command_output = self.run_command(tar_cmd)
        if command_output and command_output is not '':
            raise JobError("Unable to untar overlay: %s" %
                           command_output)

        # FIXME: Avoid copying this special 'lava-test-runner' which does not
        #        have 'sync' in cleanup. This should be handled during the
        #        creation of the overlay instead. Make a special case to copy
        #        lxc specific scripts, with distro specific versions.
        fname = os.path.join(self.lava_test_dir, 'lava-test-runner')
        output_file = '%s/bin/%s' % (lxc_rootfs_path, os.path.basename(fname))
        self.logger.debug("Copying %s", output_file)
        try:
            shutil.copy(fname, output_file)
        except IOError:
            raise InfrastructureError("Unable to copy: %s" % output_file)

        return connection
Example #4
0
 def __init__(self, parameters, job_id):
     super(LxcProtocol, self).__init__(parameters, job_id)
     self.system_timeout = Timeout('system', LAVA_LXC_TIMEOUT)
     self.persistence = parameters['protocols'][self.name].get('persist',
                                                               False)
     if self.persistence:
         self.lxc_name = parameters['protocols'][self.name]['name']
     else:
         self.lxc_name = '-'.join(
             [parameters['protocols'][self.name]['name'], str(job_id)])
     self.lxc_dist = parameters['protocols'][self.name]['distribution']
     self.lxc_release = parameters['protocols'][self.name]['release']
     self.lxc_arch = parameters['protocols'][self.name].get('arch', None)
     self.lxc_template = parameters['protocols'][self.name].get(
         'template', 'download')
     self.lxc_mirror = parameters['protocols'][self.name].get('mirror',
                                                              None)
     self.lxc_security_mirror = parameters['protocols'][self.name].get(
         'security_mirror', None)
     self.verbose = parameters['protocols'][self.name].get('verbose', False)
     self.fastboot_reboot = parameters.get('reboot_to_fastboot', True)
     self.custom_lxc_path = False
     if LXC_PATH != lxc_path(parameters['dispatcher']):
         self.custom_lxc_path = True
     self.logger = logging.getLogger('dispatcher')
Example #5
0
 def run(self, connection, max_end_time):
     connection = super().run(connection, max_end_time)
     verbose = '' if self.lxc_data['verbose'] else '-q'
     lxc_default_path = lxc_path(self.job.parameters['dispatcher'])
     if self.lxc_data['custom_lxc_path']:
         lxc_create = ['lxc-create', '-P', lxc_default_path]
     else:
         lxc_create = ['lxc-create']
     if self.lxc_data['lxc_template'] in LXC_TEMPLATE_WITH_MIRROR:
         lxc_cmd = lxc_create + [
             verbose, '-t', self.lxc_data['lxc_template'], '-n',
             self.lxc_data['lxc_name'], '--', '--release',
             self.lxc_data['lxc_release']
         ]
         if self.lxc_data['lxc_mirror']:
             lxc_cmd += ['--mirror', self.lxc_data['lxc_mirror']]
         if self.lxc_data['lxc_security_mirror']:
             lxc_cmd += [
                 '--security-mirror', self.lxc_data['lxc_security_mirror']
             ]
         # FIXME: Should be removed when LAVA's supported distro is bumped
         #        to Debian Stretch or any distro that supports systemd
         lxc_cmd += ['--packages', LXC_DEFAULT_PACKAGES]
     else:
         lxc_cmd = lxc_create + [
             verbose, '-t', self.lxc_data['lxc_template'], '-n',
             self.lxc_data['lxc_name'], '--', '--dist',
             self.lxc_data['lxc_distribution'], '--release',
             self.lxc_data['lxc_release']
         ]
     if self.lxc_data['lxc_arch']:
         lxc_cmd += ['--arch', self.lxc_data['lxc_arch']]
     # FIXME: check if persistent name already exists and then drop allow_fail & allow_silent
     cmd_out = self.run_command(lxc_cmd, allow_fail=True, allow_silent=True)
     if isinstance(cmd_out, str):
         if 'exists' in cmd_out and self.lxc_data['lxc_persist']:
             self.logger.debug('Persistant container exists')
             self.results = {'status': self.lxc_data['lxc_name']}
     elif not cmd_out:
         raise JobError("Unable to create lxc container")
     else:
         self.logger.debug('Container created successfully')
         self.results = {'status': self.lxc_data['lxc_name']}
     # Create symlink in default container path ie., /var/lib/lxc defined by
     # LXC_PATH so that we need not add '-P' option to every lxc-* command.
     dst = os.path.join(LXC_PATH, self.lxc_data['lxc_name'])
     if self.lxc_data['custom_lxc_path'] and not os.path.exists(dst):
         os.symlink(
             os.path.join(lxc_default_path, self.lxc_data['lxc_name']),
             os.path.join(LXC_PATH, self.lxc_data['lxc_name']))
     return connection
Example #6
0
 def run(self, connection, max_end_time, args=None):
     connection = super(LxcCreateAction, self).run(connection, max_end_time, args)
     verbose = '' if self.lxc_data['verbose'] else '-q'
     lxc_default_path = lxc_path(self.job.parameters['dispatcher'])
     if self.lxc_data['custom_lxc_path']:
         lxc_create = ['lxc-create', '-P', lxc_default_path]
     else:
         lxc_create = ['lxc-create']
     if self.lxc_data['lxc_template'] in LXC_TEMPLATE_WITH_MIRROR:
         lxc_cmd = lxc_create + [verbose, '-t',
                                 self.lxc_data['lxc_template'], '-n',
                                 self.lxc_data['lxc_name'], '--',
                                 '--release', self.lxc_data['lxc_release']]
         if self.lxc_data['lxc_mirror']:
             lxc_cmd += ['--mirror', self.lxc_data['lxc_mirror']]
         if self.lxc_data['lxc_security_mirror']:
             lxc_cmd += ['--security-mirror',
                         self.lxc_data['lxc_security_mirror']]
         # FIXME: Should be removed when LAVA's supported distro is bumped
         #        to Debian Stretch or any distro that supports systemd
         lxc_cmd += ['--packages', LXC_DEFAULT_PACKAGES]
     else:
         lxc_cmd = lxc_create + [verbose, '-t',
                                 self.lxc_data['lxc_template'], '-n',
                                 self.lxc_data['lxc_name'], '--', '--dist',
                                 self.lxc_data['lxc_distribution'],
                                 '--release', self.lxc_data['lxc_release']]
     if self.lxc_data['lxc_arch']:
         lxc_cmd += ['--arch', self.lxc_data['lxc_arch']]
     cmd_out = self.run_command(lxc_cmd, allow_fail=True, allow_silent=True)
     if isinstance(cmd_out, str):
         if 'exists' in cmd_out and self.lxc_data['lxc_persist']:
             self.logger.debug('Persistant container exists')
             self.results = {'status': self.lxc_data['lxc_name']}
     elif not cmd_out:
         raise JobError("Unable to create lxc container")
     else:
         self.logger.debug('Container created successfully')
         self.results = {'status': self.lxc_data['lxc_name']}
     # Create symlink in default container path ie., /var/lib/lxc defined by
     # LXC_PATH so that we need not add '-P' option to every lxc-* command.
     dst = os.path.join(LXC_PATH, self.lxc_data['lxc_name'])
     if self.lxc_data['custom_lxc_path'] and not os.path.exists(dst):
         os.symlink(os.path.join(lxc_default_path,
                                 self.lxc_data['lxc_name']),
                    os.path.join(LXC_PATH,
                                 self.lxc_data['lxc_name']))
     return connection
Example #7
0
    def run(self, connection, max_end_time):
        connection = super().run(connection, max_end_time)
        overlay_file = self.get_namespace_data(action="compress-overlay",
                                               label="output",
                                               key="file")
        if overlay_file is None:
            self.logger.debug("skipped %s", self.name)
            return connection
        lxc_name = self.get_namespace_data(action="lxc-create-action",
                                           label="lxc",
                                           key="name")
        lxc_default_path = lxc_path(self.job.parameters["dispatcher"])
        lxc_rootfs_path = os.path.join(lxc_default_path, lxc_name, "rootfs")
        if not os.path.exists(lxc_rootfs_path):
            raise LAVABug("Lxc container rootfs not found")
        tar_cmd = [
            "tar",
            "--warning",
            "no-timestamp",
            "-C",
            lxc_rootfs_path,
            "-xaf",
            overlay_file,
        ]
        command_output = self.run_command(tar_cmd)
        if command_output and command_output != "":
            raise JobError("Unable to untar overlay: %s" % command_output)

        # FIXME: Avoid copying this special 'lava-test-runner' which does not
        #        have 'sync' in cleanup. This should be handled during the
        #        creation of the overlay instead. Make a special case to copy
        #        lxc specific scripts, with distro specific versions.
        fname = os.path.join(self.lava_test_dir, "lava-test-runner")
        output_file = "%s/bin/%s" % (lxc_rootfs_path, os.path.basename(fname))
        self.logger.debug("Copying %s", output_file)
        try:
            shutil.copy(fname, output_file)
        except OSError:
            raise InfrastructureError("Unable to copy: %s" % output_file)

        return connection
Example #8
0
    def run(self, connection, max_end_time, args=None):
        connection = super(ApplyLxcOverlay, self).run(connection, max_end_time,
                                                      args)
        overlay_file = self.get_namespace_data(action='compress-overlay',
                                               label='output',
                                               key='file')
        if overlay_file is None:
            self.logger.debug("skipped %s", self.name)
            return connection
        lxc_name = self.get_namespace_data(action='lxc-create-action',
                                           label='lxc',
                                           key='name')
        lxc_default_path = lxc_path(self.job.parameters['dispatcher'])
        lxc_rootfs_path = os.path.join(lxc_default_path, lxc_name, 'rootfs')
        if not os.path.exists(lxc_rootfs_path):
            raise LAVABug("Lxc container rootfs not found")
        tar_cmd = [
            'tar', '--warning', 'no-timestamp', '-C', lxc_rootfs_path, '-xaf',
            overlay_file
        ]
        command_output = self.run_command(tar_cmd)
        if command_output and command_output is not '':
            raise JobError("Unable to untar overlay: %s" % command_output)

        # FIXME: Avoid copying this special 'lava-test-runner' which does not
        #        have 'sync' in cleanup. This should be handled during the
        #        creation of the overlay instead. Make a special case to copy
        #        lxc specific scripts, with distro specific versions.
        fname = os.path.join(self.lava_test_dir, 'lava-test-runner')
        output_file = '%s/bin/%s' % (lxc_rootfs_path, os.path.basename(fname))
        self.logger.debug("Copying %s", output_file)
        try:
            shutil.copy(fname, output_file)
        except IOError:
            raise InfrastructureError("Unable to copy: %s" % output_file)

        return connection
Example #9
0
File: lxc.py Project: jubing13/lava
    def run(self, connection, max_end_time):
        connection = super().run(connection, max_end_time)
        verbose = "" if self.lxc_data["verbose"] else "-q"
        lxc_default_path = lxc_path(self.job.parameters["dispatcher"])
        if self.lxc_data["custom_lxc_path"]:
            lxc_create = ["lxc-create", "-P", lxc_default_path]
        else:
            lxc_create = ["lxc-create"]
        if self.lxc_data["lxc_template"] in LXC_TEMPLATE_WITH_MIRROR:
            lxc_cmd = lxc_create + [
                verbose,
                "-t",
                self.lxc_data["lxc_template"],
                "-n",
                self.lxc_data["lxc_name"],
                "--",
                "--release",
                self.lxc_data["lxc_release"],
            ]
            if self.lxc_data["lxc_mirror"]:
                lxc_cmd += ["--mirror", self.lxc_data["lxc_mirror"]]
            if self.lxc_data["lxc_security_mirror"]:
                lxc_cmd += [
                    "--security-mirror", self.lxc_data["lxc_security_mirror"]
                ]
            # FIXME: Should be removed when LAVA's supported distro is bumped
            #        to Debian Stretch or any distro that supports systemd
            lxc_cmd += ["--packages", LXC_DEFAULT_PACKAGES]
        else:
            lxc_cmd = lxc_create + [
                verbose,
                "-t",
                self.lxc_data["lxc_template"],
                "-n",
                self.lxc_data["lxc_name"],
                "--",
                "--dist",
                self.lxc_data["lxc_distribution"],
                "--release",
                self.lxc_data["lxc_release"],
            ]
        if self.lxc_data["lxc_arch"]:
            lxc_cmd += ["--arch", self.lxc_data["lxc_arch"]]

        # Check if the container already exists. If this is a persistent that's
        # ok, otherwise, raise an error.
        if not self.run_cmd(["lxc-info", "-n", self.lxc_data["lxc_name"]],
                            allow_fail=True):
            if not self.lxc_data["lxc_persist"]:
                raise InfrastructureError("lxc container %r already exists" %
                                          self.lxc_data["lxc_name"])
            self.logger.debug("Persistent container exists")
        else:
            # The container does not exists, just create it
            self.run_cmd(lxc_cmd, error_msg="Unable to create lxc container")
            self.logger.debug("Container created successfully")
        self.results = {"status": self.lxc_data["lxc_name"]}

        # Create symlink in default container path ie., /var/lib/lxc defined by
        # LXC_PATH so that we need not add '-P' option to every lxc-* command.
        dst = os.path.join(LXC_PATH, self.lxc_data["lxc_name"])
        if self.lxc_data["custom_lxc_path"] and not os.path.exists(dst):
            os.symlink(
                os.path.join(lxc_default_path, self.lxc_data["lxc_name"]),
                os.path.join(LXC_PATH, self.lxc_data["lxc_name"]),
            )
        return connection
Example #10
0
 def run(self, connection, max_end_time):
     connection = super().run(connection, max_end_time)
     verbose = "" if self.lxc_data["verbose"] else "-q"
     lxc_default_path = lxc_path(self.job.parameters["dispatcher"])
     if self.lxc_data["custom_lxc_path"]:
         lxc_create = ["lxc-create", "-P", lxc_default_path]
     else:
         lxc_create = ["lxc-create"]
     if self.lxc_data["lxc_template"] in LXC_TEMPLATE_WITH_MIRROR:
         lxc_cmd = lxc_create + [
             verbose,
             "-t",
             self.lxc_data["lxc_template"],
             "-n",
             self.lxc_data["lxc_name"],
             "--",
             "--release",
             self.lxc_data["lxc_release"],
         ]
         if self.lxc_data["lxc_mirror"]:
             lxc_cmd += ["--mirror", self.lxc_data["lxc_mirror"]]
         if self.lxc_data["lxc_security_mirror"]:
             lxc_cmd += [
                 "--security-mirror", self.lxc_data["lxc_security_mirror"]
             ]
         # FIXME: Should be removed when LAVA's supported distro is bumped
         #        to Debian Stretch or any distro that supports systemd
         lxc_cmd += ["--packages", LXC_DEFAULT_PACKAGES]
     else:
         lxc_cmd = lxc_create + [
             verbose,
             "-t",
             self.lxc_data["lxc_template"],
             "-n",
             self.lxc_data["lxc_name"],
             "--",
             "--dist",
             self.lxc_data["lxc_distribution"],
             "--release",
             self.lxc_data["lxc_release"],
         ]
     if self.lxc_data["lxc_arch"]:
         lxc_cmd += ["--arch", self.lxc_data["lxc_arch"]]
     # FIXME: check if persistent name already exists and then drop allow_fail & allow_silent
     cmd_out = self.run_command(lxc_cmd, allow_fail=True, allow_silent=True)
     if isinstance(cmd_out, str):
         if "exists" in cmd_out and self.lxc_data["lxc_persist"]:
             self.logger.debug("Persistant container exists")
             self.results = {"status": self.lxc_data["lxc_name"]}
     elif not cmd_out:
         raise JobError("Unable to create lxc container")
     else:
         self.logger.debug("Container created successfully")
         self.results = {"status": self.lxc_data["lxc_name"]}
     # Create symlink in default container path ie., /var/lib/lxc defined by
     # LXC_PATH so that we need not add '-P' option to every lxc-* command.
     dst = os.path.join(LXC_PATH, self.lxc_data["lxc_name"])
     if self.lxc_data["custom_lxc_path"] and not os.path.exists(dst):
         os.symlink(
             os.path.join(lxc_default_path, self.lxc_data["lxc_name"]),
             os.path.join(LXC_PATH, self.lxc_data["lxc_name"]),
         )
     return connection