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()
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)
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
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
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())
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
def test_default_commissioning_release(self): osystem = UbuntuOS() expected = osystem.get_default_commissioning_release() self.assertEqual(expected, self.get_lts_release())