Two fixes, no new command and no change to the piped output of the parity cases.
Fixed
A
lo provisionthat meets a Hetzner capacity refusal stops with Hetzner's own reason. The Hetzner provider dropped the exit status ofhcloud <resource> create, so a placement refusal (error during placement (resource_unavailable)) printed one line and the run walked on into the KubeOne inventory, which then reported zero control-plane hosts and hinted at name drift.hetzner::createnow stops on a non-zero create and names the resource, points at hcloud's message above it, and says what to do: choose another server type or location, or retry later. A re-run keeps what exists and creates the rest (#232).A cluster claimed after
lo provisionand before the agent deploys no longer goes silent. The announce (lo kubehz register, and thelo provisionpre-announce) now stores the platform's one-time bind secret atclusters/<domain>/.kubehz-bind(mode 0600).lo kubehz deploystages it into the cluster as the Secretkubehz-agent-bind(read from the file, never a command line), and the heartbeat agent presents it when it registers. The platform then ADOPTS the announced row wherever it sits by then, still pending or already claimed, instead of minting a second row whose beats strand where nobody can see them. So a cluster you claim in the dashboard before the agent deploys still shows its own heartbeats (#233). Both implementations carry the change.
Changed
- The one-time bind secret is a credential.
lo initnow ignores**/clusters/*/.kubehz-bind, and the kubehz guide documents the claim-before-deploy flow and how to keep the file out of version control.
Upgrade
Nothing to do. The bind secret is optional on both sides: an older platform returns none, so the CLI writes nothing and the agent registers as before; a cluster with no bind secret in play deploys unchanged.