Purge old packages on upgrade-charm

On charm upgrade the charm may switch to py3 packages. If so, ensure
the old py2 packages are purged. If the purge occurs then restart
services.

Change-Id: I473ed1da342b2294f0f66f836b40387c1f831f5c
Closes-Bug: 1803451
This commit is contained in:
Liam Young 2018-11-15 15:37:54 +00:00
parent 44924c6feb
commit c418880820
3 changed files with 45 additions and 4 deletions

View File

@ -55,6 +55,7 @@ from charmhelpers.fetch import (
from charmhelpers.core.host import (
lsb_release,
service_reload,
service_restart,
)
from charmhelpers.contrib.openstack.utils import (
configure_installation_source,
@ -101,6 +102,7 @@ from hooks.horizon_utils import (
check_custom_theme,
pause_unit_helper,
resume_unit_helper,
remove_old_packages,
)
hooks = Hooks()
@ -133,8 +135,13 @@ def install():
def upgrade_charm():
execd_preinstall()
apt_install(filter_installed_packages(determine_packages()), fatal=True)
packages_removed = remove_old_packages()
update_nrpe_config()
CONFIGS.write_all()
if packages_removed:
log("Package purge detected, restarting services", "INFO")
for s in services():
service_restart(s)
check_custom_theme()

View File

@ -296,6 +296,18 @@ def determine_purge_packages():
return []
def remove_old_packages():
'''Purge any packages that need ot be removed.
:returns: bool Whether packages were removed.
'''
installed_packages = filter_missing_packages(determine_purge_packages())
if installed_packages:
apt_purge(installed_packages, fatal=True)
apt_autoremove(purge=True, fatal=True)
return bool(installed_packages)
def do_openstack_upgrade(configs):
"""
Perform an upgrade. Takes care of upgrading packages, rewriting
@ -319,10 +331,7 @@ def do_openstack_upgrade(configs):
reset_os_release()
apt_install(determine_packages(), fatal=True)
installed_pkgs = filter_missing_packages(determine_purge_packages())
if installed_pkgs:
apt_purge(installed_pkgs, fatal=True)
apt_autoremove(purge=True, fatal=True)
remove_old_packages()
# set CONFIGS to load templates from new release
configs.set_release(openstack_release=new_os_rel)

View File

@ -64,6 +64,9 @@ TO_PATCH = [
'lsb_release',
'status_set',
'update_dns_ha_resource_params',
'services',
'service_restart',
'remove_old_packages',
]
@ -141,6 +144,7 @@ class TestHorizonHooks(CharmTestCase):
_determine_packages,
_custom_theme,
_sleep):
self.remove_old_packages.return_value = False
_determine_packages.return_value = []
side_effects = []
[side_effects.append(None) for f in RESTART_MAP.keys()]
@ -164,6 +168,27 @@ class TestHorizonHooks(CharmTestCase):
# restart_on_change actually sleeps for 9 seconds,
_sleep.assert_called()
@patch('time.sleep')
@patch('hooks.horizon_hooks.check_custom_theme')
@patch.object(hooks, 'determine_packages')
@patch.object(utils, 'path_hash')
@patch.object(utils, 'service')
def test_upgrade_charm_hook_purge(self, _service, _hash,
_determine_packages,
_custom_theme,
_sleep):
self.remove_old_packages.return_value = True
self.services.return_value = ['apache2']
_determine_packages.return_value = []
side_effects = []
[side_effects.append(None) for f in RESTART_MAP.keys()]
[side_effects.append('bar') for f in RESTART_MAP.keys()]
_hash.side_effect = side_effects
self.filter_installed_packages.return_value = ['foo']
self._call_hook('upgrade-charm')
self.remove_old_packages.assert_called_once_with()
self.service_restart.assert_called_once_with('apache2')
def test_ha_joined_complete_config(self):
conf = {
'ha-bindiface': 'eth100',