talm init --endpoints "1.2.3.4,5.6.7.8" puts the listed hosts into talosconfig.contexts.<name>.endpoints (the talosctl-client round-robin list) but leaves values.yaml::endpoint empty. Two distinct concepts share the word "endpoint" and the CLI flag only addresses one of them:
| Field |
Layer |
Shape |
Used by |
talosconfig.contexts.<name>.endpoints |
talosctl client config |
list of host[:port] |
talosctl / talm when talking to Talos API |
values.yaml::endpoint |
chart values |
single URL with https:// and :6443 |
rendered into cluster.controlPlane.endpoint of every node's MachineConfig; what kubelet and kube-proxy dial |
The chart leaves values.yaml::endpoint empty intentionally so a missed override fails loudly rather than silently embedding a placeholder (README documents this in the getting-started block). But operators who pass --endpoints to talm init reasonably expect at least one of those values to land in values.yaml::endpoint too — particularly when only one endpoint is passed, since that's an unambiguous "this is also the cluster URL" signal.
Repro
mkdir test-cluster && cd test-cluster
talm init --preset cozystack --name test-cluster --endpoints "10.0.80.201,10.0.80.202,10.0.80.203"
grep -R '10.0.80.20' .
# .//talosconfig: - 10.0.80.201
# .//talosconfig: - 10.0.80.202
# .//talosconfig: - 10.0.80.203
# (values.yaml::endpoint is still "")
The operator then has to read the README, learn the conceptual split, and manually set values.yaml::endpoint.
Fix options (smallest → largest scope)
- Print a hint at the end of
talm init when --endpoints was passed and values.yaml::endpoint is empty: e.g. Next: set values.yaml::endpoint to your cluster's control-plane URL (e.g. https://10.0.80.201:6443 or your VIP). Cheapest, zero behavior change, just guides the operator at the moment they're most likely to notice.
- Auto-populate
values.yaml::endpoint when exactly one endpoint is passed (i.e. --endpoints x.x.x.x). Adds slight surprise behavior on multi-endpoint case (no auto-population), but matches the most common "single VIP / single node" topology.
- New explicit
--cluster-endpoint flag that writes only values.yaml::endpoint, leaving --endpoints purely for the talosctl-client list. Cleanest separation, but adds another flag operators need to know about.
Recommend (1) as the baseline — it's pure UX nudge, no behavior change.
talm init --endpoints "1.2.3.4,5.6.7.8"puts the listed hosts intotalosconfig.contexts.<name>.endpoints(the talosctl-client round-robin list) but leavesvalues.yaml::endpointempty. Two distinct concepts share the word "endpoint" and the CLI flag only addresses one of them:talosconfig.contexts.<name>.endpointshost[:port]values.yaml::endpointhttps://and:6443cluster.controlPlane.endpointof every node's MachineConfig; what kubelet and kube-proxy dialThe chart leaves
values.yaml::endpointempty intentionally so a missed override fails loudly rather than silently embedding a placeholder (README documents this in the getting-started block). But operators who pass--endpointstotalm initreasonably expect at least one of those values to land invalues.yaml::endpointtoo — particularly when only one endpoint is passed, since that's an unambiguous "this is also the cluster URL" signal.Repro
The operator then has to read the README, learn the conceptual split, and manually set
values.yaml::endpoint.Fix options (smallest → largest scope)
talm initwhen--endpointswas passed andvalues.yaml::endpointis empty: e.g.Next: set values.yaml::endpoint to your cluster's control-plane URL (e.g. https://10.0.80.201:6443 or your VIP).Cheapest, zero behavior change, just guides the operator at the moment they're most likely to notice.values.yaml::endpointwhen exactly one endpoint is passed (i.e.--endpoints x.x.x.x). Adds slight surprise behavior on multi-endpoint case (no auto-population), but matches the most common "single VIP / single node" topology.--cluster-endpointflag that writes onlyvalues.yaml::endpoint, leaving--endpointspurely for the talosctl-client list. Cleanest separation, but adds another flag operators need to know about.Recommend (1) as the baseline — it's pure UX nudge, no behavior change.