예제 #1
0
def test_get_supported_distro_boot_loaders():
    # Arrange

    # Act
    result = utils.get_supported_distro_boot_loaders(None)

    # Assert
    assert result == ["grub", "pxe", "yaboot", "ipxe"]
예제 #2
0
    def supported_boot_loaders(self):
        """
        Some distributions, particularly on powerpc, can only be netbooted using specific bootloaders.

        :return: The bootloaders which are available for being set.
        """
        if len(self._supported_boot_loaders) == 0:
            self._supported_boot_loaders = utils.get_supported_distro_boot_loaders(self)
        return self._supported_boot_loaders
예제 #3
0
 def supported_boot_loaders(self):
     """
     :return: The bootloaders which are available for being set.
     """
     try:
         # If we have already loaded the supported boot loaders from the signature, use that data
         return self._supported_boot_loaders
     except:
         # otherwise, refresh from the signatures / defaults
         self._supported_boot_loaders = utils.get_supported_distro_boot_loaders(self)
         return self._supported_boot_loaders
예제 #4
0
 def set_boot_loader(self, name):
     try:
         # If we have already loaded the supported boot loaders from
         # the signature, use that data
         supported_distro_boot_loaders = self.supported_boot_loaders
     except:
         # otherwise, refresh from the signatures / defaults
         self.supported_boot_loaders = utils.get_supported_distro_boot_loaders(self)
         supported_distro_boot_loaders = self.supported_boot_loaders
     if name not in supported_distro_boot_loaders:
         raise CX(_("Invalid boot loader name: %s. Supported boot loaders are: %s" % (name, ' '.join(supported_distro_boot_loaders))))
     self.boot_loader = name
예제 #5
0
 def set_boot_loader(self, name):
     try:
         # If we have already loaded the supported boot loaders from
         # the signature, use that data
         supported_distro_boot_loaders = self.supported_boot_loaders
     except:
         # otherwise, refresh from the signatures / defaults
         self.supported_boot_loaders = utils.get_supported_distro_boot_loaders(self)
         supported_distro_boot_loaders = self.supported_boot_loaders
     if name not in supported_distro_boot_loaders:
         raise CX(_("Invalid boot loader name: %s. Supported boot loaders are: %s" %
                    (name, ' '.join(supported_distro_boot_loaders))))
     self.boot_loader = name
예제 #6
0
    def supported_boot_loaders(self):
        """
        Read only property which represents the subset of settable bootloaders.

        :getter: The bootloaders which are available for being set.
        """
        try:
            # If we have already loaded the supported boot loaders from the signature, use that data
            return self._supported_boot_loaders
        except:
            # otherwise, refresh from the signatures / defaults
            self._supported_boot_loaders = utils.get_supported_distro_boot_loaders(self)
            return self._supported_boot_loaders
예제 #7
0
    def set_boot_loader(self, name):
        """
        Set the bootloader for the distro.

        :param name: The name of the bootloader. Must be one of the supported ones.
        """
        try:
            # If we have already loaded the supported boot loaders from
            # the signature, use that data
            supported_distro_boot_loaders = self.supported_boot_loaders
        except:
            # otherwise, refresh from the signatures / defaults
            self.supported_boot_loaders = utils.get_supported_distro_boot_loaders(
                self)
            supported_distro_boot_loaders = self.supported_boot_loaders
        if name not in supported_distro_boot_loaders:
            raise CX(
                "Invalid boot loader name: %s. Supported boot loaders are: %s"
                % (name, ' '.join(supported_distro_boot_loaders)))
        self.boot_loader = name
