fix(neutron): run the neutron RPC server so the ironic agent registers - #2350
Conversation
|
Would be good to explain what is the current problem, what is it causing? |
|
With no consumer on The Generated by Claude Code |
4d60ae9 to
d97b431
Compare
The airship base image installs networking-baremetal from PyPI unpinned, so a rebuild picks up whatever is current. Today that is 8.1.0, from the series after 2026.1, whose CI only ever ran against master constraints. The 2026.1 series is 7.x, and stable/2026.1 is the only branch gated against the 2026.1 library set the image ships. Install it from git alongside neutron and neutron-lib so the version is deterministic and matches our release.
neutron-server runs under uWSGI, which serves the API only, so the rpc_workers setting in neutron.conf is inert and nothing consumes the agent state report topic. neutron-ironic-agent therefore never registers as a baremetal agent: report_state is a cast, so the agent logs successful reports while every one of them is discarded. Enable the rpc-server deployment and drop the claim that it only sends requests to agents, which is what kept it off. secret_ks_etc is false here, so every component has to list its etcSources explicitly. neutron_rpc_server and neutron_periodic_worker were missing and would get an empty /etc/neutron/neutron.conf.d instead of the keystone, ironic, nova and placement service user credentials. Run two replicas so agent state reports survive a rollout or a drain. Assisted-by: Claude Opus 5
Picks up the ironic agent's ovn-neutron-init container and its --config-file /tmp/pod-shared/ovn.ini argument, so ironic-neutron-agent takes ovn_nb_connection from the chart instead of falling back to tcp:127.0.0.1:6641 with OVN event-driven reconciliation disabled.
The periodic worker can be used by flavor plugins like our router plugins to run operations like validations and cleanups out of band from API calls. Add the missing container reference and fix up the OVN metadata agent container as well.
We are not using the networking-baremetal l2vni support yet so the trunk reconciler runs and attempts to recreate the anchor network and fails since we do not have geneve enabled by default. So disable it but also when we do go to enable it in the future, pre-emptively change to vxlan.
d97b431 to
8a08303
Compare
|
need to change the image pr-2350 |
8a08303 to
be2a2cd
Compare
| neutron_l2gw: "ghcr.io/rackerlabs/understack/neutron:2026.1" | ||
| neutron_linuxbridge_agent: "ghcr.io/rackerlabs/understack/neutron:2026.1" | ||
| neutron_metadata: "ghcr.io/rackerlabs/understack/neutron:2026.1" | ||
| neutron_ovn_metadata: "ghcr.io/rackerlabs/understack/neutron:2026.1" |
What does this change do?
neutron-serverruns under uWSGI, which serves the API only, so nothing startsneutron's RPC listeners and
rpc_workersis inert.neutron-rpc-serveris whatreceives from agents — the comment claiming it only sends requests to them is what
kept it off. With no consumer on
q-reports-plugin,neutron-ironic-agent'sreport_statecasts are dropped silently and it never registers: dev's 25Baremetal NodeagentsAlive = Falsesince 2025-11-19,rax-prod-dfw3andrax-prod-iad3-rxdb-infrathe same. That leaves thebaremetalmechanism driverinert too, since it won't bind to a dead agent. The same process hosts the ML2
callbacks (
q-plugin) and service-plugin RPC (trunk, L3), andneutron-periodic-workersis where the router driver's periodics will run.deployment_rpc_server, with 2 replicas so state reports survive a rolloutor node drain, and fix that comment.
pod.etcSourcesforneutron_rpc_serverandneutron_periodic_worker:secret_ks_etcis false, so the chart mountsneutron-ks-etconly where it is listed, and both pods otherwise get an empty/etc/neutron/neutron.conf.dinstead of the service user credentials. Theperiodic worker itself stays disabled.
networking-baremetaltostable/2026.1incontainers/neutron/Dockerfile.The base image installs it unpinned from PyPI and lands 8.1.0, the post-2026.1
series, whose CI only ever ran against
constraints/upper/master.chartVersionto2026.1.45+5b923efb7, which threadsovn.iniinto the ironic agent so it takes
ovn_nb_connectionfrom the chart instead offalling back to
tcp:127.0.0.1:6641with OVN event-driven reconciliation disabled.This also wakes the baremetal driver as a candidate binder ahead of
undersync;try_to_bind_segment_for_agentis the guard that keeps the hierarchical VXLAN→VLANbinding with
undersync, so the pin and the backports below belong here.Do not merge yet
networking-baremetal backports to
stable/2026.1, and bumpsNETWORKING_BAREMETAL_GIT_REF:binding:host_idsetting for L2VNI subportsopenstack-helm. Both are merged upstream; the first is in the chart bump above, the
second is in
65f89744eand needs a chart release past5b923efb7:ovn.iniinto the ironic agentUpgrade impact
upgrade-impactlabel and a release note: runscriv createfrom therepository root and describe the required action in the generated
changelog.d/file. See RELEASING.md.Picked up by a normal resync, no operator action, matching how 9edf31f enabled the
OVN maintenance worker.