From ba7e3ac9e47314de9593f16e62445f271627add8 Mon Sep 17 00:00:00 2001 From: Alex Kavanagh Date: Wed, 2 Jun 2021 10:18:59 +0100 Subject: [PATCH] Fix charm so that on focal it uses named service Pre-focal the service was called 'bind9'. On focal+ it is called 'named'. This patch introduces a number of changes to make this possible: * Modify existing charm class "DesignateBindCharm" to include a check to see if the distro version is "focal" or higher; if so switch the service name to 'named'. Change-Id: Ida65c620fa81715d37e468217aea28f160cf31ee Closes-Bug: #1929770 --- src/lib/charm/openstack/designate_bind.py | 20 +++++++++++ ...test_lib_charm_openstack_designate_bind.py | 34 +++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/src/lib/charm/openstack/designate_bind.py b/src/lib/charm/openstack/designate_bind.py index febc030..718b2f4 100644 --- a/src/lib/charm/openstack/designate_bind.py +++ b/src/lib/charm/openstack/designate_bind.py @@ -236,8 +236,28 @@ class DesignateBindCharm(openstack_charm.OpenStackCharm): group = 'bind' def __init__(self, release=None, **kwargs): + self._ensure_override_service_name() super(DesignateBindCharm, self).__init__(release='icehouse', **kwargs) + @classmethod + def _ensure_override_service_name(cls): + """Override the bind9 service to named for focal+ + + This class is instantiated for all versions of Ubuntu, but we also need + to check for the host being focal to override the named service to + 'named'. + """ + release = host.CompareHostReleases( + host.lsb_release()['DISTRIB_CODENAME']) + if release >= 'focal': + cls.services = ['named'] + cls.restart_map = { + '/etc/bind/named.conf.options': cls.services, + '/etc/bind/named.conf': cls.services, + '/etc/bind/rndc.key': cls.services, + } + cls.default_service = 'named' + @staticmethod def get_rndc_algorithm(): """Algorithm used to encode rndc secret diff --git a/unit_tests/test_lib_charm_openstack_designate_bind.py b/unit_tests/test_lib_charm_openstack_designate_bind.py index 643d61d..d9d736e 100644 --- a/unit_tests/test_lib_charm_openstack_designate_bind.py +++ b/unit_tests/test_lib_charm_openstack_designate_bind.py @@ -33,6 +33,13 @@ class Helper(test_utils.PatchHelper): super().setUp() self.patch('charmhelpers.core.hookenv.config', name='ch_config') self.ch_config.side_effect = lambda: {'ssl_param': None} + self.patch_object(designate_bind, "host", name="ch_core_host") + self.ch_core_host.lsb_release.return_value = { + "DISTRIB_CODENAME": "bionic" + } + # simply the CompareHostReleases to just return then string for + # comparisons. (won't work for xenial/bionic) + self.ch_core_host.CompareHostReleases.side_effect = lambda x: x self.patch('charms_openstack.charm.core._singleton', new=None) @@ -44,6 +51,33 @@ class TestOpenStackDesignateBind(Helper): designate_bind.install() self.install.assert_called_once_with() + def test_service_is_bind9_pre_focal(self): + charm = designate_bind.DesignateBindCharm.singleton + self.assertEqual(charm.services, ["bind9"]) + for v in charm.restart_map.values(): + self.assertEqual(v, ["bind9"]) + self.assertEqual(charm.default_service, "bind9") + + def test_service_is_bind9_when_bionic(self): + self.ch_core_host.lsb_release.return_value = { + "DISTRIB_CODENAME": "bionic" + } + charm = designate_bind.DesignateBindCharm.singleton + self.assertEqual(charm.services, ["bind9"]) + for v in charm.restart_map.values(): + self.assertEqual(v, ["bind9"]) + self.assertEqual(charm.default_service, "bind9") + + def test_service_is_named_focal_plus(self): + self.ch_core_host.lsb_release.return_value = { + "DISTRIB_CODENAME": "focal" + } + charm = designate_bind.DesignateBindCharm.singleton + self.assertEqual(charm.services, ["named"]) + for v in charm.restart_map.values(): + self.assertEqual(v, ["named"]) + self.assertEqual(charm.default_service, "named") + def test_init_rndckey(self): self.patch_object( designate_bind.DesignateBindCharm.singleton, 'init_rndckey')