Skip to content

feat(neutron): wire a netdev router's gateway and subnets to separate NICs PUC-2115 - #2578

Merged
cardoe merged 1 commit into
mainfrom
netdev-firewall-split-nics
Oct 28, 2026
Merged

cardoe merged 1 commit into
mainfrom
netdev-firewall-split-nics

Conversation

@nidzrai

@nidzrai nidzrai commented Oct 25, 2026 •

Copy link
Copy Markdown
Contributor

Why

A Palo Alto router put its gateway and all its subnets on one trunk, on one
firewall NIC. In testing, outside and inside traffic both landed on eth1/20,
halving the firewall's bandwidth.

What does this change do?

Agreed with Doug and Kenny: the outside NIC carries the gateway, the inside NIC
carries the subnets.

  • enroll-fw labels the ports from the firewall's interface names, comparing numbers as numbers (1/9 before 1/10): lowest is outside, next is inside, any others get no category. Fewer than two ports is refused, and so is a re-enroll that leaves out a port that still has a role. A firewall in service is never relabelled.
  • Wiring builds a parent port and trunk per side on the shared anchor network (-outside, -inside), tags each parent outside or inside, and fails cleanly if the VIF lands on the wrong NIC. Each side is torn down on its own.
  • New TBN rule CUSTOM_NETDEV_ROLE_ATTACH in components/ironic/cm-trait-based-networking.yaml: a VIF attaches only to the port whose category matches its tag.
  • Ironic bump to f11a3586 (Backport TBN vif.* filter variables (1011790) ironic#18, Doug's vif.* TBN variables), so the rule reads the parent port's own tag with vif.tags.
  • Backward compatible: routers created before this change keep their single trunk.

Rollout

The Ironic we run today rejects a TBN file with vif.tags. The file is mounted
live, so while ironic-conductor rolls to the new image, the old conductors
reject it and fall back to Ironic's built-in rule (first free port, any
category) for server VIFs. To avoid that, deploying the Ironic bump on its own
first.

Upgrade impact

  • This change requires operator action to upgrade. If checked, add the
    upgrade-impact label and a release note: run scriv create from the
    repository root and describe the required action in the generated
    changelog.d/ file. See RELEASING.md.

Operator action means anything a deployment has to do beyond a normal resync:
deploy repo or values changes, new or removed secrets, enabling or disabling a
component, or a manual one-time step.

@github-actions

github-actions Bot commented Oct 25, 2026 •

Copy link
Copy Markdown

Python test results

1 tests   - 465   1 ✅  - 460   0s ⏱️ -59s
1 suites ±  0   0 💤  -   5 
1 files   ±  0   0 ❌ ±  0 

Results for commit 739b719. ± Comparison against base commit e85aba1.

This pull request removes 466 and adds 1 tests. Note that renamed tests count towards both.
neutron_understack.tests.scenarios.test_baremetal_binding.TestBaremetalBinding ‑ test_baremetal_vif_attach_binds_hierarchically
neutron_understack.tests.scenarios.test_baremetal_binding.TestBaremetalBinding ‑ test_delete_keeps_segment_still_in_use
neutron_understack.tests.scenarios.test_baremetal_binding.TestBaremetalBinding ‑ test_port_delete_releases_dynamic_vlan_segment
neutron_understack.tests.scenarios.test_baremetal_binding.TestBaremetalBinding ‑ test_provisioning_network_delete_releases_unused_segment
neutron_understack.tests.scenarios.test_baremetal_binding.TestBaremetalBinding ‑ test_provisioning_network_port_binds
neutron_understack.tests.scenarios.test_baremetal_binding.TestBaremetalBinding ‑ test_second_port_same_physnet_reuses_dynamic_segment
neutron_understack.tests.scenarios.test_baremetal_binding.TestBaremetalBinding ‑ test_unsupported_vnic_type_is_not_bound_by_us
neutron_understack.tests.scenarios.test_baremetal_binding.TestBaremetalBinding ‑ test_vif_attach_without_ip_still_syncs
neutron_understack.tests.scenarios.test_baremetal_binding.TestBaremetalBinding ‑ test_vif_attach_without_physical_network_refuses_binding
neutron_understack.tests.scenarios.test_baremetal_binding.TestBaremetalBinding ‑ test_vif_detach_releases_segment_and_reconciles
…
tests.test_noop ‑ test_noop

♻️ This comment has been updated with latest results.

@nidzrai nidzrai changed the title feat: wire a netdev router's gateway and subnets to separate NICs feat(neutron): wire a netdev router's gateway and subnets to separate NICs PUC-2115 Oct 25, 2026
@nidzrai
nidzrai force-pushed the netdev-firewall-split-nics branch 2 times, most recently from d9ca040 to 9422b03 Compare October 26, 2026 04:44
@nidzrai
nidzrai requested review from a team, cardoe and khackworth October 26, 2026 13:34
@nidzrai
nidzrai force-pushed the netdev-firewall-split-nics branch 2 times, most recently from 4d56786 to ae91df0 Compare October 26, 2026 15:54
Comment thread components/ironic/cm-trait-based-networking.yaml Outdated
@nidzrai
nidzrai force-pushed the netdev-firewall-split-nics branch 2 times, most recently from b4bd4cc to 1031fea Compare October 27, 2026 09:01
@nidzrai
nidzrai requested a review from cardoe October 27, 2026 09:01
khackworth added a commit that referenced this pull request Oct 27, 2026
… assigned

- Add CUSTOM_NETDEV_ROLE_ATTACH trait when port categories (outside/inside) are assigned
- Remove trait when no categories are assigned
- Uses proper Ironic objects API: objects.Trait.create() and objects.Trait.destroy()
- Addresses feedback from PR #2578 (netdev role attachment integration)
@nidzrai
nidzrai force-pushed the netdev-firewall-split-nics branch 4 times, most recently from 789dd4e to e7b3ad8 Compare October 27, 2026 16:15
@nidzrai
nidzrai force-pushed the netdev-firewall-split-nics branch from be03e13 to 1a85f4d Compare October 28, 2026 16:16
@nidzrai
nidzrai force-pushed the netdev-firewall-split-nics branch from 1a85f4d to f66a3a7 Compare October 28, 2026 16:49
@cardoe
cardoe force-pushed the netdev-firewall-split-nics branch from f66a3a7 to 739b719 Compare October 28, 2026 18:32
@cardoe
cardoe added this pull request to the merge queue Oct 28, 2026
Merged via the queue into main with commit 85a8742 Oct 28, 2026
71 checks passed
@cardoe
cardoe deleted the netdev-firewall-split-nics branch October 28, 2026 18:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants