From 55cc044ea8a3e15cc87cdef132d852f0f2c98e97 Mon Sep 17 00:00:00 2001 From: Frode Nordahl Date: Wed, 23 Feb 2022 14:48:11 +0100 Subject: [PATCH] Fix use of ``openstack-release`` to determine codename The current code will oportunisticly attempt to install the ``openstack-release`` package, but it does so without configuring the UCA sources. Attempt to configure sources to avoid charms getting stuck in a chicken and egg situation. Closes-Bug: #1951462 Change-Id: I8ed6e2dfc7ce83c2e56fd072458e2ef189968e41 --- charms_openstack/charm/core.py | 14 ++++++++++---- unit_tests/charms_openstack/charm/test_core.py | 2 ++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/charms_openstack/charm/core.py b/charms_openstack/charm/core.py index 8eae603..1b2e665 100644 --- a/charms_openstack/charm/core.py +++ b/charms_openstack/charm/core.py @@ -1204,11 +1204,17 @@ class BaseOpenStackCharmActions(object): :raises: AttributeError, ValueError """ - codename = os_utils.get_installed_os_version() - if codename: - return codename - try: + # The purpose of the UCA ``openstack-release`` package is to + # relieve the charm and test code from maintining version maps. + # + # The ``get_installed_os_version`` helper will attempt to install + # it, and that can only happen if the UCA is configured first. + self.configure_source() + codename = os_utils.get_installed_os_version() + if codename: + return codename + vers = self.get_package_version( package, apt_cache_sufficient=apt_cache_sufficient) diff --git a/unit_tests/charms_openstack/charm/test_core.py b/unit_tests/charms_openstack/charm/test_core.py index d5e394d..383577b 100644 --- a/unit_tests/charms_openstack/charm/test_core.py +++ b/unit_tests/charms_openstack/charm/test_core.py @@ -902,12 +902,14 @@ class TestMyOpenStackCharm(BaseOpenStackCharmTest): self.patch_object(chm_core.os_utils, 'get_installed_os_version') self.get_installed_os_version.return_value = None self.upstream_version.return_value = '3.0.0~b1' + self.patch_object(self.target, 'configure_source') self.assertEqual( self.target.get_os_codename_package( 'testpkg', codenames), 'newton') self.upstream_version.assert_called_once_with( pkg_mock.current_ver.ver_str) + self.configure_source.assert_called_once() self.upstream_version.reset_mock() self.assertEqual( self.target.get_os_codename_package(