def test_extract_charm_name_from_url(self): self.assertEqual( openstack_upgrade.extract_charm_name_from_url( 'local:bionic/heat-12'), 'heat') self.assertEqual( openstack_upgrade.extract_charm_name_from_url('cs:bionic/heat-12'), 'heat') self.assertEqual( openstack_upgrade.extract_charm_name_from_url('cs:heat'), 'heat')
def get_upgrade_url(self, charm_url): """Return the charm_url to upgrade to. :param charm_url: Current charm url. :type charm_url: str """ charm_name = upgrade_utils.extract_charm_name_from_url(charm_url) next_charm_url = zaza.model.get_latest_charm_url("cs:{}/{}".format( self.target_charm_namespace, charm_name)) return next_charm_url
def test_200_run_series_upgrade(self): """Run series upgrade.""" # Set Feature Flag os.environ["JUJU_DEV_FEATURE_FLAGS"] = "upgrade-series" upgrade_groups = upgrade_utils.get_series_upgrade_groups( extra_filters=[_filter_etcd, _filter_easyrsa], target_series=self.to_series) from_series = self.from_series to_series = self.to_series completed_machines = [] workaround_script = None files = [] applications = model.get_status().applications for group_name, apps in upgrade_groups: logging.info("About to upgrade {} from {} to {}".format( group_name, from_series, to_series)) upgrade_functions = [] if group_name in [ "Database Services", "Stateful Services", "Data Plane", "sweep_up" ]: logging.info("Going to upgrade {} unit by unit".format(apps)) upgrade_function = \ parallel_series_upgrade.serial_series_upgrade else: logging.info("Going to upgrade {} all at once".format(apps)) upgrade_function = \ parallel_series_upgrade.parallel_series_upgrade # allow up to 4 parallel upgrades at a time. This is to limit the # amount of data/calls that asyncio is handling as it's gets # unstable if all the applications are done at the same time. sem = asyncio.Semaphore(4) for charm_name in apps: charm = applications[charm_name]['charm'] name = upgrade_utils.extract_charm_name_from_url(charm) upgrade_config = parallel_series_upgrade.app_config(name) upgrade_functions.append( wrap_coroutine_with_sem( sem, upgrade_function(charm_name, **upgrade_config, from_series=from_series, to_series=to_series, completed_machines=completed_machines, workaround_script=workaround_script, files=files))) asyncio.get_event_loop().run_until_complete( asyncio.gather(*upgrade_functions)) model.block_until_all_units_idle() logging.info("Finished {}".format(group_name)) logging.info("Done!")
def test_200_run_series_upgrade(self): """Run series upgrade.""" # Set Feature Flag os.environ["JUJU_DEV_FEATURE_FLAGS"] = "upgrade-series" applications = model.get_status().applications completed_machines = [] for application, app_details in applications.items(): # Skip subordinates if app_details["subordinate-to"]: continue if "easyrsa" in app_details["charm"]: logging.warn( "Skipping series upgrade of easyrsa Bug #1850121") continue if "etcd" in app_details["charm"]: logging.warn( "Skipping series upgrade of etcd Bug #1850124") continue charm_name = upgrade_utils.extract_charm_name_from_url( app_details['charm']) upgrade_config = series_upgrade_utils.app_config( charm_name, is_async=False) upgrade_function = upgrade_config.pop('upgrade_function') logging.warn("About to upgrade {}".format(application)) upgrade_function( application, **upgrade_config, from_series=self.from_series, to_series=self.to_series, completed_machines=completed_machines, workaround_script=self.workaround_script, files=self.files, ) if "rabbitmq-server" in app_details["charm"]: logging.info( "Running complete-cluster-series-upgrade action on leader") model.run_action_on_leader( application, 'complete-cluster-series-upgrade', action_params={}) model.block_until_all_units_idle() if "percona-cluster" in app_details["charm"]: logging.info( "Running complete-cluster-series-upgrade action on leader") model.run_action_on_leader( application, 'complete-cluster-series-upgrade', action_params={}) model.block_until_all_units_idle()
def test_200_run_series_upgrade(self): """Run series upgrade.""" # Set Feature Flag os.environ["JUJU_DEV_FEATURE_FLAGS"] = "upgrade-series" upgrade_groups = upgrade_utils.get_series_upgrade_groups( extra_filters=[ upgrade_utils._filter_etcd, upgrade_utils._filter_easyrsa ], target_series=self.to_series) applications = model.get_status().applications completed_machines = [] for group_name, group in upgrade_groups: logging.warn("About to upgrade {} ({})".format(group_name, group)) upgrade_group = [] for application, app_details in applications.items(): if application not in group: continue charm_name = upgrade_utils.extract_charm_name_from_url( app_details['charm']) upgrade_config = series_upgrade_utils.app_config(charm_name) upgrade_function = upgrade_config.pop('upgrade_function') logging.warn("About to upgrade {}".format(application)) upgrade_group.append( upgrade_function( application, **upgrade_config, from_series=self.from_series, to_series=self.to_series, completed_machines=completed_machines, workaround_script=self.workaround_script, files=self.files, )) asyncio.get_event_loop().run_until_complete( asyncio.gather(*upgrade_group)) if "rabbitmq-server" in group: logging.info( "Running complete-cluster-series-upgrade action on leader") model.run_action_on_leader('rabbitmq-server', 'complete-cluster-series-upgrade', action_params={}) model.block_until_all_units_idle() if "percona-cluster" in group: logging.info( "Running complete-cluster-series-upgrade action on leader") model.run_action_on_leader('mysql', 'complete-cluster-series-upgrade', action_params={}) model.block_until_all_units_idle()
def test_200_run_series_upgrade(self): """Run series upgrade.""" # Set Feature Flag os.environ["JUJU_DEV_FEATURE_FLAGS"] = "upgrade-series" upgrade_groups = upgrade_utils.get_series_upgrade_groups( extra_filters=[_filter_etcd, _filter_easyrsa]) from_series = self.from_series to_series = self.to_series completed_machines = [] workaround_script = None files = [] applications = model.get_status().applications for group_name, apps in upgrade_groups.items(): logging.info("About to upgrade {} from {} to {}".format( group_name, from_series, to_series)) upgrade_functions = [] if group_name in ["Stateful Services", "Data Plane", "sweep_up"]: logging.info("Going to upgrade {} unit by unit".format(apps)) upgrade_function = \ parallel_series_upgrade.serial_series_upgrade else: logging.info("Going to upgrade {} all at once".format(apps)) upgrade_function = \ parallel_series_upgrade.parallel_series_upgrade for charm_name in apps: charm = applications[charm_name]['charm'] name = upgrade_utils.extract_charm_name_from_url(charm) upgrade_config = parallel_series_upgrade.app_config(name) upgrade_functions.append( upgrade_function(charm_name, **upgrade_config, from_series=from_series, to_series=to_series, completed_machines=completed_machines, workaround_script=workaround_script, files=files)) asyncio.get_event_loop().run_until_complete( asyncio.gather(*upgrade_functions)) model.block_until_all_units_idle() logging.info("Finished {}".format(group_name)) logging.info("Done!")
def _filter_etcd(app, app_config, model_name=None): charm_name = upgrade_utils.extract_charm_name_from_url(app_config['charm']) if "etcd" in charm_name: logging.warn("Skipping series upgrade of easyrsa Bug #1850124") return True return False