diff --git a/hooks/nova_cc_hooks.py b/hooks/nova_cc_hooks.py index 5b94babd..5ac455fe 100755 --- a/hooks/nova_cc_hooks.py +++ b/hooks/nova_cc_hooks.py @@ -951,6 +951,12 @@ def upgrade_charm(): ch_fetch.apt_install( ch_fetch.filter_installed_packages( ncc_utils.determine_packages()), fatal=True) + packages_removed = ncc_utils.remove_old_packages() + if packages_removed: + hookenv.log("Package purge detected, restarting services", "INFO") + for s in ncc_utils.services(): + ch_host.service_restart(s) + for r_id in hookenv.relation_ids('amqp'): amqp_joined(relation_id=r_id) for r_id in hookenv.relation_ids('identity-service'): diff --git a/hooks/nova_cc_utils.py b/hooks/nova_cc_utils.py index eb5f6411..c2fad786 100644 --- a/hooks/nova_cc_utils.py +++ b/hooks/nova_cc_utils.py @@ -395,6 +395,19 @@ 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 = ch_fetch.filter_missing_packages( + determine_purge_packages()) + if installed_packages: + ch_fetch.apt_purge(installed_packages, fatal=True) + ch_fetch.apt_autoremove(purge=True, fatal=True) + return bool(installed_packages) + + def save_script_rc(): env_vars = { 'OPENSTACK_PORT_MCASTPORT': hookenv.config('ha-mcastport'), @@ -547,11 +560,7 @@ def _do_openstack_upgrade(new_src): ch_utils.reset_os_release() ch_fetch.apt_install(determine_packages(), fatal=True) - installed_pkgs = ch_fetch.filter_missing_packages( - determine_purge_packages()) - if installed_pkgs: - ch_fetch.apt_purge(installed_pkgs, fatal=True) - ch_fetch.apt_autoremove(purge=True, fatal=True) + remove_old_packages() disable_policy_rcd()