Disable neutron inventory src if no ctlplane ports

ctlplane ports created by THT Heat Server
resources, or nova less without --network-ports/--network-config
enabled, does not have the 'tripleo_stack_name' tag. We
shouldn't use neutron as a source if no ctlplane ports are
tagged with the 'tripleo_stack_name'.

This patch add's a check for to ensure atleast 1 port is in the
ctlplane network. If no such port is found _get_neutron_data
returns None, and the inventory generation will continue to use
the heat stack as the source.

Also filter "tripleo_service_vip" and "tripleo_vip_net" ports
when getting the ports so that the test doesn't match on a
control plane virtual IP.

Closes-Bug: #1928926
Change-Id: Ida1cc17ae6b9adf4275e0616706158bfc3b93204
(cherry picked from commit 5d6649fc9d)
This commit is contained in:
Harald Jensås 2021-05-26 10:39:07 +02:00
parent e25e523dfb
commit 983377bae2
1 changed files with 20 additions and 4 deletions

View File

@ -129,7 +129,6 @@ class NeutronData(object):
def _ports_by_role_and_host(self): def _ports_by_role_and_host(self):
mandatory_tags = {'tripleo_role'} mandatory_tags = {'tripleo_role'}
ignore_tags = {'tripleo_vip_net', 'tripleo_service_vip'}
ports_by_role_and_host = {} ports_by_role_and_host = {}
for port in self.ports: for port in self.ports:
@ -138,9 +137,6 @@ class NeutronData(object):
continue continue
tags = self._tags_to_dict(port.tags) tags = self._tags_to_dict(port.tags)
# Ignore non host ports by looking for the tags
if ignore_tags.intersection(tags):
continue
# In case of missing required tags, raise an error. # In case of missing required tags, raise an error.
# neutron is useless as a inventory source in this case. # neutron is useless as a inventory source in this case.
@ -474,6 +470,26 @@ class TripleoInventory(object):
if not ports: if not ports:
return None return None
# Filter tripleo_service_vip and tripleo_vip_net ports
ports = [p for p in ports
if not any("tripleo_service_vip" in tag for tag in p.tags)
and not any("tripleo_vip_net" in tag for tag in p.tags)]
# NOTE(hjensas): ctlplane ports created by THT Heat Server
# resources, or nova less without --network-ports/--network-config
# enabled, does not have the 'tripleo_stack_name' tag. We
# shouldn't use neutron as a source if no ctlplane ports are
# tagged with the 'tripleo_stack_name'.
# See bug: https://bugs.launchpad.net/tripleo/+bug/1928926
found_ctlplane_port = False
ctlplane_net = conn.network.find_network(self.host_network)
for p in ports:
if p.network_id == ctlplane_net.id:
found_ctlplane_port = True
break
if not found_ctlplane_port:
return None
networks = [conn.network.find_network(p.network_id) networks = [conn.network.find_network(p.network_id)
for p in ports] for p in ports]
subnets = [] subnets = []