diff --git a/unit_tests/utilities/test_zaza_utilities_parallel_series_upgrade.py b/unit_tests/utilities/test_zaza_utilities_parallel_series_upgrade.py index aefa00b..457ce1b 100644 --- a/unit_tests/utilities/test_zaza_utilities_parallel_series_upgrade.py +++ b/unit_tests/utilities/test_zaza_utilities_parallel_series_upgrade.py @@ -428,6 +428,8 @@ class TestParallelSeriesUpgrade(AioTestCase): ]) mock_post_application_upgrade_functions.assert_called_once_with(None) + @mock.patch.object(upgrade_utils, 'add_confdef_file') + @mock.patch.object(upgrade_utils, 'remove_confdef_file') @mock.patch.object( upgrade_utils.series_upgrade_utils, 'async_complete_series_upgrade') @mock.patch.object(upgrade_utils, 'reboot') @@ -438,7 +440,9 @@ class TestParallelSeriesUpgrade(AioTestCase): mock_async_dist_upgrade, mock_async_do_release_upgrade, mock_reboot, - mock_async_complete_series_upgrade + mock_async_complete_series_upgrade, + mock_remove_confdef_file, + mock_add_confdef_file ): await upgrade_utils.series_upgrade_machine( '1', @@ -450,7 +454,11 @@ class TestParallelSeriesUpgrade(AioTestCase): 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_remove_confdef_file.assert_called_once_with('1') + mock_add_confdef_file.assert_called_once_with('1') + @mock.patch.object(upgrade_utils, 'add_confdef_file') + @mock.patch.object(upgrade_utils, 'remove_confdef_file') @mock.patch.object(upgrade_utils.os_utils, 'async_set_origin') @mock.patch.object( upgrade_utils.series_upgrade_utils, 'async_complete_series_upgrade') @@ -463,7 +471,9 @@ class TestParallelSeriesUpgrade(AioTestCase): mock_async_do_release_upgrade, mock_reboot, mock_async_complete_series_upgrade, - mock_async_set_origin + mock_async_set_origin, + mock_remove_confdef_file, + mock_add_confdef_file ): await upgrade_utils.series_upgrade_machine( '1', @@ -479,6 +489,8 @@ class TestParallelSeriesUpgrade(AioTestCase): mock_async_complete_series_upgrade.assert_called_once_with('1') mock_async_set_origin.assert_called_once_with( 'app', 'openstack-origin') + mock_remove_confdef_file.assert_called_once_with('1') + mock_add_confdef_file.assert_called_once_with('1') async def test_maybe_pause_things_primary(self): await upgrade_utils.maybe_pause_things( @@ -523,6 +535,23 @@ class TestParallelSeriesUpgrade(AioTestCase): pause_non_leader_primary=False) self.async_run_action.assert_not_called() + async def test_add_confdef_file(self): + await upgrade_utils.add_confdef_file('1') + cmd = ( + """echo """ + """'DPkg::options { "--force-confdef"; "--force-confnew"; }' | """ + """sudo tee /etc/apt/apt.conf.d/local""" + ) + self.async_run_on_machine.assert_called_once_with( + '1', cmd + ) + + async def test_remove_confdef_file(self): + await upgrade_utils.remove_confdef_file('1') + self.async_run_on_machine.assert_called_once_with( + '1', 'sudo rm /etc/apt/apt.conf.d/local' + ) + async def test_async_do_release_upgrade(self): await upgrade_utils.async_do_release_upgrade('1') do_release_upgrade_cmd = ( diff --git a/zaza/openstack/utilities/parallel_series_upgrade.py b/zaza/openstack/utilities/parallel_series_upgrade.py index 29e276d..9c49d15 100755 --- a/zaza/openstack/utilities/parallel_series_upgrade.py +++ b/zaza/openstack/utilities/parallel_series_upgrade.py @@ -381,8 +381,10 @@ async def series_upgrade_machine( logging.info( "About to series-upgrade ({})".format(machine)) await run_pre_upgrade_functions(machine, pre_upgrade_functions) + await add_confdef_file(machine) await async_dist_upgrade(machine) await async_do_release_upgrade(machine) + await remove_confdef_file(machine) await reboot(machine) if origin: await os_utils.async_set_origin(application, origin) @@ -390,6 +392,34 @@ async def series_upgrade_machine( await run_post_upgrade_functions(post_upgrade_functions) +async def add_confdef_file(machine): + """Add the file /etc/apt/apt-conf.d/local setup to accept defaults. + + :param machine: The machine to manage + :type machine: str + :returns: None + :rtype: None + """ + create_file = ( + """echo 'DPkg::options { "--force-confdef"; "--force-confnew"; }' | """ + """sudo tee /etc/apt/apt.conf.d/local""" + ) + await model.async_run_on_machine(machine, create_file) + + +async def remove_confdef_file(machine): + """Remove the file /etc/apt/apt-conf.d/local setup to accept defaults. + + :param machine: The machine to manage + :type machine: str + :returns: None + :rtype: None + """ + await model.async_run_on_machine( + machine, + "sudo rm /etc/apt/apt.conf.d/local") + + async def run_pre_upgrade_functions(machine, pre_upgrade_functions): """Execute list supplied functions.