From a47f400e1513a1ca37ae9adfd84006c95acc2fb4 Mon Sep 17 00:00:00 2001 From: Chris MacNaughton Date: Fri, 17 May 2019 07:56:31 +0200 Subject: [PATCH] Ensure we only try to set sysctls outside of a container THe sysctls are not available inside of a container, so we should not set them. Change-Id: I93e1052958a8c8fb44c0589caf7cb5d6a6019ab8 Closes-Bug: #1829047 --- hooks/neutron_hooks.py | 8 ++++++-- unit_tests/test_neutron_hooks.py | 24 ++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/hooks/neutron_hooks.py b/hooks/neutron_hooks.py index 8d29ea4d..42d6a47b 100755 --- a/hooks/neutron_hooks.py +++ b/hooks/neutron_hooks.py @@ -21,6 +21,7 @@ from charmhelpers.fetch import ( apt_purge, ) from charmhelpers.core.host import ( + is_container, lsb_release, ) from charmhelpers.contrib.hahelpers.cluster import( @@ -124,8 +125,11 @@ def config_changed(): sysctl_settings = config('sysctl') if sysctl_settings: - create_sysctl(sysctl_settings, - '/etc/sysctl.d/50-quantum-gateway.conf') + if is_container(): + log("Cannot create sysctls inside of a container", level=WARNING) + else: + create_sysctl(sysctl_settings, + '/etc/sysctl.d/50-quantum-gateway.conf') if config('vendor-data'): write_vendordata(config('vendor-data')) diff --git a/unit_tests/test_neutron_hooks.py b/unit_tests/test_neutron_hooks.py index 1a43033f..2cfec6b0 100644 --- a/unit_tests/test_neutron_hooks.py +++ b/unit_tests/test_neutron_hooks.py @@ -63,6 +63,7 @@ TO_PATCH = [ 'remove_legacy_nova_metadata', 'services', 'remove_old_packages', + 'is_container', ] @@ -76,6 +77,7 @@ class TestQuantumHooks(CharmTestCase): self.lsb_release.return_value = {'DISTRIB_CODENAME': 'precise'} # passthrough self.b64decode.side_effect = lambda arg: arg + self.is_container.return_value = False hookenv.config.side_effect = self.test_config.get hooks.hooks._config_save = False @@ -138,6 +140,28 @@ class TestQuantumHooks(CharmTestCase): '{foo : bar}', '/etc/sysctl.d/50-quantum-gateway.conf') + def test_config_changed_in_container(self): + self.disable_nova_metadata.return_value = False + + def mock_relids(rel): + return ['relid'] + self.test_config.set( + 'sysctl', + '{foo : bar}' + ) + self.openstack_upgrade_available.return_value = True + self.valid_plugin.return_value = True + self.relation_ids.side_effect = mock_relids + self.is_container.return_value = True + _amqp_joined = self.patch('amqp_joined') + _amqp_nova_joined = self.patch('amqp_nova_joined') + self._call_hook('config-changed') + self.assertTrue(self.do_openstack_upgrade.called) + self.assertTrue(self.configure_ovs.called) + self.assertTrue(_amqp_joined.called) + self.assertTrue(_amqp_nova_joined.called) + self.create_sysctl.assert_not_called() + def test_config_changed_upgrade(self): self.disable_nova_metadata.return_value = False self.openstack_upgrade_available.return_value = True