예제 #1
0
def inner_start_up(master=False):
    """Startup jobs that must run serialized w.r.t. other starting servers."""
    # Register our MAC data type with psycopg.
    register_mac_type(connection.cursor())

    # All commissioning and testing scripts are stored in the database. For
    # a commissioning ScriptSet to be created Scripts must exist first. Call
    # this early, only on the master process, to ensure they exist and are
    # only created once. If get_or_create_running_controller() is called before
    # this it will fail on first run.
    if master:
        load_builtin_scripts()

    # Ensure the this region is represented in the database. The first regiond
    # to pass through inner_start_up on this host can do this; it should NOT
    # be restricted to masters only. This also ensures that the MAAS ID is set
    # on the filesystem; it will be done in a post-commit hook and will thus
    # happen before `locks.startup` is released.
    node = RegionController.objects.get_or_create_running_controller()
    # Update region version
    ControllerInfo.objects.set_version(node, get_running_version())
    # Ensure that uuid is created after creating
    RegionController.objects.get_or_create_uuid()

    # Only perform the following if the master process for the
    # region controller.
    if master:
        # Freshen the kms SRV records.
        dns_kms_setting_changed()

        # Make sure the commissioning distro series is still a supported LTS.
        commissioning_distro_series = Config.objects.get_config(
            name="commissioning_distro_series"
        )
        ubuntu = UbuntuOS()
        if commissioning_distro_series not in (
            ubuntu.get_supported_commissioning_releases()
        ):
            Config.objects.set_config(
                "commissioning_distro_series",
                ubuntu.get_default_commissioning_release(),
            )
            Notification.objects.create_info_for_admins(
                "Ubuntu %s is no longer a supported commissioning "
                "series. Ubuntu %s has been automatically selected."
                % (
                    commissioning_distro_series,
                    ubuntu.get_default_commissioning_release(),
                ),
                ident="commissioning_release_deprecated",
            )

        with RegionConfiguration.open() as config:
            Config.objects.set_config("maas_url", config.maas_url)

        # Update deprecation notifications if needed
        sync_deprecation_notifications()
예제 #2
0
def inner_start_up(master=False):
    """Startup jobs that must run serialized w.r.t. other starting servers."""
    # Register our MAC data type with psycopg.
    register_mac_type(connection.cursor())

    # Ensure the this region is represented in the database. The first regiond
    # to pass through inner_start_up on this host can do this; it should NOT
    # be restricted to masters only. This also ensures that the MAAS ID is set
    # on the filesystem; it will be done in a post-commit hook and will thus
    # happen before `locks.startup` is released.
    region = RegionController.objects.get_or_create_running_controller()
    # Ensure that uuid is created after creating
    RegionController.objects.get_or_create_uuid()

    # Only perform the following if the master process for the
    # region controller.
    if master:
        # Freshen the kms SRV records.
        dns_kms_setting_changed()

        # Add or update all builtin scripts
        load_builtin_scripts()

        # Make sure the commissioning distro series is still a supported LTS.
        commissioning_distro_series = Config.objects.get_config(
            name="commissioning_distro_series")
        ubuntu = UbuntuOS()
        if commissioning_distro_series not in (
                ubuntu.get_supported_commissioning_releases()):
            Config.objects.set_config(
                "commissioning_distro_series",
                ubuntu.get_default_commissioning_release(),
            )
            Notification.objects.create_info_for_admins(
                "Ubuntu %s is no longer a supported commissioning "
                "series. Ubuntu %s has been automatically selected." % (
                    commissioning_distro_series,
                    ubuntu.get_default_commissioning_release(),
                ),
                ident="commissioning_release_deprecated",
            )

        # Update deprecation notifications if needed
        sync_deprecation_notifications()

        # Refresh soon after this transaction is in.
        post_commit_do(reactor.callLater, 0, refreshRegion, region)

        # Create a certificate for the region.
        post_commit_do(reactor.callLater, 0, generate_certificate_if_needed)
