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
This commit is contained in:
parent
3831309bf0
commit
4879d1082c
@ -96,54 +96,25 @@ EXAMPLES = '''
|
|||||||
'''
|
'''
|
||||||
|
|
||||||
|
|
||||||
def update_vip_data(conn, network, vip_ports, vip_data):
|
def find_net_vips(conn, stack):
|
||||||
try:
|
return [
|
||||||
vip = next(vip_ports)
|
(dict(name=vip.name,
|
||||||
except StopIteration:
|
network=conn.network.get_network(vip['network_id'])['name'],
|
||||||
return
|
subnet=conn.network.get_subnet(vip.fixed_ips[0]['subnet_id'])['name'],
|
||||||
|
ip_address=vip.fixed_ips[0]['ip_address'],
|
||||||
if not vip.fixed_ips:
|
dns_name=vip.dns_name))
|
||||||
return
|
if vip.dns_name is not None else
|
||||||
|
(dict(name=vip.name,
|
||||||
subnet = conn.network.get_subnet(vip.fixed_ips[0]['subnet_id'])
|
network=conn.network.get_network(vip['network_id'])['name'],
|
||||||
if (vip.dns_name is not None):
|
subnet=conn.network.get_subnet(vip.fixed_ips[0]['subnet_id'])['name'],
|
||||||
vip_data.append(dict(name=vip.name,
|
ip_address=vip.fixed_ips[0]['ip_address']))
|
||||||
network=network.name,
|
for vip in conn.network.ports(tags='tripleo_stack_name={}'.format(stack))
|
||||||
subnet=subnet.name,
|
if [x for x in vip['tags'] if x.startswith('tripleo_vip_net=')]
|
||||||
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 run_module():
|
def run_module():
|
||||||
|
|
||||||
result = dict(
|
result = dict(
|
||||||
success=False,
|
success=False,
|
||||||
changed=False,
|
changed=False,
|
||||||
@ -165,10 +136,8 @@ def run_module():
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
_, conn = openstack_cloud_from_module(module)
|
_, 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['changed'] = True if result['vip_data'] else False
|
||||||
result['success'] = True if result['vip_data'] else False
|
result['success'] = True if result['vip_data'] else False
|
||||||
module.exit_json(**result)
|
module.exit_json(**result)
|
||||||
|
@ -37,16 +37,6 @@ class TestTripleoOvercloudVipExtract(tests_base.TestCase):
|
|||||||
self.a2g = lambda x: (n for n in x)
|
self.a2g = lambda x: (n for n in x)
|
||||||
|
|
||||||
def test_find_net_vips(self, mock_conn):
|
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(
|
fake_network = stubs.FakeNeutronNetwork(
|
||||||
id='internal_api_id',
|
id='internal_api_id',
|
||||||
name='internal_api')
|
name='internal_api')
|
||||||
@ -55,47 +45,21 @@ class TestTripleoOvercloudVipExtract(tests_base.TestCase):
|
|||||||
name='internal_api_subnet')
|
name='internal_api_subnet')
|
||||||
fake_vip_port = stubs.FakeNeutronPort(
|
fake_vip_port = stubs.FakeNeutronPort(
|
||||||
id='internal_api_vip_id',
|
id='internal_api_vip_id',
|
||||||
|
network_id='internal_api_id',
|
||||||
name='internal_api_virtual_ip',
|
name='internal_api_virtual_ip',
|
||||||
fixed_ips=[{'subnet_id': 'internal_api_subnet_id',
|
fixed_ips=[{'subnet_id': 'internal_api_subnet_id',
|
||||||
'ip_address': '1.2.3.4'}],
|
'ip_address': '1.2.3.4'}],
|
||||||
|
tags=['tripleo_stack_name=overcloud', 'tripleo_vip_net=internal_api'],
|
||||||
dns_name='internalapi.localdomain'
|
dns_name='internalapi.localdomain'
|
||||||
)
|
)
|
||||||
mock_conn.network.get_network.return_value = fake_network
|
mock_conn.network.get_network.return_value = fake_network
|
||||||
mock_conn.network.get_subnet.return_value = fake_subnet
|
mock_conn.network.get_subnet.return_value = fake_subnet
|
||||||
mock_conn.network.ports.return_value = self.a2g([fake_vip_port])
|
mock_conn.network.ports.return_value = self.a2g([fake_vip_port])
|
||||||
|
|
||||||
vip_data = list()
|
vip_data = plugin.find_net_vips(mock_conn, 'overcloud')
|
||||||
plugin.find_net_vips(mock_conn, fake_net_resources, vip_data)
|
|
||||||
self.assertEqual([{'name': 'internal_api_virtual_ip',
|
self.assertEqual([{'name': 'internal_api_virtual_ip',
|
||||||
'network': 'internal_api',
|
'network': 'internal_api',
|
||||||
'subnet': 'internal_api_subnet',
|
'subnet': 'internal_api_subnet',
|
||||||
'ip_address': '1.2.3.4',
|
'ip_address': '1.2.3.4',
|
||||||
'dns_name': 'internalapi.localdomain'}],
|
'dns_name': 'internalapi.localdomain'}],
|
||||||
vip_data)
|
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
Block a user