Ensure upgrade installs correct configs

When we do an openstack upgrade we must ensure that
release version dependant decisions are made at the
right time. In this patch we ensure that we choose
configs after the target release packages have been
installed so as to be sure that e.g. when upgrading
from Newton to Ocata the apache2 wsgi conf is
installed for the cinder-api.

Change-Id: I9414940535406c7c7491636839a328df1ac9235b
Closes-Bug: 1726527
This commit is contained in:
Edward Hope-Morley 2017-10-23 23:24:14 +01:00
parent 6c731ad9fe
commit c1653c2113
3 changed files with 17 additions and 7 deletions

View File

@ -30,7 +30,6 @@ from charmhelpers.core.hookenv import (
from cinder_hooks import ( from cinder_hooks import (
config_changed, config_changed,
CONFIGS,
) )
from cinder_utils import ( from cinder_utils import (
@ -48,7 +47,7 @@ def openstack_upgrade():
if (do_action_openstack_upgrade('cinder-common', if (do_action_openstack_upgrade('cinder-common',
do_openstack_upgrade, do_openstack_upgrade,
CONFIGS)): configs=None)):
# tell any storage-backends we just upgraded # tell any storage-backends we just upgraded
for rid in relation_ids('storage-backend'): for rid in relation_ids('storage-backend'):
relation_set(relation_id=rid, relation_set(relation_id=rid,

View File

@ -733,7 +733,7 @@ def set_ceph_env_variables(service):
out.write('env CEPH_ARGS="--id %s"\n' % service) out.write('env CEPH_ARGS="--id %s"\n' % service)
def do_openstack_upgrade(configs): def do_openstack_upgrade(configs=None):
"""Perform an uprade of cinder. Takes care of upgrading """Perform an uprade of cinder. Takes care of upgrading
packages, rewriting configs + database migration and packages, rewriting configs + database migration and
potentially any other post-upgrade actions. potentially any other post-upgrade actions.
@ -756,6 +756,11 @@ def do_openstack_upgrade(configs):
reset_os_release() reset_os_release()
apt_install(determine_packages(), fatal=True) apt_install(determine_packages(), fatal=True)
# NOTE(hopem): must do this after packages have been upgraded so that
# we ensure that correct configs are selected for the target release.
# See LP 1726527.
configs = register_configs()
# set CONFIGS to load templates from new release and regenerate config # set CONFIGS to load templates from new release and regenerate config
configs.set_release(openstack_release=new_os_rel) configs.set_release(openstack_release=new_os_rel)
configs.write_all() configs.write_all()

View File

@ -732,10 +732,12 @@ class TestCinderUtils(CharmTestCase):
out.write('env CEPH_ARGS="--id %s"\n' % service) out.write('env CEPH_ARGS="--id %s"\n' % service)
""" """
@patch.object(cinder_utils, 'register_configs')
@patch.object(cinder_utils, 'services') @patch.object(cinder_utils, 'services')
@patch.object(cinder_utils, 'migrate_database') @patch.object(cinder_utils, 'migrate_database')
@patch.object(cinder_utils, 'determine_packages') @patch.object(cinder_utils, 'determine_packages')
def test_openstack_upgrade_leader(self, pkgs, migrate, services): def test_openstack_upgrade_leader(self, pkgs, migrate, services,
mock_register_configs):
pkgs.return_value = ['mypackage'] pkgs.return_value = ['mypackage']
self.os_release.return_value = 'havana' self.os_release.return_value = 'havana'
self.config.side_effect = None self.config.side_effect = None
@ -743,8 +745,9 @@ class TestCinderUtils(CharmTestCase):
services.return_value = ['cinder-api', 'cinder-volume'] services.return_value = ['cinder-api', 'cinder-volume']
self.is_elected_leader.return_value = True self.is_elected_leader.return_value = True
self.get_os_codename_install_source.return_value = 'havana' self.get_os_codename_install_source.return_value = 'havana'
configs = MagicMock() configs = mock_register_configs.return_value
cinder_utils.do_openstack_upgrade(configs) cinder_utils.do_openstack_upgrade(configs)
self.assertTrue(mock_register_configs.called)
self.assertTrue(configs.write_all.called) self.assertTrue(configs.write_all.called)
self.apt_upgrade.assert_called_with(options=DPKG_OPTIONS, self.apt_upgrade.assert_called_with(options=DPKG_OPTIONS,
fatal=True, dist=True) fatal=True, dist=True)
@ -752,10 +755,12 @@ class TestCinderUtils(CharmTestCase):
configs.set_release.assert_called_with(openstack_release='havana') configs.set_release.assert_called_with(openstack_release='havana')
self.assertTrue(migrate.called) self.assertTrue(migrate.called)
@patch.object(cinder_utils, 'register_configs')
@patch.object(cinder_utils, 'services') @patch.object(cinder_utils, 'services')
@patch.object(cinder_utils, 'migrate_database') @patch.object(cinder_utils, 'migrate_database')
@patch.object(cinder_utils, 'determine_packages') @patch.object(cinder_utils, 'determine_packages')
def test_openstack_upgrade_not_leader(self, pkgs, migrate, services): def test_openstack_upgrade_not_leader(self, pkgs, migrate, services,
mock_register_configs):
pkgs.return_value = ['mypackage'] pkgs.return_value = ['mypackage']
self.os_release.return_value = 'havana' self.os_release.return_value = 'havana'
self.config.side_effect = None self.config.side_effect = None
@ -763,8 +768,9 @@ class TestCinderUtils(CharmTestCase):
services.return_value = ['cinder-api', 'cinder-volume'] services.return_value = ['cinder-api', 'cinder-volume']
self.is_elected_leader.return_value = False self.is_elected_leader.return_value = False
self.get_os_codename_install_source.return_value = 'havana' self.get_os_codename_install_source.return_value = 'havana'
configs = MagicMock() configs = mock_register_configs.return_value
cinder_utils.do_openstack_upgrade(configs) cinder_utils.do_openstack_upgrade(configs)
self.assertTrue(mock_register_configs.called)
self.assertTrue(configs.write_all.called) self.assertTrue(configs.write_all.called)
self.apt_upgrade.assert_called_with(options=DPKG_OPTIONS, self.apt_upgrade.assert_called_with(options=DPKG_OPTIONS,
fatal=True, dist=True) fatal=True, dist=True)