def test_do_openstack_upgrade_kilo_notleader(self, git_requested, stamp_neutron_db, migrate_neutron_db, gsrc): git_requested.return_value = False self.is_elected_leader.return_value = False self.os_release.return_value = 'juno' self.config.side_effect = self.test_config.get self.test_config.set('openstack-origin', 'cloud:trusty-kilo') gsrc.return_value = 'kilo' self.get_os_codename_install_source.return_value = 'kilo' configs = MagicMock() nutils.do_openstack_upgrade(configs) self.os_release.assert_called_with('neutron-common') self.assertTrue(self.log.called) self.configure_installation_source.assert_called_with( 'cloud:trusty-kilo' ) self.apt_update.assert_called_with(fatal=True) dpkg_opts = [ '--option', 'Dpkg::Options::=--force-confnew', '--option', 'Dpkg::Options::=--force-confdef', ] self.apt_upgrade.assert_called_with(options=dpkg_opts, fatal=True, dist=True) pkgs = nutils.determine_packages() pkgs.sort() self.apt_install.assert_called_with(packages=pkgs, options=dpkg_opts, fatal=True) configs.set_release.assert_called_with(openstack_release='kilo') self.assertFalse(stamp_neutron_db.called) self.assertFalse(migrate_neutron_db.called)
def test_do_openstack_upgrade(self): self.config.side_effect = self.test_config.get self.test_config.set('openstack-origin', 'cloud:trusty-juno') self.os_release.side_effect = 'icehouse' self.get_os_codename_install_source.return_value = 'juno' configs = MagicMock() nutils.do_openstack_upgrade(configs) self.log.assert_called() self.configure_installation_source.assert_called_with( 'cloud:trusty-juno') self.apt_update.assert_called_with(fatal=True) dpkg_opts = [ '--option', 'Dpkg::Options::=--force-confnew', '--option', 'Dpkg::Options::=--force-confdef', ] self.apt_upgrade.assert_called_with(options=dpkg_opts, fatal=True, dist=True) pkgs = nutils.BASE_PACKAGES pkgs.sort() self.apt_install.assert_called_with(packages=pkgs, options=dpkg_opts, fatal=True) configs.set_release.assert_called_with(openstack_release='juno')
def test_do_openstack_upgrade_notleader(self, stamp_neutron_db, migrate_neutron_db, gsrc): self.is_elected_leader.return_value = False self.os_release.return_value = 'icehouse' self.config.side_effect = self.test_config.get self.test_config.set('openstack-origin', 'cloud:trusty-juno') gsrc.return_value = 'juno' self.get_os_codename_install_source.return_value = 'juno' configs = MagicMock() nutils.do_openstack_upgrade(configs) self.os_release.assert_called_with('neutron-common') self.assertTrue(self.log.called) self.configure_installation_source.assert_called_with( 'cloud:trusty-juno') self.apt_update.assert_called_with(fatal=True) dpkg_opts = [ '--option', 'Dpkg::Options::=--force-confnew', '--option', 'Dpkg::Options::=--force-confdef', ] self.apt_upgrade.assert_called_with(options=dpkg_opts, fatal=True, dist=True) pkgs = nutils.determine_packages() pkgs.sort() self.apt_install.assert_called_with(packages=pkgs, options=dpkg_opts, fatal=True) configs.set_release.assert_called_with(openstack_release='juno') self.assertFalse(stamp_neutron_db.called) self.assertFalse(migrate_neutron_db.called)
def config_changed(): # if we are paused, delay doing any config changed hooks. # It is forced on the resume. if is_unit_paused_set(): log("Unit is pause or upgrading. Skipping config_changed", "WARN") return # If neutron is ready to be queried then check for incompatability between # existing neutron objects and charm settings if neutron_ready(): if l3ha_router_present() and not get_l3ha(): e = ('Cannot disable Router HA while ha enabled routers exist.' ' Please remove any ha routers') status_set('blocked', e) raise Exception(e) if dvr_router_present() and not get_dvr(): e = ('Cannot disable dvr while dvr enabled routers exist. Please' ' remove any distributed routers') log(e, level=ERROR) status_set('blocked', e) raise Exception(e) if config('prefer-ipv6'): status_set('maintenance', 'configuring ipv6') setup_ipv6() sync_db_with_multi_ipv6_addresses(config('database'), config('database-user')) global CONFIGS if not config('action-managed-upgrade'): if openstack_upgrade_available('neutron-common'): status_set('maintenance', 'Running openstack upgrade') do_openstack_upgrade(CONFIGS) additional_install_locations( config('neutron-plugin'), config('openstack-origin') ) status_set('maintenance', 'Installing apt packages') apt_install(filter_installed_packages( determine_packages(config('openstack-origin'))), fatal=True) packages_removed = remove_old_packages() configure_https() update_nrpe_config() CONFIGS.write_all() if packages_removed and not is_unit_paused_set(): log("Package purge detected, restarting services", "INFO") for s in services(): service_restart(s) for r_id in relation_ids('neutron-api'): neutron_api_relation_joined(rid=r_id) for r_id in relation_ids('neutron-plugin-api'): neutron_plugin_api_relation_joined(rid=r_id) for r_id in relation_ids('amqp'): amqp_joined(relation_id=r_id) for r_id in relation_ids('identity-service'): identity_joined(rid=r_id) for r_id in relation_ids('ha'): ha_joined(relation_id=r_id) [cluster_joined(rid) for rid in relation_ids('cluster')]
def config_changed(): # If neutron is ready to be queried then check for incompatability between # existing neutron objects and charm settings codename = get_os_codename_install_source(config('openstack-origin')) if codename >= 'kilo': branch = "stable/%s" % codename pip_install("git+https://github.com/openstack/networking-hyperv.git@%s" % branch) if neutron_ready(): if l3ha_router_present() and not get_l3ha(): e = ('Cannot disable Router HA while ha enabled routers exist.' ' Please remove any ha routers') status_set('blocked', e) raise Exception(e) if dvr_router_present() and not get_dvr(): e = ('Cannot disable dvr while dvr enabled routers exist. Please' ' remove any distributed routers') log(e, level=ERROR) status_set('blocked', e) raise Exception(e) if config('prefer-ipv6'): status_set('maintenance', 'configuring ipv6') setup_ipv6() sync_db_with_multi_ipv6_addresses(config('database'), config('database-user')) global CONFIGS if git_install_requested(): if config_value_changed('openstack-origin-git'): status_set('maintenance', 'Running Git install') git_install(config('openstack-origin-git')) elif not config('action-managed-upgrade'): if openstack_upgrade_available('neutron-common'): status_set('maintenance', 'Running openstack upgrade') do_openstack_upgrade(CONFIGS) additional_install_locations( config('neutron-plugin'), config('openstack-origin') ) status_set('maintenance', 'Installing apt packages') apt_install(filter_installed_packages( determine_packages(config('openstack-origin'))), fatal=True) configure_https() update_nrpe_config() CONFIGS.write_all() for r_id in relation_ids('neutron-api'): neutron_api_relation_joined(rid=r_id) for r_id in relation_ids('neutron-plugin-api'): neutron_plugin_api_relation_joined(rid=r_id) for r_id in relation_ids('amqp'): amqp_joined(relation_id=r_id) for r_id in relation_ids('identity-service'): identity_joined(rid=r_id) for rid in relation_ids('zeromq-configuration'): zeromq_configuration_relation_joined(rid) [cluster_joined(rid) for rid in relation_ids('cluster')]
def test_do_openstack_upgrade_liberty(self, stamp_neutron_db, migrate_neutron_db, gsrc): self.is_elected_leader.return_value = True self.os_release.return_value = 'liberty' self.config.side_effect = self.test_config.get self.test_config.set('openstack-origin', 'cloud:trusty-mitaka') gsrc.return_value = 'mitaka' self.get_os_codename_install_source.return_value = 'mitaka' configs = MagicMock() nutils.do_openstack_upgrade(configs) self.assertFalse(stamp_neutron_db.called)
def config_changed(): # If neutron is ready to be queried then check for incompatability between # existing neutron objects and charm settings if neutron_ready(): if l3ha_router_present() and not get_l3ha(): e = ('Cannot disable Router HA while ha enabled routers exist.' ' Please remove any ha routers') status_set('blocked', e) raise Exception(e) if dvr_router_present() and not get_dvr(): e = ('Cannot disable dvr while dvr enabled routers exist. Please' ' remove any distributed routers') log(e, level=ERROR) status_set('blocked', e) raise Exception(e) if config('prefer-ipv6'): status_set('maintenance', 'configuring ipv6') setup_ipv6() sync_db_with_multi_ipv6_addresses(config('database'), config('database-user')) global CONFIGS if git_install_requested(): if config_value_changed('openstack-origin-git'): status_set('maintenance', 'Running Git install') git_install(config('openstack-origin-git')) elif not config('action-managed-upgrade'): if openstack_upgrade_available('neutron-common'): status_set('maintenance', 'Running openstack upgrade') do_openstack_upgrade(CONFIGS) additional_install_locations( config('neutron-plugin'), config('openstack-origin') ) status_set('maintenance', 'Installing apt packages') apt_install(filter_installed_packages( determine_packages(config('openstack-origin'))), fatal=True) configure_https() update_nrpe_config() CONFIGS.write_all() for r_id in relation_ids('neutron-api'): neutron_api_relation_joined(rid=r_id) for r_id in relation_ids('neutron-plugin-api'): neutron_plugin_api_relation_joined(rid=r_id) for r_id in relation_ids('amqp'): amqp_joined(relation_id=r_id) for r_id in relation_ids('identity-service'): identity_joined(rid=r_id) for rid in relation_ids('zeromq-configuration'): zeromq_configuration_relation_joined(rid) [cluster_joined(rid) for rid in relation_ids('cluster')]
def test_do_openstack_upgrade_rocky(self, stamp_neutron_db, migrate_neutron_db, gsrc): self.is_elected_leader.return_value = True self.os_release.return_value = 'rocky' self.config.side_effect = self.test_config.get self.test_config.set('openstack-origin', 'cloud:bionic-rocky') gsrc.return_value = 'rocky' self.get_os_codename_install_source.return_value = 'rocky' self.filter_missing_packages.return_value = ['python-neutron'] configs = MagicMock() nutils.do_openstack_upgrade(configs) self.apt_purge.assert_called_with(['python-neutron'], fatal=True) self.apt_autoremove.assert_called_with(purge=True, fatal=True) self.filter_missing_packages.assert_called_with(nutils.PURGE_PACKAGES) self.assertFalse(stamp_neutron_db.called)
def test_do_openstack_upgrade_train(self, stamp_neutron_db, migrate_neutron_db, gsrc, fwaas_migrate_v1_to_v2, mock_manage_plugin): self.is_elected_leader.return_value = True self.os_release.return_value = 'train' self.config.side_effect = self.test_config.get self.test_config.set('openstack-origin', 'cloud:bionic-train') gsrc.return_value = 'train' self.get_os_codename_install_source.return_value = 'train' self.filter_missing_packages.return_value = ['python-neutron'] configs = MagicMock() nutils.do_openstack_upgrade(configs) self.apt_purge.assert_called_with(['python-neutron'], fatal=True) self.apt_autoremove.assert_called_with(purge=True, fatal=True) self.filter_missing_packages.assert_called_with( nutils.PURGE_PACKAGES + nutils.PURGE_EXTRA_PACKAGES_ON_TRAIN) self.assertFalse(stamp_neutron_db.called) fwaas_migrate_v1_to_v2.assert_called_once_with() configs.write_all.assert_called_once_with()
def test_do_openstack_upgrade_stein(self, stamp_neutron_db, migrate_neutron_db, gsrc, fwaas_migrate_v1_to_v2): self.is_elected_leader.return_value = True self.os_release.return_value = 'stein' self.config.side_effect = self.test_config.get self.test_config.set('openstack-origin', 'cloud:bionic-stein') gsrc.return_value = 'rocky' self.get_os_codename_install_source.return_value = 'stein' self.filter_missing_packages.return_value = ['python-neutron'] configs = MagicMock() nutils.do_openstack_upgrade(configs) self.apt_purge.assert_called_with(['python-neutron'], fatal=True) self.apt_autoremove.assert_called_with(purge=True, fatal=True) self.filter_missing_packages.assert_called_with(nutils.PURGE_PACKAGES) self.assertFalse(stamp_neutron_db.called) fwaas_migrate_v1_to_v2.assert_called_once_with() configs.write_all.assert_called_once_with()
def config_changed(): apt_install(filter_installed_packages(determine_packages()), fatal=True) if config('prefer-ipv6'): setup_ipv6() sync_db_with_multi_ipv6_addresses(config('database'), config('database-user')) global CONFIGS if openstack_upgrade_available('neutron-server'): do_openstack_upgrade(CONFIGS) configure_https() update_nrpe_config() CONFIGS.write_all() for r_id in relation_ids('neutron-api'): neutron_api_relation_joined(rid=r_id) for r_id in relation_ids('neutron-plugin-api'): neutron_plugin_api_relation_joined(rid=r_id) for r_id in relation_ids('amqp'): amqp_joined(relation_id=r_id) for r_id in relation_ids('identity-service'): identity_joined(rid=r_id) [cluster_joined(rid) for rid in relation_ids('cluster')]