Improve vip extraction for the multi-cell
The multi-cell stacks don't have networks and only tag
the ports. The code now simply mixes ports of multiple
stacks together. To resolve this we filter for the
tags of stacks in the vip ports.
Co-authored-by: Daniel Bengtsson <dbengt@redhat.com>
Change-Id: Id3eacdb631a7a7102d28ca4b9963fed3d99f2414
(cherry picked from commit 685896e50c
)
This commit is contained in:
parent
1b90d9f3d1
commit
32acc044a7
|
@ -96,54 +96,25 @@ EXAMPLES = '''
|
|||
'''
|
||||
|
||||
|
||||
def update_vip_data(conn, network, vip_ports, vip_data):
|
||||
try:
|
||||
vip = next(vip_ports)
|
||||
except StopIteration:
|
||||
return
|
||||
|
||||
if not vip.fixed_ips:
|
||||
return
|
||||
|
||||
subnet = conn.network.get_subnet(vip.fixed_ips[0]['subnet_id'])
|
||||
if (vip.dns_name is not None):
|
||||
vip_data.append(dict(name=vip.name,
|
||||
network=network.name,
|
||||
subnet=subnet.name,
|
||||
ip_address=vip.fixed_ips[0]['ip_address'],
|
||||
dns_name=vip.dns_name))
|
||||
else:
|
||||
vip_data.append(dict(name=vip.name,
|
||||
network=network.name,
|
||||
subnet=subnet.name,
|
||||
ip_address=vip.fixed_ips[0]['ip_address']))
|
||||
|
||||
|
||||
def find_net_vips(conn, net_resrcs, vip_data):
|
||||
for net in net_resrcs:
|
||||
for res in net_resrcs[net]:
|
||||
if not net_resrcs[net][res]['resource_type'] == n_utils.TYPE_NET:
|
||||
continue
|
||||
|
||||
network = conn.network.get_network(
|
||||
net_resrcs[net][res][n_utils.RES_ID])
|
||||
vip_ports = conn.network.ports(
|
||||
network_id=network.id,
|
||||
tags='tripleo_vip_net={}'.format(network.name))
|
||||
|
||||
update_vip_data(conn, network, vip_ports, vip_data)
|
||||
|
||||
|
||||
def find_ctlplane_vip(conn, vip_data):
|
||||
network = conn.network.find_network('ctlplane')
|
||||
vip_ports = conn.network.ports(
|
||||
network_id=network.id,
|
||||
name='control{}'.format(n_utils.NET_VIP_SUFFIX))
|
||||
|
||||
update_vip_data(conn, network, vip_ports, vip_data)
|
||||
def find_net_vips(conn, stack):
|
||||
return [
|
||||
(dict(name=vip.name,
|
||||
network=conn.network.get_network(vip['network_id'])['name'],
|
||||
subnet=conn.network.get_subnet(vip.fixed_ips[0]['subnet_id'])['name'],
|
||||
ip_address=vip.fixed_ips[0]['ip_address'],
|
||||
dns_name=vip.dns_name))
|
||||
if vip.dns_name is not None else
|
||||
(dict(name=vip.name,
|
||||
network=conn.network.get_network(vip['network_id'])['name'],
|
||||
subnet=conn.network.get_subnet(vip.fixed_ips[0]['subnet_id'])['name'],
|
||||
ip_address=vip.fixed_ips[0]['ip_address']))
|
||||
for vip in conn.network.ports(tags='tripleo_stack_name={}'.format(stack))
|
||||
if [x for x in vip['tags'] if x.startswith('tripleo_vip_net=')]
|
||||
]
|
||||
|
||||
|
||||
def run_module():
|
||||
|
||||
result = dict(
|
||||
success=False,
|
||||
changed=False,
|
||||
|
@ -165,10 +136,8 @@ def run_module():
|
|||
|
||||
try:
|
||||
_, conn = openstack_cloud_from_module(module)
|
||||
net_resources = n_utils.get_overcloud_network_resources(conn, stack)
|
||||
find_net_vips(conn, net_resources, result['vip_data'])
|
||||
find_ctlplane_vip(conn, result['vip_data'])
|
||||
|
||||
result['vip_data'] = find_net_vips(conn, stack)
|
||||
result['changed'] = True if result['vip_data'] else False
|
||||
result['success'] = True if result['vip_data'] else False
|
||||
module.exit_json(**result)
|
||||
|
|
|
@ -37,16 +37,6 @@ class TestTripleoOvercloudVipExtract(tests_base.TestCase):
|
|||
self.a2g = lambda x: (n for n in x)
|
||||
|
||||
def test_find_net_vips(self, mock_conn):
|
||||
fake_net_resources = {
|
||||
'StorageNetwork': {
|
||||
'InternalApiNetwork': {'physical_resource_id': 'fake-id',
|
||||
'resource_type': n_utils.TYPE_NET},
|
||||
'StorageSubnet': {'physical_resource_id': 'fake-id',
|
||||
'resource_type': n_utils.TYPE_SUBNET},
|
||||
'StorageSubnet_leaf1': {'physical_resource_id': 'fake-id',
|
||||
'resource_type': n_utils.TYPE_SUBNET}
|
||||
}
|
||||
}
|
||||
fake_network = stubs.FakeNeutronNetwork(
|
||||
id='internal_api_id',
|
||||
name='internal_api')
|
||||
|
@ -55,47 +45,21 @@ class TestTripleoOvercloudVipExtract(tests_base.TestCase):
|
|||
name='internal_api_subnet')
|
||||
fake_vip_port = stubs.FakeNeutronPort(
|
||||
id='internal_api_vip_id',
|
||||
network_id='internal_api_id',
|
||||
name='internal_api_virtual_ip',
|
||||
fixed_ips=[{'subnet_id': 'internal_api_subnet_id',
|
||||
'ip_address': '1.2.3.4'}],
|
||||
tags=['tripleo_stack_name=overcloud', 'tripleo_vip_net=internal_api'],
|
||||
dns_name='internalapi.localdomain'
|
||||
)
|
||||
mock_conn.network.get_network.return_value = fake_network
|
||||
mock_conn.network.get_subnet.return_value = fake_subnet
|
||||
mock_conn.network.ports.return_value = self.a2g([fake_vip_port])
|
||||
|
||||
vip_data = list()
|
||||
plugin.find_net_vips(mock_conn, fake_net_resources, vip_data)
|
||||
vip_data = plugin.find_net_vips(mock_conn, 'overcloud')
|
||||
self.assertEqual([{'name': 'internal_api_virtual_ip',
|
||||
'network': 'internal_api',
|
||||
'subnet': 'internal_api_subnet',
|
||||
'ip_address': '1.2.3.4',
|
||||
'dns_name': 'internalapi.localdomain'}],
|
||||
vip_data)
|
||||
|
||||
def test_find_ctlplane_vip(self, mock_conn):
|
||||
fake_network = stubs.FakeNeutronNetwork(
|
||||
id='ctlplane_id',
|
||||
name='ctlplane')
|
||||
fake_subnet = stubs.FakeNeutronSubnet(
|
||||
id='ctlplane_subnet_id',
|
||||
name='ctlplane-subnet')
|
||||
fake_vip_port = stubs.FakeNeutronPort(
|
||||
id='ctlplane_vip_id',
|
||||
name='control_virtual_ip',
|
||||
fixed_ips=[{'subnet_id': 'ctlplane_subnet_id',
|
||||
'ip_address': '4.3.2.1'}],
|
||||
dns_name='ctlplane.localdomain'
|
||||
)
|
||||
mock_conn.network.find_network.return_value = fake_network
|
||||
mock_conn.network.get_subnet.return_value = fake_subnet
|
||||
mock_conn.network.ports.return_value = self.a2g([fake_vip_port])
|
||||
|
||||
vip_data = list()
|
||||
plugin.find_ctlplane_vip(mock_conn, vip_data)
|
||||
self.assertEqual([{'name': 'control_virtual_ip',
|
||||
'network': 'ctlplane',
|
||||
'subnet': 'ctlplane-subnet',
|
||||
'ip_address': '4.3.2.1',
|
||||
'dns_name': 'ctlplane.localdomain'}],
|
||||
vip_data)
|
||||
|
|
Loading…
Reference in New Issue