Follow up to Option to send all portgroup data

Clarifies the code in add_ports_to_network() so that it is clear
that the ironic ports that are created in neutron are not necessarily
all pxe-enabled. Adds more comments to describe the behaviour if
non-pxe-enabled ports are created in neutron.

Fixes a typo in the corresponding release note.

This is a follow up to I8d0f4e28efb05af704839f3b92cb3dfd48d57940.

Change-Id: I94ff18bc137401ff4cd316755408c2099bb563cb
Story: 2005494
This commit is contained in:
Ruby Loo 2019-08-20 13:01:33 -04:00
parent ed5f8a67af
commit 27fc3d0bc1
2 changed files with 16 additions and 10 deletions

View File

@ -198,6 +198,10 @@ def add_ports_to_network(task, network_uuid, security_groups=None):
Create neutron ports for each pxe_enabled port on task.node to boot
the ramdisk.
If the config option 'neutron.add_all_ports' is set, neutron ports
for non-pxe-enabled ports are also created -- these neutron ports
will not have any assigned IP addresses.
:param task: a TaskManager instance.
:param network_uuid: UUID of a neutron network where ports will be
created.
@ -240,14 +244,16 @@ def add_ports_to_network(task, network_uuid, security_groups=None):
portmap = get_node_portmap(task)
if not add_all_ports:
pxe_enabled_ports = [p for p in task.ports if p.pxe_enabled]
ports_to_create = [p for p in task.ports if p.pxe_enabled]
else:
pxe_enabled_ports = task.ports
if not pxe_enabled_ports:
ports_to_create = task.ports
if not ports_to_create:
pxe_enabled = 'PXE-enabled ' if not add_all_ports else ''
raise exception.NetworkError(_(
"No available PXE-enabled port on node %s.") % node.uuid)
"No available %(enabled)sports on node %(node)s.") %
{'enabled': pxe_enabled, 'node': node.uuid})
for ironic_port in pxe_enabled_ports:
for ironic_port in ports_to_create:
# Start with a clean state for each port
port_body = copy.deepcopy(body)
# Skip ports that are missing required information for deploy.
@ -259,7 +265,7 @@ def add_ports_to_network(task, network_uuid, security_groups=None):
[portmap[ironic_port.uuid]]}
port_body['port']['binding:profile'] = binding_profile
if add_all_ports and not ironic_port.pxe_enabled:
if not ironic_port.pxe_enabled:
LOG.debug("Adding port %(port)s to network %(net)s for "
"provisioning without an IP allocation.",
{'port': ironic_port.uuid,
@ -302,11 +308,11 @@ def add_ports_to_network(task, network_uuid, security_groups=None):
ports[ironic_port.uuid] = port['port']['id']
if failures:
if len(failures) == len(pxe_enabled_ports):
if len(failures) == len(ports_to_create):
rollback_ports(task, network_uuid)
raise exception.NetworkError(_(
"Failed to create neutron ports for any PXE enabled port "
"on node %s.") % node.uuid)
"Failed to create neutron ports for node's %(node)s ports "
"%(ports)s.") % {'node': node.uuid, 'ports': ports_to_create})
else:
LOG.warning("Some errors were encountered when updating "
"vif_port_id for node %(node)s on "

View File

@ -3,7 +3,7 @@ fixes:
- |
Provides an opt-in fix to change the default port attachment behavior
for deployment and cleaning operations through a new configuration option,
``[neutron]add_all_ports``. This option causes ironic to transmits all
``[neutron]add_all_ports``. This option causes ironic to transmit all
port information to neutron as opposed to only a single physical network
port. This enables operators to successfully operate static Port Group
configurations with Neutron ML2 drivers, where previously configuration