Merge pull request #99 from gnuoy/run-funcs-post-upgrade

Series upgrade tests run funcs after upgrade.
This commit is contained in:
Frode Nordahl
2019-10-14 13:35:57 +02:00
committed by GitHub
3 changed files with 46 additions and 13 deletions
@@ -287,7 +287,8 @@ class TestGenericUtils(ut_utils.BaseTestCase):
mock.call("{}/{}".format(_application, machine_num),
machine_num, origin=_origin,
from_series=_from_series, to_series=_to_series,
workaround_script=_workaround_script, files=_files),
workaround_script=_workaround_script, files=_files,
post_upgrade_functions=None),
)
# Pause primary peers and subordinates
@@ -325,7 +326,8 @@ class TestGenericUtils(ut_utils.BaseTestCase):
mock.call("{}/{}".format(_application, machine_num),
machine_num, origin=_origin,
from_series=_from_series, to_series=_to_series,
workaround_script=_workaround_script, files=_files),
workaround_script=_workaround_script, files=_files,
post_upgrade_functions=None),
)
# Pause subordinates
@@ -356,7 +358,8 @@ class TestGenericUtils(ut_utils.BaseTestCase):
mock.call("{}/{}".format(_application, machine_num),
machine_num, origin=_origin,
from_series=_from_series, to_series=_to_series,
workaround_script=_workaround_script, files=_files),
workaround_script=_workaround_script, files=_files,
post_upgrade_functions=None),
)
# No Pausiing
@@ -52,6 +52,7 @@ class SeriesUpgradeTest(unittest.TestCase):
origin = "openstack-origin"
pause_non_leader_subordinate = True
pause_non_leader_primary = True
post_upgrade_functions = []
# Skip subordinates
if applications[application]["subordinate-to"]:
continue
@@ -78,6 +79,10 @@ class SeriesUpgradeTest(unittest.TestCase):
origin = None
pause_non_leader_primary = False
pause_non_leader_subordinate = False
if "vault" in applications[application]["charm"]:
post_upgrade_functions = [
('zaza.openstack.charm_tests.vault.setup.'
'basic_setup_and_unseal')]
if ("mongodb" in applications[application]["charm"] or
"vault" in applications[application]["charm"]):
# Mongodb and vault need to run series upgrade
@@ -86,7 +91,8 @@ class SeriesUpgradeTest(unittest.TestCase):
application,
from_series=self.from_series,
to_series=self.to_series,
completed_machines=completed_machines)
completed_machines=completed_machines,
post_upgrade_functions=post_upgrade_functions)
continue
# The rest are likley APIs use defaults
@@ -100,7 +106,8 @@ class SeriesUpgradeTest(unittest.TestCase):
origin=origin,
completed_machines=completed_machines,
workaround_script=self.workaround_script,
files=self.files)
files=self.files,
post_upgrade_functions=post_upgrade_functions)
class OpenStackSeriesUpgrade(SeriesUpgradeTest):
+31 -8
View File
@@ -25,7 +25,7 @@ from zaza import model
from zaza.openstack.utilities import juju as juju_utils
from zaza.openstack.utilities import exceptions as zaza_exceptions
from zaza.openstack.utilities.os_versions import UBUNTU_OPENSTACK_RELEASE
from zaza.charm_lifecycle import utils as cl_utils
SUBORDINATE_PAUSE_RESUME_BLACKLIST = [
"cinder-ceph",
@@ -177,9 +177,22 @@ def get_yaml_config(config_file):
return yaml.safe_load(open(config_file, 'r').read())
def run_post_upgrade_functions(post_upgrade_functions):
"""Execute list supplied functions.
:param post_upgrade_functions: List of functions
:type post_upgrade_functions: [function, function, ...]
"""
if post_upgrade_functions:
for func in post_upgrade_functions:
logging.info("Running {}".format(func))
cl_utils.get_class(func)()
def series_upgrade_non_leaders_first(application, from_series="trusty",
to_series="xenial",
completed_machines=[]):
completed_machines=[],
post_upgrade_functions=None):
"""Series upgrade non leaders first.
Wrap all the functionality to handle series upgrade for charms
@@ -214,7 +227,9 @@ def series_upgrade_non_leaders_first(application, from_series="trusty",
.format(unit))
series_upgrade(unit, machine,
from_series=from_series, to_series=to_series,
origin=None)
origin=None,
post_upgrade_functions=post_upgrade_functions)
run_post_upgrade_functions(post_upgrade_functions)
completed_machines.append(machine)
else:
logging.info("Skipping unit: {}. Machine: {} already upgraded. "
@@ -227,7 +242,8 @@ def series_upgrade_non_leaders_first(application, from_series="trusty",
if machine not in completed_machines:
series_upgrade(leader, machine,
from_series=from_series, to_series=to_series,
origin=None)
origin=None,
post_upgrade_functions=post_upgrade_functions)
completed_machines.append(machine)
else:
logging.info("Skipping unit: {}. Machine: {} already upgraded."
@@ -240,7 +256,8 @@ def series_upgrade_application(application, pause_non_leader_primary=True,
from_series="trusty", to_series="xenial",
origin='openstack-origin',
completed_machines=[],
files=None, workaround_script=None):
files=None, workaround_script=None,
post_upgrade_functions=None):
"""Series upgrade application.
Wrap all the functionality to handle series upgrade for a given
@@ -310,7 +327,8 @@ def series_upgrade_application(application, pause_non_leader_primary=True,
series_upgrade(leader, machine,
from_series=from_series, to_series=to_series,
origin=origin, workaround_script=workaround_script,
files=files)
files=files,
post_upgrade_functions=post_upgrade_functions)
completed_machines.append(machine)
else:
logging.info("Skipping unit: {}. Machine: {} already upgraded."
@@ -329,7 +347,8 @@ def series_upgrade_application(application, pause_non_leader_primary=True,
series_upgrade(unit, machine,
from_series=from_series, to_series=to_series,
origin=origin, workaround_script=workaround_script,
files=files)
files=files,
post_upgrade_functions=post_upgrade_functions)
completed_machines.append(machine)
else:
logging.info("Skipping unit: {}. Machine: {} already upgraded. "
@@ -343,7 +362,8 @@ def series_upgrade_application(application, pause_non_leader_primary=True,
def series_upgrade(unit_name, machine_num,
from_series="trusty", to_series="xenial",
origin='openstack-origin',
files=None, workaround_script=None):
files=None, workaround_script=None,
post_upgrade_functions=None):
"""Perform series upgrade on a unit.
:param unit_name: Unit Name
@@ -394,6 +414,9 @@ def series_upgrade(unit_name, machine_num,
logging.info("Complete series upgrade on {}".format(machine_num))
model.complete_series_upgrade(machine_num)
model.block_until_all_units_idle()
logging.info("Running run_post_upgrade_functions {}".format(
post_upgrade_functions))
run_post_upgrade_functions(post_upgrade_functions)
logging.info("Waiting for workload status 'active' on {}"
.format(unit_name))
model.block_until_unit_wl_status(unit_name, "active")