v0.15.4
Fixes (Critical)
- Split the
advertised-subnetsConfigPatch by machine role —buildAdvertisedSubnetsPatchunconditionally emittedcluster.etcd.advertisedSubnetsalongsidemachine.kubelet.nodeIP.validSubnets. The caller instepCreateVMapplied the same patch to every MachineRequest in multi-NIC mode (whetheradvertised_subnetswas set explicitly or auto-detected from the primary NIC). Talos rejectscluster.etcd.*on workers withconfiguration validation failed: etcd config is only allowed on control plane machines— every worker in a multi-homed cluster failed validation, never booted, never joined. Observed in prod ontalos-home(multi-homed, 3 workers all DOA post-v0.15.0). Fix: newbuildKubeletSubnetsPatchemits only the worker-safemachine.kubelet.*portion;stepCreateVMnow detects CP role from theMachineRequestSetlabel suffix (-control-planesper Omni's convention) and calls the full builder only when on a CP. Conservative on ambiguity (unknown suffix → worker path) because skipping etcd pinning on a CP is a latent issue, while shipping etcd config to a worker is an immediate brick.TestBuildKubeletSubnetsPatch_OmitsEtcdpins the worker patch shape against future refactors that might silently merge the builders again.
Observability
recordProvisionErrornow skipscontext.Canceled— both standalone and wrapped inRequeueError. Shutdown-triggered cancellation is not a provision failure; counting it as one conflates operator restarts with real regressions. Table inTestRecordProvisionError_RequeueUnwrapextended with three new cases.
Tests (regression guards for this week's bugs)
internal/telemetry/histogram_buckets_test.go— records a known 50 ms value into every Float64Histogram and fails if any instrument inherits the OTel SDK's millisecond-default bucket boundaries against the seconds unit. Would have caught v0.15.0's histogram-unit regression atgo test ./....internal/client/cassette_age_test.go— fails when any cassette intestdata/cassettes/is older thanCASSETTE_MAX_AGE_DAYS(default 90). Forces re-record pressure before stale cassettes silently hide schema drift (the v0.15.0 orphan-cleanup cassette kept passing for a reason).
Full Changelog: v0.15.3...v0.15.4