Ensure that origin is set only after the first machine is rebooting

This commit is contained in:
Chris MacNaughton
2020-04-15 16:34:21 +02:00
parent c492ecdcac
commit fa4587f366
2 changed files with 69 additions and 20 deletions

View File

@@ -200,7 +200,6 @@ class TestParallelSeriesUpgrade(AioTestCase):
mock_get_class.assert_called_once_with('my.thing')
called.assert_called_once_with('1')
@mock.patch.object(upgrade_utils.os_utils, 'async_set_origin')
@mock.patch.object(upgrade_utils, 'run_post_application_upgrade_functions')
@mock.patch.object(
upgrade_utils.series_upgrade_utils, 'async_prepare_series_upgrade')
@@ -214,7 +213,6 @@ class TestParallelSeriesUpgrade(AioTestCase):
mock_async_set_series,
mock_async_prepare_series_upgrade,
mock_post_application_upgrade_functions,
mock_async_set_origin,
):
self.juju_status.return_value.applications.__getitem__.return_value = \
FAKE_STATUS_MONGO
@@ -240,24 +238,28 @@ class TestParallelSeriesUpgrade(AioTestCase):
mock_series_upgrade_machine.assert_has_calls([
mock.call(
'1',
origin=None,
application='mongodb',
files=None,
workaround_script=None,
post_upgrade_functions=[]),
mock.call(
'2',
origin=None,
application='mongodb',
files=None,
workaround_script=None,
post_upgrade_functions=[]),
mock.call(
'0',
origin=None,
application='mongodb',
files=None,
workaround_script=None,
post_upgrade_functions=[]),
])
mock_async_set_origin.assert_not_called()
mock_post_application_upgrade_functions.assert_called_once_with([])
@mock.patch.object(upgrade_utils.os_utils, 'async_set_origin')
@mock.patch.object(upgrade_utils, 'run_post_application_upgrade_functions')
@mock.patch.object(
upgrade_utils.series_upgrade_utils, 'async_prepare_series_upgrade')
@@ -271,7 +273,6 @@ class TestParallelSeriesUpgrade(AioTestCase):
mock_async_set_series,
mock_async_prepare_series_upgrade,
mock_post_application_upgrade_functions,
mock_async_set_origin,
):
self.juju_status.return_value.applications.__getitem__.return_value = \
FAKE_STATUS_MONGO
@@ -294,24 +295,28 @@ class TestParallelSeriesUpgrade(AioTestCase):
mock_series_upgrade_machine.assert_has_calls([
mock.call(
'1',
origin=None,
application='mongodb',
files=None,
workaround_script=None,
post_upgrade_functions=[]),
mock.call(
'2',
origin=None,
application='mongodb',
files=None,
workaround_script=None,
post_upgrade_functions=[]),
mock.call(
'0',
origin=None,
application='mongodb',
files=None,
workaround_script=None,
post_upgrade_functions=[]),
])
mock_async_set_origin.assert_not_called()
mock_post_application_upgrade_functions.assert_called_once_with([])
@mock.patch.object(upgrade_utils.os_utils, 'async_set_origin')
@mock.patch.object(upgrade_utils, 'run_post_application_upgrade_functions')
@mock.patch.object(
upgrade_utils.series_upgrade_utils, 'async_prepare_series_upgrade')
@@ -325,7 +330,6 @@ class TestParallelSeriesUpgrade(AioTestCase):
mock_async_set_series,
mock_async_prepare_series_upgrade,
mock_post_application_upgrade_functions,
mock_async_set_origin,
):
await upgrade_utils.parallel_series_upgrade(
'app',
@@ -335,34 +339,39 @@ class TestParallelSeriesUpgrade(AioTestCase):
mock_async_set_series.assert_called_once_with(
'app', to_series='xenial')
self.juju_status.assert_called()
# The below is using `any_order=True` because the ordering is
# undetermined and differs between python versions
mock_async_prepare_series_upgrade.assert_has_calls([
mock.call('1', to_series='xenial'),
mock.call('2', to_series='xenial'),
mock.call('0', to_series='xenial'),
])
], any_order=True)
mock_maybe_pause_things.assert_called()
mock_series_upgrade_machine.assert_has_calls([
mock.call(
'1',
origin='openstack-origin',
application='app',
files=None,
workaround_script=None,
post_upgrade_functions=None),
mock.call(
'2',
origin='openstack-origin',
application='app',
files=None,
workaround_script=None,
post_upgrade_functions=None),
mock.call(
'0',
origin='openstack-origin',
application='app',
files=None,
workaround_script=None,
post_upgrade_functions=None),
])
mock_async_set_origin.assert_called_once_with(
'app', 'openstack-origin')
mock_post_application_upgrade_functions.assert_called_once_with(None)
@mock.patch.object(upgrade_utils.os_utils, 'async_set_origin')
@mock.patch.object(upgrade_utils, 'run_post_application_upgrade_functions')
@mock.patch.object(
upgrade_utils.series_upgrade_utils, 'async_prepare_series_upgrade')
@@ -376,7 +385,6 @@ class TestParallelSeriesUpgrade(AioTestCase):
mock_async_set_series,
mock_async_prepare_series_upgrade,
mock_post_application_upgrade_functions,
mock_async_set_origin,
):
await upgrade_utils.serial_series_upgrade(
'app',
@@ -395,22 +403,26 @@ class TestParallelSeriesUpgrade(AioTestCase):
mock_series_upgrade_machine.assert_has_calls([
mock.call(
'0',
origin='openstack-origin',
application='app',
files=None,
workaround_script=None,
post_upgrade_functions=None),
mock.call(
'1',
origin='openstack-origin',
application='app',
files=None,
workaround_script=None,
post_upgrade_functions=None),
mock.call(
'2',
origin='openstack-origin',
application='app',
files=None,
workaround_script=None,
post_upgrade_functions=None),
])
mock_async_set_origin.assert_called_once_with(
'app', 'openstack-origin')
mock_post_application_upgrade_functions.assert_called_once_with(None)
@mock.patch.object(
@@ -436,6 +448,35 @@ class TestParallelSeriesUpgrade(AioTestCase):
mock_reboot.assert_called_once_with('1')
mock_async_complete_series_upgrade.assert_called_once_with('1')
@mock.patch.object(upgrade_utils.os_utils, 'async_set_origin')
@mock.patch.object(
upgrade_utils.series_upgrade_utils, 'async_complete_series_upgrade')
@mock.patch.object(upgrade_utils, 'reboot')
@mock.patch.object(upgrade_utils, 'async_do_release_upgrade')
@mock.patch.object(upgrade_utils, 'async_dist_upgrade')
async def test_series_upgrade_machine_with_source(
self,
mock_async_dist_upgrade,
mock_async_do_release_upgrade,
mock_reboot,
mock_async_complete_series_upgrade,
mock_async_set_origin
):
await upgrade_utils.series_upgrade_machine(
'1',
origin='openstack-origin',
application='app',
post_upgrade_functions=None,
pre_upgrade_functions=None,
files=None,
workaround_script=None)
mock_async_dist_upgrade.assert_called_once_with('1')
mock_async_do_release_upgrade.assert_called_once_with('1')
mock_reboot.assert_called_once_with('1')
mock_async_complete_series_upgrade.assert_called_once_with('1')
mock_async_set_origin.assert_called_once_with(
'app', 'openstack-origin')
async def test_maybe_pause_things_primary(self):
await upgrade_utils.maybe_pause_things(
FAKE_STATUS,

View File

@@ -207,8 +207,6 @@ async def parallel_series_upgrade(
pause_non_leader_primary)
await series_upgrade_utils.async_set_series(
application, to_series=to_series)
if origin:
await os_utils.async_set_origin(application, origin)
app_idle = [
wait_for_unit_idle(unit) for unit in status["units"]
]
@@ -223,6 +221,8 @@ async def parallel_series_upgrade(
upgrade_group = [
series_upgrade_machine(
machine,
origin=origin,
application=application,
files=files, workaround_script=workaround_script,
post_upgrade_functions=post_upgrade_functions)
for machine in machines
@@ -308,8 +308,6 @@ async def serial_series_upgrade(
pause_non_leader_primary)
await series_upgrade_utils.async_set_series(
application, to_series=to_series)
if origin:
await os_utils.async_set_origin(application, origin)
if not follower_first and leader_machine not in completed_machines:
await wait_for_unit_idle(leader)
await prepare_series_upgrade(leader_machine, to_series=to_series)
@@ -317,6 +315,8 @@ async def serial_series_upgrade(
.format(application, leader_machine))
await series_upgrade_machine(
leader_machine,
origin=origin,
application=application,
files=files, workaround_script=workaround_script,
post_upgrade_functions=post_upgrade_functions)
completed_machines.append(leader_machine)
@@ -332,6 +332,8 @@ async def serial_series_upgrade(
.format(application, machine))
await series_upgrade_machine(
machine,
origin=origin,
application=application,
files=files, workaround_script=workaround_script,
post_upgrade_functions=post_upgrade_functions)
completed_machines.append(machine)
@@ -343,6 +345,8 @@ async def serial_series_upgrade(
.format(application, leader_machine))
await series_upgrade_machine(
leader_machine,
origin=origin,
application=application,
files=files, workaround_script=workaround_script,
post_upgrade_functions=post_upgrade_functions)
completed_machines.append(leader_machine)
@@ -352,6 +356,8 @@ async def serial_series_upgrade(
async def series_upgrade_machine(
machine,
origin=None,
application=None,
post_upgrade_functions=None,
pre_upgrade_functions=None,
files=None,
@@ -379,6 +385,8 @@ async def series_upgrade_machine(
await async_dist_upgrade(machine)
await async_do_release_upgrade(machine)
await reboot(machine)
if origin:
await os_utils.async_set_origin(application, origin)
await series_upgrade_utils.async_complete_series_upgrade(machine)
await run_post_upgrade_functions(post_upgrade_functions)
@@ -462,8 +470,8 @@ async def maybe_pause_things(
logging.info("Pausing {}".format(unit))
leader_pauses.append(
model.async_run_action(unit, "pause", action_params={}))
await asyncio.gather(*subordinate_pauses)
await asyncio.gather(*leader_pauses)
await asyncio.gather(*subordinate_pauses)
def get_leader_and_non_leaders(status):