/usr/lib/python3/dist-packages/provisioningserver/drivers/osystem/ubuntu.py is in python3-maas-provisioningserver 2.4.0~beta2-6865-gec43e47e6-0ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | # Copyright 2014-2016 Canonical Ltd. This software is licensed under the
# GNU Affero General Public License version 3 (see the file LICENSE).
"""Ubuntu Operating System."""
__all__ = [
"UbuntuOS",
]
import os
from distro_info import UbuntuDistroInfo
from provisioningserver.config import ClusterConfiguration
from provisioningserver.drivers.osystem import (
BOOT_IMAGE_PURPOSE,
OperatingSystem,
)
class UbuntuOS(OperatingSystem):
"""Ubuntu operating system."""
name = "ubuntu"
title = "Ubuntu"
def __init__(self):
self.ubuntu_distro_info = UbuntuDistroInfo()
def get_boot_image_purposes(self, arch, subarch, release, label):
"""Gets the purpose of each boot image."""
return [
BOOT_IMAGE_PURPOSE.COMMISSIONING,
BOOT_IMAGE_PURPOSE.INSTALL,
BOOT_IMAGE_PURPOSE.XINSTALL,
BOOT_IMAGE_PURPOSE.DISKLESS,
]
def is_release_supported(self, release):
"""Return True when the release is supported, False otherwise."""
row = self.get_distro_series_info_row(release)
return row is not None
def get_lts_release(self):
"""Return the latest Ubuntu LTS release."""
return self.ubuntu_distro_info.lts()
def get_default_release(self):
"""Gets the default release to use when a release is not
explicit."""
return self.get_lts_release()
def get_supported_commissioning_releases(self):
"""Gets the supported commissioning releases for Ubuntu. This
only exists on Ubuntu, because that is the only operating
system that supports commissioning.
"""
unsupported_releases = ['precise']
return [name for name in self.ubuntu_distro_info.supported()
if name not in unsupported_releases
if self.ubuntu_distro_info.is_lts(name)]
def get_default_commissioning_release(self):
"""Gets the default commissioning release for Ubuntu. This only exists
on Ubuntu, because that is the only operating system that supports
commissioning.
"""
return self.get_lts_release()
def get_distro_series_info_row(self, release):
"""Returns the distro series row information from python-distro-info.
"""
info = self.ubuntu_distro_info
for row in info._avail(info._date):
# LP: #1711191 - distro-info 0.16+ no longer returns dictionaries
# or lists, and it now returns objects instead. In this case, we
# return either the object or the dictionary so get_release_title
# handles the formating correctly.
row_dict = row
if not isinstance(row, dict):
row_dict = row.__dict__
if row_dict['series'] == release:
return row
return None
def get_release_title(self, release):
"""Return the title for the given release."""
row = self.get_distro_series_info_row(release)
if row is None:
return None
return self.ubuntu_distro_info._format("fullname", row)
def get_xinstall_parameters(self, arch, subarch, release, label):
"""Return the xinstall image name and type for this operating system.
:param arch: Architecture of boot image.
:param subarch: Sub-architecture of boot image.
:param release: Release of boot image.
:param label: Label of boot image.
:return: tuple with name of root image and image type
"""
with ClusterConfiguration.open() as config:
squashfs_path = os.path.join(
config.tftp_root, 'ubuntu', arch, subarch, release, label,
'squashfs')
if os.path.exists(squashfs_path):
return ('squashfs', 'squashfs')
else:
return ('root-tgz', 'tgz')
|