diff --git a/hooks/nova_cc_utils.py b/hooks/nova_cc_utils.py index 945ccdd5..81d438e8 100644 --- a/hooks/nova_cc_utils.py +++ b/hooks/nova_cc_utils.py @@ -409,6 +409,14 @@ def determine_packages(): packages = [p for p in packages if not p.startswith('python-')] packages.extend(PY3_PACKAGES) packages.remove('libapache2-mod-wsgi') + if release >= 'stein': + # NOTE(jamespage): + # workaround to deal with lack of functionality to update the db + # connection for Cell 0. At stein, the default SQLAlchemy dialect + # switched to mysqldb, which requires use of mysql+pymysql:// in + # all connection strings, but there is no way to update the + # db url for cell0 as stored in the nova_api DB. + packages.append('python3-mysqldb') return list(set(packages)) diff --git a/unit_tests/test_nova_cc_utils.py b/unit_tests/test_nova_cc_utils.py index 6236ad3c..66146183 100644 --- a/unit_tests/test_nova_cc_utils.py +++ b/unit_tests/test_nova_cc_utils.py @@ -508,7 +508,23 @@ class NovaCCUtilsTests(CharmTestCase): ex.remove('nova-objectstore') ex.remove('nova-api-ec2') self.assertEqual(sorted(ex), sorted(pkgs)) - self.assertEqual(ex, pkgs) + + @patch('charmhelpers.contrib.openstack.context.SubordinateConfigContext') + def test_determine_packages_base_stein(self, subcontext): + self.relation_ids.return_value = [] + self.os_release.return_value = 'stein' + self.token_cache_pkgs.return_value = [] + self.enable_memcache.return_value = False + pkgs = utils.determine_packages() + ex = list(set([p for p in utils.BASE_PACKAGES + utils.BASE_SERVICES + if not p.startswith('python-')] + utils.PY3_PACKAGES)) + # some packages still need to be removed + ex.remove('libapache2-mod-wsgi') + ex.remove('nova-cert') + ex.remove('nova-objectstore') + ex.remove('nova-api-ec2') + ex.append('python3-mysqldb') + self.assertEqual(sorted(ex), sorted(pkgs)) @patch('charmhelpers.contrib.openstack.context.SubordinateConfigContext') def test_determine_packages_serial_console(self, subcontext):