예제 #8
0
    def add_entry(self, dirname: str, kernel, initrd):
        """
        When we find a directory with a valid kernel/initrd in it, create the distribution objects as appropriate and
        save them. This includes creating xen and rescue distros/profiles if possible.

        :param dirname: Unkown what this currently does.
        :param kernel: Unkown what this currently does.
        :param initrd: Unkown what this currently does.
        :return: Unkown what this currently does.
        """

        # build a proposed name based on the directory structure
        proposed_name = self.get_proposed_name(dirname, kernel)

        # build a list of arches found in the packages directory
        archs = self.learn_arch_from_tree()
        if not archs and self.arch:
            archs.append(self.arch)
        else:
            if self.arch and self.arch not in archs:
                utils.die("Given arch (%s) not found on imported tree %s" %
                          (self.arch, self.path))

        if len(archs) == 0:
            self.logger.error(
                "No arch could be detected in %s, and none was specified via the --arch option"
                % dirname)
            return []
        elif len(archs) > 1:
            self.logger.warning("- Warning : Multiple archs found : %s" %
                                archs)

        distros_added = []
        for pxe_arch in archs:
            name = proposed_name + "-" + pxe_arch
            existing_distro = self.distros.find(name=name)

            if existing_distro is not None:
                self.logger.warning(
                    "skipping import, as distro name already exists: %s" %
                    name)
                continue
            else:
                self.logger.info("creating new distro: %s" % name)
                new_distro = distro.Distro(self.collection_mgr)

            if name.find("-autoboot") != -1:
                # this is an artifact of some EL-3 imports
                continue

            new_distro.set_name(name)
            new_distro.set_kernel(kernel)
            new_distro.set_initrd(initrd)
            new_distro.set_arch(pxe_arch)
            new_distro.set_breed(self.breed)
            new_distro.set_os_version(self.os_version)
            new_distro.set_kernel_options(
                self.signature.get("kernel_options", ""))
            new_distro.set_kernel_options_post(
                self.signature.get("kernel_options_post", ""))
            new_distro.set_template_files(
                self.signature.get("template_files", ""))
            supported_distro_boot_loaders = utils.get_supported_distro_boot_loaders(
                new_distro, self.api)
            new_distro.set_supported_boot_loaders(
                supported_distro_boot_loaders)
            new_distro.set_boot_loader(supported_distro_boot_loaders[0])

            boot_files = ''
            for boot_file in self.signature["boot_files"]:
                boot_files += '$local_img_path/%s=%s/%s ' % (
                    boot_file, self.path, boot_file)
            new_distro.set_boot_files(boot_files.strip())

            self.configure_tree_location(new_distro)

            self.distros.add(new_distro, save=True)
            distros_added.append(new_distro)

            # see if the profile name is already used, if so, skip it and
            # do not modify the existing profile

            existing_profile = self.profiles.find(name=name)

            if existing_profile is None:
                self.logger.info("creating new profile: %s" % name)
                new_profile = profile.Profile(self.collection_mgr)
            else:
                self.logger.info(
                    "skipping existing profile, name already exists: %s" %
                    name)
                continue

            new_profile.set_name(name)
            new_profile.set_distro(name)
            new_profile.set_autoinstall(self.autoinstall_file)

            # depending on the name of the profile we can
            # define a good virt-type for usage with koan
            if name.find("-xen") != -1:
                new_profile.set_virt_type("xenpv")
            elif name.find("vmware") != -1:
                new_profile.set_virt_type("vmware")
            else:
                new_profile.set_virt_type("kvm")

            self.profiles.add(new_profile, save=True)

        return distros_added
    def add_entry(self, dirname, kernel, initrd):
        """
        When we find a directory with a valid kernel/initrd in it, create the distribution objects
        as appropriate and save them.  This includes creating xen and rescue distros/profiles
        if possible.
        """

        # build a proposed name based on the directory structure
        proposed_name = self.get_proposed_name(dirname, kernel)

        # build a list of arches found in the packages directory
        archs = self.learn_arch_from_tree()
        if not archs and self.arch:
            archs.append(self.arch)
        else:
            if self.arch and self.arch not in archs:
                utils.die(self.logger, "Given arch (%s) not found on imported tree %s" % (self.arch, self.path))

        if len(archs) == 0:
            self.logger.error("No arch could be detected in %s, and none was specified via the --arch option" % dirname)
            return []
        elif len(archs) > 1:
            self.logger.warning("- Warning : Multiple archs found : %s" % (archs))

        distros_added = []
        for pxe_arch in archs:
            name = proposed_name + "-" + pxe_arch
            existing_distro = self.distros.find(name=name)

            if existing_distro is not None:
                self.logger.warning("skipping import, as distro name already exists: %s" % name)
                continue
            else:
                self.logger.info("creating new distro: %s" % name)
                distro = item_distro.Distro(self.collection_mgr)

            if name.find("-autoboot") != -1:
                # this is an artifact of some EL-3 imports
                continue

            distro.set_name(name)
            distro.set_kernel(kernel)
            distro.set_initrd(initrd)
            distro.set_arch(pxe_arch)
            distro.set_breed(self.breed)
            distro.set_os_version(self.os_version)
            distro.set_kernel_options(self.signature.get("kernel_options", ""))
            distro.set_kernel_options_post(self.signature.get("kernel_options_post", ""))
            distro.set_template_files(self.signature.get("template_files", ""))
            supported_distro_boot_loaders = utils.get_supported_distro_boot_loaders(distro, self.api)
            distro.set_supported_boot_loaders(supported_distro_boot_loaders)
            distro.set_boot_loader(supported_distro_boot_loaders[0])

            boot_files = ''
            for boot_file in self.signature["boot_files"]:
                boot_files += '$local_img_path/%s=%s/%s ' % (boot_file, self.path, boot_file)
            distro.set_boot_files(boot_files.strip())

            self.configure_tree_location(distro)

            self.distros.add(distro, save=True)
            distros_added.append(distro)

            # see if the profile name is already used, if so, skip it and
            # do not modify the existing profile

            existing_profile = self.profiles.find(name=name)

            if existing_profile is None:
                self.logger.info("creating new profile: %s" % name)
                profile = item_profile.Profile(self.collection_mgr)
            else:
                self.logger.info("skipping existing profile, name already exists: %s" % name)
                continue

            profile.set_name(name)
            profile.set_distro(name)
            profile.set_autoinstall(self.autoinstall_file)

            # depending on the name of the profile we can
            # define a good virt-type for usage with koan
            if name.find("-xen") != -1:
                profile.set_virt_type("xenpv")
            elif name.find("vmware") != -1:
                profile.set_virt_type("vmware")
            else:
                profile.set_virt_type("kvm")

            self.profiles.add(profile, save=True)

        return distros_added