package kea import "fmt" type ctrlAgentRoot struct { ControlAgent controlAgent `json:"Control-agent"` } type controlAgent struct { HTTPHost string `json:"http-host"` HTTPPort int `json:"http-port"` ControlSockets map[string]map[string]any `json:"control-sockets"` Loggers []logger `json:"loggers"` } // RenderCtrlAgent renders the deterministic kea-ctrl-agent.conf JSON. The // control agent exposes the HA/REST control channel on CtrlAgentPort and // forwards to kea-dhcp4 over the shared unix socket. func RenderCtrlAgent() (string, error) { return marshal(ctrlAgentRoot{ControlAgent: controlAgent{ HTTPHost: "0.0.0.0", HTTPPort: CtrlAgentPort, ControlSockets: map[string]map[string]any{ "dhcp4": {"socket-type": "unix", "socket-name": CtrlSocketPath}, }, Loggers: loggers("kea-ctrl-agent"), }}) } // EntrypointDHCP4 is the kea-dhcp4 container entrypoint. It derives this pod's // HA peer name from the StatefulSet ordinal, substitutes the placeholder in the // projected config, and execs the server. func EntrypointDHCP4() string { return fmt.Sprintf(`#!/bin/sh set -e ORD="${HOSTNAME##*-}" mkdir -p %[1]s chmod 0750 %[1]s sed "s/%[2]s/server${ORD}/g" %[3]s/kea-dhcp4.conf > %[4]s exec %[5]s -c %[4]s `, RunDir, ThisServerPlaceholder, ConfigDir, DHCP4ConfPath, DHCP4Bin) } // EntrypointCtrlAgent is the kea-ctrl-agent container entrypoint. func EntrypointCtrlAgent() string { return fmt.Sprintf(`#!/bin/sh set -e mkdir -p %[1]s chmod 0750 %[1]s cp %[2]s/kea-ctrl-agent.conf %[3]s exec %[4]s -c %[3]s `, RunDir, ConfigDir, CtrlAgentConfPath, CtrlAgentBin) }