Merge "Skip version caching for subordinate charms" into stable/zed

This commit is contained in:
Zuul 2023-11-28 19:37:26 +00:00 committed by Gerrit Code Review
commit 748ccc3d48
2 changed files with 29 additions and 2 deletions

View File

@ -1,4 +1,5 @@
import charmhelpers.contrib.openstack.utils as os_utils import charmhelpers.contrib.openstack.utils as os_utils
import charmhelpers.core.hookenv as hookenv
import charmhelpers.core.unitdata as unitdata import charmhelpers.core.unitdata as unitdata
import charms.reactive as reactive import charms.reactive as reactive
@ -97,7 +98,15 @@ def make_default_select_release_handler():
that it doesn't need to keep going and getting it from the package that it doesn't need to keep going and getting it from the package
information. information.
""" """
release_version = unitdata.kv().get(OPENSTACK_RELEASE_KEY, None) release_version = None
# Using the cached OpenStack version will cause undesired behaviors
# if the charm is a subordinate. The charm local cache is firstly
# populated during the charm install and after that, only during the
# openstack upgrades. If the charm is a subordinate, the version will
# always remain the same.
if not hookenv.is_subordinate():
release_version = unitdata.kv().get(OPENSTACK_RELEASE_KEY, None)
if release_version is None: if release_version is None:
try: try:
# First make an attempt of determining release from a charm # First make an attempt of determining release from a charm
@ -125,7 +134,11 @@ def make_default_select_release_handler():
pkg = 'dummy-package' pkg = 'dummy-package'
release_version = os_utils.os_release( release_version = os_utils.os_release(
pkg, source_key=singleton.source_config_key) pkg, source_key=singleton.source_config_key)
unitdata.kv().set(OPENSTACK_RELEASE_KEY, release_version)
# Skip caching the release if the charm is a subordinate.
if not hookenv.is_subordinate():
unitdata.kv().set(OPENSTACK_RELEASE_KEY, release_version)
return release_version return release_version

View File

@ -113,6 +113,7 @@ class TestDefaults(BaseOpenStackCharmTest):
singleton.source_config_key = 'fake-config-key' singleton.source_config_key = 'fake-config-key'
singleton.get_os_codename_package.return_value = None singleton.get_os_codename_package.return_value = None
self.patch_object(chm, 'get_charm_instance', return_value=singleton) self.patch_object(chm, 'get_charm_instance', return_value=singleton)
self.patch_object(chm.hookenv, 'is_subordinate', return_value=False)
# set a release # set a release
kv.get.return_value = 'one' kv.get.return_value = 'one'
release = h.map['function']() release = h.map['function']()
@ -153,6 +154,19 @@ class TestDefaults(BaseOpenStackCharmTest):
self.assertEqual(release, 'four') self.assertEqual(release, 'four')
singleton.get_os_codename_package.assert_called_once_with( singleton.get_os_codename_package.assert_called_once_with(
mock.ANY, mock.ANY, apt_cache_sufficient=True) mock.ANY, mock.ANY, apt_cache_sufficient=True)
# Test subordinate charm
kv.reset_mock()
kv.get.return_value = None
singleton.get_os_codename_package.reset_mock()
singleton.get_os_codename_package.return_value = 'five'
chm.hookenv.is_subordinate.reset_mock()
chm.hookenv.is_subordinate.return_value = True
self.os_release.reset_mock()
self.os_release.return_value = 'five'
release = h.map['function']()
self.assertEqual(release, 'five')
kv.set.assert_not_called()
kv.get.assert_not_called()
def test_default_select_package_type_handler(self): def test_default_select_package_type_handler(self):
self.assertIn('charm.default-select-package-type', self.assertIn('charm.default-select-package-type',