From 2600260be5ad99da36775e470758591d8fcd2ca9 Mon Sep 17 00:00:00 2001 From: Brendan Date: Mon, 10 Jun 2019 16:52:25 +1000 Subject: [PATCH] Ensure no duplicate IPs are used in undercloud.conf If duplicate IPs are used in undercloud.conf it will cause issues with haproxy. Closes-Bug: #1832168 Change-Id: I35547080aee943438d34b2d62632795af32f8462 --- .../tests/v1/undercloud/test_config.py | 38 +++++++++++++++++++ tripleoclient/v1/undercloud_config.py | 15 ++++++++ 2 files changed, 53 insertions(+) diff --git a/tripleoclient/tests/v1/undercloud/test_config.py b/tripleoclient/tests/v1/undercloud/test_config.py index 634e3491e..df8fee1b4 100644 --- a/tripleoclient/tests/v1/undercloud/test_config.py +++ b/tripleoclient/tests/v1/undercloud/test_config.py @@ -230,6 +230,44 @@ class TestNetworkSettings(base.TestCase): undercloud_config._process_network_args, env) + def test_undercloud_ips_duplicated_fail(self): + env = {} + + # local_ip == undercloud_admin_host + self.conf.config(local_ip='192.168.24.1/24', + undercloud_admin_host='192.168.24.1', + undercloud_public_host='192.168.24.2', + generate_service_certificate=True) + self.assertRaises(exceptions.InvalidConfiguration, + undercloud_config._process_network_args, + env) + + # local_ip == undercloud_public_host + self.conf.config(local_ip='192.168.24.1/24', + undercloud_admin_host='192.168.24.3', + undercloud_public_host='192.168.24.1', + generate_service_certificate=True) + self.assertRaises(exceptions.InvalidConfiguration, + undercloud_config._process_network_args, + env) + + # undercloud_admin_host == undercloud_public_host + self.conf.config(local_ip='192.168.24.1/24', + undercloud_admin_host='192.168.24.2', + undercloud_public_host='192.168.24.2', + generate_service_certificate=True) + self.assertRaises(exceptions.InvalidConfiguration, + undercloud_config._process_network_args, + env) + + # We do not care about ip duplication when ssl is disabled + self.conf.config(local_ip='192.168.24.1/24', + undercloud_admin_host='192.168.24.1', + undercloud_public_host='192.168.24.2', + generate_service_certificate=False, + undercloud_service_certificate='') + undercloud_config._process_network_args(env) + def test_start_end_all_addresses(self): self.conf.config(dhcp_start='192.168.24.0', dhcp_end='192.168.24.255', diff --git a/tripleoclient/v1/undercloud_config.py b/tripleoclient/v1/undercloud_config.py index 79d4c902e..5593729d7 100644 --- a/tripleoclient/v1/undercloud_config.py +++ b/tripleoclient/v1/undercloud_config.py @@ -359,6 +359,21 @@ def _process_network_args(env): env['RedisIPv6'] = True env['MysqlIPv6'] = True + # We do not use undercloud ips for env, but just validate the configured + # value here. + if (CONF.get('generate_service_certificate') or + CONF.get('undercloud_service_certificate')): + undercloud_ips = [ + CONF.local_ip.split('/')[0], + CONF.undercloud_admin_host, + CONF.undercloud_public_host + ] + if len(undercloud_ips) != len(set(undercloud_ips)): + msg = ("The same IP is used for multiple endpoints. Please use " + "unique ips for local_ip, undercloud_admin_host and " + "undercloud_public_host") + raise exceptions.InvalidConfiguration(msg) + def prepare_undercloud_deploy(upgrade=False, no_validations=False, verbose_level=1, yes=False,