Ejemplo n.º 1
0
def get_network_yaml_settings(osystem, release):
    """Returns the network YAML settings for the specified OS/release.

    :param osystem: The operating system name.
    :param release: The operating system release name.
    :return: NetworkYAMLSettings namedtuple.
    """
    force_v1 = Config.objects.get_config("force_v1_network_yaml")
    if force_v1:
        return NETWORK_YAML_DEFAULT_SETTINGS
    elif osystem == "ubuntu":
        release_version = get_release_version_from_string(release)
        # Ubuntu 18.04 "bionic" and greater support source routing policies.
        if release_version >= (18, 4, 0):
            return NetworkYAMLSettings(version=2, source_routing=True)
        # Ubuntu 16.04 "xenial" and greater support Netplan (v2 YAML), but
        # not source routing policies.
        elif release_version >= (16, 4, 0):
            return NetworkYAMLSettings(version=2, source_routing=False)
    elif osystem == "ubuntu-core":
        # XXX Ubuntu Core 18+ likely supports routing policies, and could
        # support source routing. But this needs testing.
        return NetworkYAMLSettings(version=2, source_routing=False)
    elif osystem == "esxi":
        # XXX esxi will gain support for version 2 YAML soon.
        return NetworkYAMLSettings(version=1, source_routing=False)
    return NETWORK_YAML_DEFAULT_SETTINGS
Ejemplo n.º 2
0
    def get_hwe_kernels(self,
                        name=None,
                        architecture=None,
                        kflavor=None,
                        include_subarches=False):
        """Return the set of kernels."""
        from maasserver.utils.osystems import get_release_version_from_string

        if not name:
            name = ''
        if not architecture:
            architecture = ''

        sets_prefetch = BootResourceSet.objects.annotate(
            files_count=Count('files__id'),
            files_size=Sum('files__largefile__size'),
            files_total_size=Sum('files__largefile__total_size'))
        sets_prefetch = sets_prefetch.prefetch_related('files')
        sets_prefetch = sets_prefetch.order_by('id')
        query = self.filter(architecture__startswith=architecture,
                            name__startswith=name)
        query = query.prefetch_related(Prefetch('sets', sets_prefetch))

        kernels = set()
        for resource in query:
            if kflavor is not None and resource.kflavor != kflavor:
                continue
            resource_set = resource.get_latest_complete_set()
            if (resource_set is None or not resource_set.commissionable
                    or not resource_set.xinstallable):
                continue
            subarch = resource.split_arch()[1]
            if subarch.startswith("hwe-") or subarch.startswith("ga-"):
                kernels.add(subarch)
                if resource.rolling:
                    subarch_parts = subarch.split('-')
                    subarch_parts[1] = 'rolling'
                    kernels.add('-'.join(subarch_parts))

            if include_subarches and "subarches" in resource.extra:
                for subarch in resource.extra["subarches"].split(","):
                    if subarch.startswith("hwe-") or subarch.startswith("ga-"):
                        if kflavor is None:
                            kernels.add(subarch)
                        else:
                            # generic kflavors are not included in the subarch.
                            if kflavor == 'generic':
                                kparts = subarch.split('-')
                                if len(kparts) == 2:
                                    kernels.add(subarch)
                            else:
                                if kflavor in subarch:
                                    kernels.add(subarch)
        # Make sure kernels named with a version come after the kernels named
        # with the first letter of release. This switched in Xenial so this
        # preserves the chronological order of the kernels.
        return sorted(kernels,
                      key=lambda k: get_release_version_from_string(k))
Ejemplo n.º 3
0
 def test_get_release_version_from_string(self):
     self.assertEquals(
         self.expected, get_release_version_from_string(self.string)
     )