From aee921b57e5a46c6126306480cd01413d983d89b Mon Sep 17 00:00:00 2001 From: James Page Date: Fri, 22 Feb 2019 10:36:18 +0000 Subject: [PATCH] Release based management of haproxy context Ensure that the haproxy context reflects the services associated with the specific release of OpenStack being deployment. < kilo: ec2 and s3 services deployed >= ocata: placement service deployed Change-Id: I0d44aa361595f777df625d3a4a0f2a0cd2f81660 Closes-Bug: 1811398 --- hooks/nova_cc_context.py | 12 ++++++++++++ unit_tests/test_nova_cc_contexts.py | 16 ++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/hooks/nova_cc_context.py b/hooks/nova_cc_context.py index 1029dc53..d28bb9bc 100644 --- a/hooks/nova_cc_context.py +++ b/hooks/nova_cc_context.py @@ -158,6 +158,8 @@ class HAProxyContext(ch_context.HAProxyContext): ''' ctxt = super(HAProxyContext, self).__call__() + os_rel = ch_utils.os_release('nova-common') + cmp_os_rel = ch_utils.CompareOpenStackReleases(os_rel) # determine which port api processes should bind to, depending # on existence of haproxy + apache frontends compute_api = ch_cluster.determine_api_port( @@ -203,6 +205,16 @@ class HAProxyContext(ch_context.HAProxyContext): common.api_port('nova-api-metadata'), a_metadata_api], } + if cmp_os_rel >= 'kilo': + del listen_ports['ec2_listen_port'] + del listen_ports['s3_listen_port'] + del port_mapping['nova-api-ec2'] + del port_mapping['nova-objectstore'] + + if cmp_os_rel < 'ocata': + del listen_ports['placement_listen_port'] + del port_mapping['nova-placement-api'] + # for haproxy.conf ctxt['service_ports'] = port_mapping # for nova.conf diff --git a/unit_tests/test_nova_cc_contexts.py b/unit_tests/test_nova_cc_contexts.py index bd6820af..17e43d23 100644 --- a/unit_tests/test_nova_cc_contexts.py +++ b/unit_tests/test_nova_cc_contexts.py @@ -150,6 +150,7 @@ class NovaComputeContextTests(CharmTestCase): mock_get_address_in_network, mock_kv, mock_https, mock_unit_get, mock_network_manager, mock_mkdir, mock_get_relation_ip, mock_config): + self.os_release.return_value = 'ocata' mock_config.side_effect = self.test_config.get mock_https.return_value = False mock_unit_get.return_value = '127.0.0.1' @@ -157,6 +158,21 @@ class NovaComputeContextTests(CharmTestCase): ctxt = context.HAProxyContext()() self.assertEqual(ctxt['service_ports']['nova-api-os-compute'], [8774, 8764]) + self.assertTrue('nova-placement-api' in ctxt['service_ports']) + self.assertTrue('nova-api-ec2' not in ctxt['service_ports']) + self.assertTrue('nova-objectstore' not in ctxt['service_ports']) + + self.os_release.return_value = 'icehouse' + ctxt = context.HAProxyContext()() + self.assertTrue('nova-placement-api' not in ctxt['service_ports']) + self.assertTrue('nova-api-ec2' in ctxt['service_ports']) + self.assertTrue('nova-objectstore' in ctxt['service_ports']) + + self.os_release.return_value = 'kilo' + ctxt = context.HAProxyContext()() + self.assertTrue('nova-placement-api' not in ctxt['service_ports']) + self.assertTrue('nova-api-ec2' not in ctxt['service_ports']) + self.assertTrue('nova-objectstore' not in ctxt['service_ports']) @mock.patch('charmhelpers.contrib.openstack.context.config') def test_console_ssl_disabled(self, mock_config):