Reset os_release cached value after upgrade

In enable_memcache, ensure that the os_release cache is reset
after upgrade.

Additionally, call apt_install(get_packages()) for upgrades
to ensure that release-specific packages (such as memcached)
are installed.

Change-Id: Ia3689d2d0c549fc55f1bd533654f80c98ce5462a
Partial-Bug: 1715624
This commit is contained in:
Corey Bryant 2017-09-07 15:46:11 +00:00
parent 03bd32eb74
commit 2c47665758
4 changed files with 42 additions and 5 deletions

View File

@ -33,6 +33,8 @@ from charmhelpers.contrib.openstack.utils import (
configure_installation_source,
openstack_upgrade_available,
pausable_restart_on_change as restart_on_change,
os_release,
CompareOpenStackReleases,
)
from ceilometer_utils import (
restart_map,
@ -101,6 +103,15 @@ def config_changed():
if openstack_upgrade_available('ceilometer-common'):
status_set('maintenance', 'Running openstack upgrade')
do_openstack_upgrade(CONFIGS)
else:
# It's possible that a partial upgrade has occurred if nova-compute
# was upgraded first. If > mitaka call apt_install to allow
# packages which are enabled for specific OpenStack version to be
# installed if they haven't been already.
os_rel = os_release('ceilometer-common', reset_cache=True)
if (CompareOpenStackReleases(os_rel) >= 'mitaka'):
apt_install(filter_installed_packages(get_packages()),
fatal=True)
if is_relation_made('nrpe-external-master'):
update_nrpe_config()
CONFIGS.write_all()

View File

@ -30,6 +30,7 @@ from charmhelpers.contrib.openstack.utils import (
os_application_version_set,
token_cache_pkgs,
enable_memcache,
reset_os_release,
)
from charmhelpers.core.hookenv import (
config,
@ -163,9 +164,16 @@ def do_openstack_upgrade(configs):
]
apt_update(fatal=True)
apt_upgrade(options=dpkg_opts, fatal=True, dist=True)
reset_os_release()
apt_install(packages=CEILOMETER_AGENT_PACKAGES,
options=dpkg_opts,
fatal=True)
# Call apt_install a 2nd time to allow packages which are enabled
# for specific OpenStack version to be installed . This is because
# Openstack version for a subordinate should be derived from the
# version of an installed package rather than relying on
# openstack-origin which would not be present in a subordinate.
apt_install(get_packages(), fatal=True)
# set CONFIGS to load templates from new release
configs.set_release(openstack_release=new_os_rel)

View File

@ -40,6 +40,7 @@ TO_PATCH = [
'update_nrpe_config',
'is_relation_made',
'get_packages',
'os_release',
]
@ -90,12 +91,26 @@ class CeilometerHooksTest(CharmTestCase):
@patch('charmhelpers.core.hookenv.config')
def test_config_changed_no_upgrade(self, mock_config):
self.openstack_upgrade_available.return_value = False
self.os_release.return_value = 'liberty'
hooks.hooks.execute(['hooks/config-changed'])
self.openstack_upgrade_available.\
assert_called_with('ceilometer-common')
self.assertFalse(self.do_openstack_upgrade.called)
self.assertTrue(self.CONFIGS.write_all.called)
self.assertTrue(self.update_nrpe_config.called)
self.assertFalse(self.apt_install.called)
@patch('charmhelpers.core.hookenv.config')
def test_config_changed_partial_upgrade(self, mock_config):
self.openstack_upgrade_available.return_value = False
self.os_release.return_value = 'mitaka'
hooks.hooks.execute(['hooks/config-changed'])
self.openstack_upgrade_available.\
assert_called_with('ceilometer-common')
self.assertFalse(self.do_openstack_upgrade.called)
self.assertTrue(self.CONFIGS.write_all.called)
self.assertTrue(self.update_nrpe_config.called)
self.assertTrue(self.apt_install.called)
@patch('charmhelpers.core.hookenv.config')
def test_config_changed_upgrade(self, mock_config):
@ -118,6 +133,7 @@ class CeilometerHooksTest(CharmTestCase):
@patch('charmhelpers.core.hookenv.config')
def test_config_changed_no_nrpe(self, mock_config):
self.openstack_upgrade_available.return_value = False
self.os_release.return_value = 'mitaka'
self.is_relation_made.return_value = False
hooks.hooks.execute(['hooks/config-changed'])

View File

@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
from mock import MagicMock, patch
from mock import MagicMock, patch, call
import ceilometer_utils as utils
@ -85,10 +85,12 @@ class CeilometerUtilsTest(CharmTestCase):
'--option', 'Dpkg::Options::=--force-confnew',
'--option', 'Dpkg::Options::=--force-confdef',
]
self.apt_install.assert_called_with(
packages=utils.CEILOMETER_AGENT_PACKAGES,
options=dpkg_opts, fatal=True
)
self.apt_install.assert_has_calls([
call(packages=utils.CEILOMETER_AGENT_PACKAGES,
options=dpkg_opts, fatal=True),
call(['python-ceilometer', 'ceilometer-common',
'ceilometer-agent-compute'], fatal=True),
])
self.configure_installation_source.assert_called_with(
'cloud:precise-havana'
)