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
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))
def test_get_release_version_from_string(self): self.assertEquals( self.expected, get_release_version_from_string(self.string) )