예제 #3
0
def ensure_boot_source_definition():
    """Set default boot source if none is currently defined."""
    if not BootSource.objects.exists():
        source = BootSource.objects.create(
            url=DEFAULT_IMAGES_URL, keyring_filename=DEFAULT_KEYRINGS_PATH)
        # Default is to import newest Ubuntu LTS release, for the current
        # architecture.
        arch = get_architecture()
        # amd64 is the primary architecture for MAAS uses. Make sure its always
        # selected. If MAAS is running on another architecture select that as
        # well.
        if arch in ("", "amd64"):
            arches = ["amd64"]
        else:
            arches = [arch, "amd64"]
        ubuntu = UbuntuOS()
        BootSourceSelection.objects.create(
            boot_source=source,
            os=ubuntu.name,
            release=ubuntu.get_default_commissioning_release(),
            arches=arches,
            subarches=["*"],
            labels=["*"],
        )
        return True
    else:
        # XXX ensure the default keyrings path in the database points to the
        # right file when running in a snap. (see lp:1890468) The
        # DEFAULT_KEYRINGS_PATH points to the right file whether running from
        # deb or snap, but the path stored in the DB might be wrong if a
        # snap-to-deb transition happened with a script without the fix.
        if os.environ.get("SNAP"):
            BootSource.objects.filter(url=DEFAULT_IMAGES_URL).update(
                keyring_filename=DEFAULT_KEYRINGS_PATH)
        return False
예제 #4
0
def ensure_boot_source_definition():
    """Set default boot source if none is currently defined."""
    if not BootSource.objects.exists():
        source = BootSource.objects.create(
            url=DEFAULT_IMAGES_URL, keyring_filename=DEFAULT_KEYRINGS_PATH
        )
        # Default is to import newest Ubuntu LTS release, for the current
        # architecture.
        arch = get_architecture().split("/")[0]
        # amd64 is the primary architecture for MAAS uses. Make sure its always
        # selected. If MAAS is running on another architecture select that as
        # well.
        if arch in ("", "amd64"):
            arches = ["amd64"]
        else:
            arches = [arch, "amd64"]
        ubuntu = UbuntuOS()
        BootSourceSelection.objects.create(
            boot_source=source,
            os=ubuntu.name,
            release=ubuntu.get_default_commissioning_release(),
            arches=arches,
            subarches=["*"],
            labels=["*"],
        )
        return True
    else:
        return False
예제 #5
0
 def test__resets_deprecated_commissioning_release_if_master(self):
     Config.objects.set_config('commissioning_distro_series',
                               random.choice(['precise', 'trusty']))
     with post_commit_hooks:
         start_up.inner_start_up(master=True)
     ubuntu = UbuntuOS()
     self.assertEquals(
         Config.objects.get_config('commissioning_distro_series'),
         ubuntu.get_default_commissioning_release())
     self.assertTrue(
         Notification.objects.filter(
             ident="commissioning_release_deprecated").exists())
예제 #6
0
파일: bootsources.py 프로젝트: uraniid/maas
def ensure_boot_source_definition():
    """Set default boot source if none is currently defined."""
    if not BootSource.objects.exists():
        source = BootSource.objects.create(
            url=DEFAULT_IMAGES_URL, keyring_filename=DEFAULT_KEYRINGS_PATH)
        # Default is to import newest Ubuntu LTS releases, for only amd64
        # release versions only.
        ubuntu = UbuntuOS()
        BootSourceSelection.objects.create(
            boot_source=source, os=ubuntu.name,
            release=ubuntu.get_default_commissioning_release(),
            arches=['amd64'], subarches=['*'], labels=['*'])
        return True
    else:
        return False
예제 #7
0
 def test_default_commissioning_release(self):
     osystem = UbuntuOS()
     expected = osystem.get_default_commissioning_release()
     self.assertEqual(expected, self.get_lts_release())