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
This commit is contained in:
James Page 2019-02-22 10:36:18 +00:00
parent 1d626ff983
commit aee921b57e
2 changed files with 28 additions and 0 deletions

View File

@ -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

View File

@ -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):