Fix alphanumeric comparisons for openstack and ubuntu releases

- sync charmhelpers with fix-alpha helpers
- fix up code where the alpha comparisons are done
- fix tests which assumed mocks would just work on os_release()

Change-Id: I3d142f04bedc7dde12f3c079534cd43841fa8401
Related-Bug: #1659575
This commit is contained in:
Alex Kavanagh 2017-03-29 12:32:11 +01:00
parent 8e47569e74
commit 628b106f12
6 changed files with 32 additions and 16 deletions

View File

@ -47,6 +47,7 @@ from charmhelpers.contrib.openstack.utils import (
openstack_upgrade_available,
pausable_restart_on_change as restart_on_change,
is_unit_paused_set,
CompareOpenStackReleases,
)
from charmhelpers.contrib.openstack.ha.utils import (
update_dns_ha_resource_params,
@ -234,7 +235,7 @@ def install_ceilometer_ocf():
dest_file = LEGACY_OCF_FILE
src_file = 'ocf/openstack/ceilometer-agent-central'
if os_release('ceilometer-common') >= 'liberty':
if CompareOpenStackReleases(os_release('ceilometer-common')) >= 'liberty':
dest_file = "/usr/lib/ocf/resource.d/openstack/ceilometer-polling"
src_file = 'ocf/openstack/ceilometer-polling'
# delete ocf file due to package no longer exists after upgrade
@ -288,7 +289,7 @@ def ha_joined(relation_id=None):
delete_resources = []
RES_KEY = LEGACY_RES_KEY
if os_release('ceilometer-common') >= 'liberty':
if CompareOpenStackReleases(os_release('ceilometer-common')) >= 'liberty':
RES_KEY = NEW_RES_KEY
delete_resources.append(LEGACY_RES_KEY)

View File

@ -19,7 +19,10 @@ from charmhelpers.core.hookenv import (
config
)
from charmhelpers.contrib.openstack.utils import os_release
from charmhelpers.contrib.openstack.utils import (
os_release,
CompareOpenStackReleases,
)
from charmhelpers.contrib.openstack.context import (
OSContextGenerator,
@ -46,7 +49,8 @@ class MongoDBContext(OSContextGenerator):
def __call__(self):
mongo_servers = []
replset = None
use_replset = os_release('ceilometer-common') >= 'icehouse'
_release = os_release('ceilometer-common')
use_replset = CompareOpenStackReleases(_release) >= 'icehouse'
for relid in relation_ids('shared-db'):
rel_units = related_units(relid)

View File

@ -41,6 +41,7 @@ from charmhelpers.contrib.openstack.utils import (
os_application_version_set,
token_cache_pkgs,
enable_memcache,
CompareOpenStackReleases,
)
from charmhelpers.core.hookenv import config, log
from charmhelpers.fetch import apt_update, apt_install, apt_upgrade
@ -159,8 +160,8 @@ def register_configs():
# if called without anything installed (eg during install hook)
# just default to earliest supported release. configs dont get touched
# till post-install, anyway.
release = get_os_codename_package('ceilometer-common', fatal=False) \
or 'grizzly'
release = (get_os_codename_package('ceilometer-common', fatal=False) or
'grizzly')
configs = templating.OSConfigRenderer(templates_dir=TEMPLATES,
openstack_release=release)
@ -234,8 +235,9 @@ def services():
_services = set(_services)
# Bug#1664898 Remove check for ceilometer-agent-central
# service.
codename = get_os_codename_install_source(config('openstack-origin'))
if codename >= 'liberty' and 'ceilometer-agent-central' in _services:
cmp_codename = CompareOpenStackReleases(
get_os_codename_install_source(config('openstack-origin')))
if cmp_codename >= 'liberty' and 'ceilometer-agent-central' in _services:
_services.remove('ceilometer-agent-central')
return list(_services)
@ -291,20 +293,22 @@ def do_openstack_upgrade(configs):
def ceilometer_release_services():
codename = get_os_codename_install_source(config('openstack-origin'))
if codename >= 'mitaka':
cmp_codename = CompareOpenStackReleases(
get_os_codename_install_source(config('openstack-origin')))
if cmp_codename >= 'mitaka':
return MITAKA_SERVICES
elif codename >= 'icehouse':
elif cmp_codename >= 'icehouse':
return ICEHOUSE_SERVICES
else:
return []
def ceilometer_release_packages():
codename = get_os_codename_install_source(config('openstack-origin'))
if codename >= 'mitaka':
cmp_codename = CompareOpenStackReleases(
get_os_codename_install_source(config('openstack-origin')))
if cmp_codename >= 'mitaka':
return MITAKA_PACKAGES
elif codename >= 'icehouse':
elif cmp_codename >= 'icehouse':
return ICEHOUSE_PACKAGES
else:
return []
@ -424,7 +428,7 @@ def run_in_apache():
"""Return true if ceilometer API is run under apache2 with mod_wsgi in
this release.
"""
return os_release('ceilometer-common') >= 'ocata'
return CompareOpenStackReleases(os_release('ceilometer-common')) >= 'ocata'
def disable_package_apache_site():

View File

@ -14,7 +14,7 @@ install_command =
pip install --allow-unverified python-apt {opts} {packages}
commands = ostestr {posargs}
whitelist_externals = juju
passenv = HOME TERM AMULET_* CS_API_URL
passenv = HOME TERM AMULET_* CS_API_*
[testenv:py27]
basepython = python2.7

View File

@ -65,6 +65,7 @@ class CeilometerContextsTest(CharmTestCase):
'port': 8090
}
self.test_relation.set(data)
self.os_release.return_value = 'havana'
self.assertEquals(contexts.MongoDBContext()(),
{'db_host': 'mongodb', 'db_port': 8090,
'db_name': 'ceilometer'})

View File

@ -52,6 +52,7 @@ class CeilometerUtilsTest(CharmTestCase):
def test_register_configs(self):
self.os.path.exists.return_value = True
self.init_is_systemd.return_value = False
self.os_release.return_value = 'havana'
configs = utils.register_configs()
calls = []
for conf in (utils.CEILOMETER_CONF, utils.HAPROXY_CONF,
@ -63,6 +64,7 @@ class CeilometerUtilsTest(CharmTestCase):
def test_register_configs_apache22(self):
self.os.path.exists.return_value = False
self.init_is_systemd.return_value = False
self.os_release.return_value = 'havana'
configs = utils.register_configs()
calls = []
for conf in (utils.CEILOMETER_CONF, utils.HAPROXY_CONF,
@ -74,6 +76,7 @@ class CeilometerUtilsTest(CharmTestCase):
def test_register_configs_systemd(self):
self.os.path.exists.return_value = True
self.init_is_systemd.return_value = True
self.os_release.return_value = 'havana'
configs = utils.register_configs()
calls = []
for conf in (utils.CEILOMETER_CONF, utils.HAPROXY_CONF,
@ -99,6 +102,7 @@ class CeilometerUtilsTest(CharmTestCase):
def test_restart_map(self):
"""Ensure that alarming services are present for < OpenStack Mitaka"""
self.get_os_codename_install_source.return_value = 'icehouse'
self.os_release.return_value = 'icehouse'
restart_map = utils.restart_map()
self.assertEquals(
restart_map,
@ -123,6 +127,7 @@ class CeilometerUtilsTest(CharmTestCase):
def test_restart_map_mitaka(self):
"""Ensure that alarming services are missing for OpenStack Mitaka"""
self.get_os_codename_install_source.return_value = 'mitaka'
self.os_release.return_value = 'mitaka'
self.maxDiff = None
restart_map = utils.restart_map()
self.assertEquals(
@ -159,6 +164,7 @@ class CeilometerUtilsTest(CharmTestCase):
self.config.side_effect = self.test_config.get
self.test_config.set('openstack-origin', 'cloud:trusty-kilo')
self.get_os_codename_install_source.return_value = 'kilo'
self.os_release.return_value = 'kilo'
self.enable_memcache.return_value = False
configs = MagicMock()
utils.do_openstack_upgrade(configs)