Exemple #1
0
 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')
Exemple #2
0
    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()
Exemple #5
0
    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