Fix broken OpenStack pkg version check

The current OpenStack version check uses a package which does not
have semantic versioning and is not listed on the dict of package
version in charmhelpers. This change fixes this by using a package
which does have semantic versioning and is in the dict of versions.
If no package is installed which fit these requirements then
os_release is relied on to fallback to another method (checking
openstack-origin).

Change-Id: I256b2782e83e2619108726eeb27505d5f1854284
Closes-Bug: #1741628
This commit is contained in:
Liam Young 2019-01-28 14:33:18 +00:00
parent 6f83bdef6b
commit db3c8fb6c2
2 changed files with 12 additions and 2 deletions

View File

@ -96,7 +96,13 @@ def make_default_select_release_handler():
"""
release_version = unitdata.kv().get(OPENSTACK_RELEASE_KEY, None)
if release_version is None:
release_version = os_utils.os_release('python-keystonemiddleware')
try:
pkg = os_utils.get_installed_semantic_versioned_packages()[0]
except IndexError:
# A non-existent package will cause os_release to try other
# tactics for deriving the release.
pkg = 'dummy-package'
release_version = os_utils.os_release(pkg)
unitdata.kv().set(OPENSTACK_RELEASE_KEY, release_version)
return release_version

View File

@ -105,6 +105,10 @@ class TestDefaults(BaseOpenStackCharmTest):
kv = mock.MagicMock()
self.patch_object(chm.unitdata, 'kv', new=lambda: kv)
self.patch_object(chm.os_utils, 'os_release')
self.patch_object(
chm.os_utils,
'get_installed_semantic_versioned_packages',
return_value=['cinder-common'])
# set a release
kv.get.return_value = 'one'
release = h.map['function']()
@ -118,7 +122,7 @@ class TestDefaults(BaseOpenStackCharmTest):
release = h.map['function']()
self.assertEqual(release, 'two')
kv.set.assert_called_once_with(chm.OPENSTACK_RELEASE_KEY, 'two')
self.os_release.assert_called_once_with('python-keystonemiddleware')
self.os_release.assert_called_once_with('cinder-common')
def test_default_select_package_type_handler(self):
self.assertIn('charm.default-select-package-type',