From ff960140447a3ef92e054ae4df66d5393dc8efde Mon Sep 17 00:00:00 2001 From: Liam Young Date: Thu, 15 Nov 2018 14:12:22 +0000 Subject: [PATCH] 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: I215223b41fb2ab6a31df101b5314e6b0859d8322 Closes-Bug: 1803451 --- hooks/ceilometer_hooks.py | 9 +++++++++ hooks/ceilometer_utils.py | 17 +++++++++++++---- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/hooks/ceilometer_hooks.py b/hooks/ceilometer_hooks.py index a4cd77d..ffb159c 100755 --- a/hooks/ceilometer_hooks.py +++ b/hooks/ceilometer_hooks.py @@ -28,6 +28,9 @@ from charmhelpers.core.hookenv import ( status_set, relation_ids, ) +from charmhelpers.core.host import ( + service_restart +) from charmhelpers.contrib.openstack.utils import ( pausable_restart_on_change as restart_on_change, is_unit_paused_set, @@ -43,6 +46,7 @@ from ceilometer_utils import ( get_packages, pause_unit_helper, resume_unit_helper, + remove_old_packages, ) from charmhelpers.contrib.charmsupport import nrpe @@ -81,6 +85,11 @@ def upgrade_charm(): apt_install( filter_installed_packages(get_packages()), fatal=True) + packages_removed = remove_old_packages() + if packages_removed and not is_unit_paused_set(): + log("Package purge detected, restarting services", "INFO") + for s in services(): + service_restart(s) # NOTE(jamespage): Ensure any changes to nova presented data are made # during charm upgrades. for rid in relation_ids('nova-ceilometer'): diff --git a/hooks/ceilometer_utils.py b/hooks/ceilometer_utils.py index 2a84a09..3d3262c 100644 --- a/hooks/ceilometer_utils.py +++ b/hooks/ceilometer_utils.py @@ -152,6 +152,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 restart_map(): ''' Determine the correct resource map to be passed to @@ -213,10 +225,7 @@ def do_openstack_upgrade(configs): # openstack-origin which would not be present in a subordinate. apt_install(get_packages(), fatal=True) - installed_packages = filter_missing_packages(determine_purge_packages()) - if installed_packages: - apt_purge(installed_packages, 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)