Skip to content

feat: Kea dhcp#2111

Open
mfencik wants to merge 48 commits into
mainfrom
kea
Open

feat: Kea dhcp#2111
mfencik wants to merge 48 commits into
mainfrom
kea

Conversation

@mfencik

@mfencik mfencik commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

No description provided.

@mfencik mfencik force-pushed the kea branch 3 times, most recently from 5409658 to 6b4028c Compare July 6, 2026 17:18
skrobul and others added 23 commits July 7, 2026 11:07
Wraps the kea-dhcp chart (github.com/mglants/charts) as an ArgoCD
Application, following the karma/dex external-chart pattern with
chrony-style site-only scoping. Starts with upstream chart defaults.
The kea namespace can't be deployed to right now, so route the kea
Application there as a stopgap. Revert this once kea namespace works.
DHCP needs to be reachable from the physical network, not just
in-cluster, so default the kea-dhcp service to LoadBalancer for all
sites.
The kea-dhcp chart (v0.7.1, and current main) renders invalid YAML
when service.dhcp.annotations is non-empty. Sites needing an
annotated LoadBalancer endpoint should add their own standalone
Service in their deploy-repo overlay instead, so leave the chart's
own Service at defaults (ClusterIP).
mfencik and others added 9 commits July 8, 2026 15:16
Instead of sending a request to a traditional kubernetes Service, we
must send the request to all of the pods. In order to do that, we make a
DNS lookup on the headless service and send the request to all of the
pods using the service's port.
The success return was outside the try/except but inside the attempt
loop, so it always returned (or raised IndexError) after the first
attempt regardless of success. Retries never actually ran, silently
dropping reservations for ports that hit a transient request failure.
…move

list.pop() expects an index, not a value; passing the reservation dict
raised TypeError, silently swallowed by the broad except clause, so
clean_dhcp_opts never actually removed reservations.
These prints were left over from troubleshooting the Kea cleaning
path and would spam stdout in production; route them through the
standard oslo logger instead.
skrobul added 4 commits July 9, 2026 11:32
Centralizes all direct Kea Control Agent communication (endpoint
discovery, retries, config read-modify-write) behind a single
in-process lock in a new kea_proxy REST service, so concurrent
reservation updates/deletes from Ironic can no longer race and
clobber each other's changes. dhcp/kea.py becomes a thin HTTP client
of this proxy instead of talking to Kea directly.

Adds the ironic-understack-kea-proxy console-script, a single-replica
Deployment/Service manifest in components/ironic, and moves/rewrites
the driver's test suite to match.
tenacity is already used as transient dependency for ironic, so let's
use it.
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