diff --git a/zaza/openstack/charm_tests/series_upgrade/tests.py b/zaza/openstack/charm_tests/series_upgrade/tests.py index 0470c26..dc69b05 100644 --- a/zaza/openstack/charm_tests/series_upgrade/tests.py +++ b/zaza/openstack/charm_tests/series_upgrade/tests.py @@ -24,23 +24,24 @@ import unittest from zaza import model from zaza.openstack.utilities import ( cli as cli_utils, + series_upgrade as series_upgrade_utils, upgrade_utils as upgrade_utils, ) from zaza.openstack.charm_tests.nova.tests import LTSGuestCreateTest def _filter_easyrsa(app, app_config, model_name=None): - logging.warn("Skipping series upgrade of easyrsa Bug #1850121") charm_name = upgrade_utils.extract_charm_name_from_url(app_config['charm']) if "easyrsa" in charm_name: + logging.warn("Skipping series upgrade of easyrsa Bug #1850121") return True return False def _filter_etcd(app, app_config, model_name=None): - logging.warn("Skipping series upgrade of easyrsa Bug #1850124") 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 @@ -76,9 +77,10 @@ class SeriesUpgradeTest(unittest.TestCase): logging.warn( "Skipping series upgrade of easyrsa Bug #1850124") continue - upgrade_config = upgrade_utils.app_config( - app_details['charm'], - async=False) + 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( @@ -214,10 +216,10 @@ class ParallelSeriesUpgradeTest(unittest.TestCase): for application, app_details in applications.items(): if application not in group: continue - upgrade_config = upgrade_utils.app_config(app_details['charm']) + 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)) - logging.info("\tConfig: {}".format(upgrade_config)) upgrade_group.append( upgrade_function( application, diff --git a/zaza/openstack/utilities/series_upgrade.py b/zaza/openstack/utilities/series_upgrade.py index 6b5fd2b..c530612 100644 --- a/zaza/openstack/utilities/series_upgrade.py +++ b/zaza/openstack/utilities/series_upgrade.py @@ -30,6 +30,71 @@ SUBORDINATE_PAUSE_RESUME_BLACKLIST = [ ] +def app_config(charm_name, is_async=True): + """Return a dict with the upgrade config for an application. + + :param charm_name: Name of the charm about to upgrade + :type charm_name: str + :param async: Whether the upgreade functions should be async + :type async: bool + :returns: A dicitonary of the upgrade config for the application + :rtype: Dict + """ + if is_async: + default_upgrade = async_series_upgrade_application + secondary_first_upgrade = async_series_upgrade_non_leaders_first + else: + default_upgrade = series_upgrade_application + secondary_first_upgrade = series_upgrade_non_leaders_first + default = { + 'origin': 'openstack-origin', + 'pause_non_leader_subordinate': True, + 'pause_non_leader_primary': True, + 'upgrade_function': default_upgrade, + 'post_upgrade_functions': []} + _app_settings = collections.defaultdict(lambda: default) + ceph = { + 'origin': "source", + 'pause_non_leader_primary': False, + 'pause_non_leader_subordinate': False, + } + exceptions = { + 'rabbitmq-server': { + 'origin': 'source', + 'pause_non_leader_subordinate': False, }, + 'percona-cluster': {'origin': 'source', }, + 'nova-compute': { + 'pause_non_leader_primary': False, + 'pause_non_leader_subordinate': False, }, + 'ceph': ceph, + 'ceph-mon': ceph, + 'ceph-osd': ceph, + 'designate-bind': {'origin': None, }, + 'tempest': {'origin': None, }, + 'memcached': { + 'origin': None, + 'pause_non_leader_primary': False, + 'pause_non_leader_subordinate': False, + }, + 'vault': { + 'origin': None, + 'pause_non_leader_primary': False, + 'pause_non_leader_subordinate': True, + 'post_upgrade_functions': [ + ('zaza.openstack.charm_tests.vault.setup.' + 'mojo_unseal_by_unit')] + }, + 'mongodb': { + 'upgrade_function': secondary_first_upgrade, + } + + } + for key, value in exceptions.items(): + _app_settings[key] = copy.deepcopy(default) + _app_settings[key].update(value) + return _app_settings[charm_name] + + def run_post_upgrade_functions(post_upgrade_functions): """Execute list supplied functions. diff --git a/zaza/openstack/utilities/upgrade_utils.py b/zaza/openstack/utilities/upgrade_utils.py index b1a7c50..062e9b1 100644 --- a/zaza/openstack/utilities/upgrade_utils.py +++ b/zaza/openstack/utilities/upgrade_utils.py @@ -182,68 +182,3 @@ def extract_charm_name_from_url(charm_url): """ charm_name = re.sub(r'-[0-9]+$', '', charm_url.split('/')[-1]) return charm_name.split(':')[-1] - - -def app_config(charm_name, async=True): - """Returns a dict with the upgrade config for an application. - - :param charm_name: Name of the charm about to upgrade - :type charm_name: str - :param async: Whether the upgreade functions should be async - :type async: bool - :returns: A dicitonary of the upgrade config for the application - :rtype: Dict - """ - if async: - default_upgrade = async_series_upgrade_application - secondary_first_upgrade = async_series_upgrade_non_leaders_first - else: - default_upgrade = series_upgrade_application - secondary_first_upgrade = series_upgrade_non_leaders_first - default = { - 'origin': 'openstack-origin', - 'pause_non_leader_subordinate': True, - 'pause_non_leader_primary': True, - 'upgrade_function': default_upgrade, - 'post_upgrade_functions': []} - _app_settings = collections.defaultdict(lambda: default) - ceph = { - 'origin': "source", - 'pause_non_leader_primary': False, - 'pause_non_leader_subordinate': False, - } - exceptions = { - 'rabbitmq-server': { - 'origin': 'source', - 'pause_non_leader_subordinate': False, }, - 'percona-cluster': {'origin': 'source', }, - 'nova-compute' : { - 'pause_non_leader_primary': False, - 'pause_non_leader_subordinate': False, }, - 'ceph': ceph, - 'ceph-mon': ceph, - 'ceph-osd': ceph, - 'designate-bind': {'origin': None, }, - 'tempest': {'origin': None, }, - 'memcached': { - 'origin': None, - 'pause_non_leader_primary': False, - 'pause_non_leader_subordinate': False, - }, - 'vault': { - 'origin': None, - 'pause_non_leader_primary': False, - 'pause_non_leader_subordinate': True, - 'post_upgrade_functions': [ - ('zaza.openstack.charm_tests.vault.setup.' - 'mojo_unseal_by_unit')] - }, - 'mongodb': { - 'upgrade_function': secondary_first_upgrade, - } - - } - for key, value in exceptions.items(): - _app_settings[key] = copy.deepcopy(default) - _app_settings[key].update(value) - return _app_settings[charm_name]