Support action managed upgrades
Update code to ensure that openstack upgrade does not run via a hook if action-managed-upgrades is set. If the openstack upgrade is being triggered via an action then no interfaces will have been passed so call render_all_configs which will indirectly construct the adapter classes. Depends-On: I1958226576c73d0ce0e9fd4c1423f86addadb454 Change-Id: I33947c474b70c5cd4722688567ba55370b805f65
This commit is contained in:
parent
48bac1b871
commit
785cdb8d61
|
@ -906,22 +906,34 @@ class BaseOpenStackCharmActions(object):
|
|||
apt.init()
|
||||
return apt.version_compare(avail_vers, cur_vers) == 1
|
||||
|
||||
def run_upgrade(self, interfaces_list=None):
|
||||
"""Upgrade OpenStack.
|
||||
|
||||
:param interfaces_list: List of instances of interface classes
|
||||
:returns: None
|
||||
"""
|
||||
hookenv.status_set('maintenance', 'Running openstack upgrade')
|
||||
new_src = self.config['openstack-origin']
|
||||
new_os_rel = os_utils.get_os_codename_install_source(new_src)
|
||||
unitdata.kv().set(OPENSTACK_RELEASE_KEY, new_os_rel)
|
||||
target_charm = get_charm_instance(new_os_rel)
|
||||
target_charm.do_openstack_pkg_upgrade()
|
||||
target_charm.do_openstack_upgrade_config_render(interfaces_list)
|
||||
target_charm.do_openstack_upgrade_db_migration()
|
||||
|
||||
def upgrade_if_available(self, interfaces_list):
|
||||
"""Upgrade OpenStack if an upgrade is available
|
||||
"""Upgrade OpenStack if an upgrade is available and action-managed
|
||||
upgrades is not enabled.
|
||||
|
||||
:param interfaces_list: List of instances of interface classes
|
||||
:returns: None
|
||||
"""
|
||||
if self.openstack_upgrade_available(self.release_pkg):
|
||||
hookenv.status_set('maintenance', 'Running openstack upgrade')
|
||||
new_src = self.config['openstack-origin']
|
||||
new_os_rel = os_utils.get_os_codename_install_source(new_src)
|
||||
unitdata.kv().set(OPENSTACK_RELEASE_KEY,
|
||||
new_os_rel)
|
||||
target_charm = get_charm_instance(new_os_rel)
|
||||
target_charm.do_openstack_pkg_upgrade()
|
||||
target_charm.do_openstack_upgrade_config_render(interfaces_list)
|
||||
target_charm.do_openstack_upgrade_db_migration()
|
||||
if self.config['action-managed-upgrade']:
|
||||
hookenv.log('Not performing OpenStack upgrade as '
|
||||
'action-managed-upgrade is enabled')
|
||||
else:
|
||||
self.run_upgrade(interfaces_list=interfaces_list)
|
||||
|
||||
def do_openstack_pkg_upgrade(self):
|
||||
"""Upgrade OpenStack packages and snaps
|
||||
|
@ -978,12 +990,15 @@ class BaseOpenStackCharmActions(object):
|
|||
return True
|
||||
return False
|
||||
|
||||
def do_openstack_upgrade_config_render(self, interfaces_list):
|
||||
def do_openstack_upgrade_config_render(self, interfaces_list=None):
|
||||
"""Render configs after upgrade
|
||||
|
||||
:returns: None
|
||||
"""
|
||||
self.render_with_interfaces(interfaces_list)
|
||||
if interfaces_list is not None:
|
||||
self.render_with_interfaces(interfaces_list)
|
||||
else:
|
||||
self.render_all_configs()
|
||||
|
||||
def do_openstack_upgrade_db_migration(self):
|
||||
"""Run database migration after upgrade
|
||||
|
|
|
@ -802,24 +802,38 @@ class TestMyOpenStackCharm(BaseOpenStackCharmTest):
|
|||
self.apt.version_compare.assert_called_once_with(3, 2)
|
||||
|
||||
def test_upgrade_if_available(self):
|
||||
self.patch_target('openstack_upgrade_available')
|
||||
self.patch_target('run_upgrade')
|
||||
self.patch_target('openstack_upgrade_available', return_value=True)
|
||||
self.patch_target('config',
|
||||
new={'action-managed-upgrade': False})
|
||||
self.target.upgrade_if_available('int_list')
|
||||
self.run_upgrade.assert_called_once_with(interfaces_list='int_list')
|
||||
|
||||
def test_upgrade_if_available_none_available(self):
|
||||
self.patch_target('run_upgrade')
|
||||
self.patch_target('openstack_upgrade_available', return_value=False)
|
||||
self.target.upgrade_if_available('int_list')
|
||||
self.assertFalse(self.run_upgrade.called)
|
||||
|
||||
def test_upgrade_if_available_action_managed_on(self):
|
||||
self.patch_target('run_upgrade')
|
||||
self.patch_target('openstack_upgrade_available', return_value=True)
|
||||
self.patch_target('config',
|
||||
new={'action-managed-upgrade': True})
|
||||
self.assertFalse(self.run_upgrade.called)
|
||||
|
||||
def test_run_upgrade(self):
|
||||
self.patch_object(chm_core.hookenv, 'status_set')
|
||||
self.patch_target('do_openstack_upgrade_db_migration')
|
||||
self.patch_target('do_openstack_pkg_upgrade')
|
||||
self.patch_target('do_openstack_upgrade_config_render')
|
||||
self.patch_target('do_openstack_upgrade_db_migration')
|
||||
self.patch_target('config',
|
||||
new={'openstack-origin': 'snap:ocata/stable'})
|
||||
self.patch_object(chm_core, 'get_charm_instance')
|
||||
# Test no upgrade avaialble
|
||||
self.openstack_upgrade_available.return_value = False
|
||||
self.target.upgrade_if_available('int_list')
|
||||
self.assertFalse(self.status_set.called)
|
||||
self.assertFalse(self.do_openstack_pkg_upgrade.called)
|
||||
self.assertFalse(self.do_openstack_upgrade_config_render.called)
|
||||
self.assertFalse(self.do_openstack_upgrade_db_migration.called)
|
||||
# Test upgrade avaialble
|
||||
target_charm = mock.MagicMock()
|
||||
self.get_charm_instance.return_value = target_charm
|
||||
self.openstack_upgrade_available.return_value = True
|
||||
self.target.upgrade_if_available('int_list')
|
||||
self.target.run_upgrade('int_list')
|
||||
self.status_set.assert_called_once_with('maintenance',
|
||||
'Running openstack upgrade')
|
||||
target_charm.do_openstack_pkg_upgrade.assert_called_once_with()
|
||||
|
|
Loading…
Reference in New Issue