fix: drift nodes on node class edits the server cannot show, cut 0.8.0 #26

Open
mikluko wants to merge 11 commits from mikluko/nodeclass-hash into main
Owner

Bootstrap, image selector, SSH keys, public IPs and placement group
strategy cannot be read back from a running server, so they are compared
by hash instead, after the AWS provider: each NodeClaim is stamped at
launch with the hash of its node class, and a mismatch drifts it as
NodeClassDrift. Fields drift already checks against the server, and
kubelet, which changes no server, are left out of the hash.

NodeClaims with no hash, or one under another hash version, are stamped
with the node class as it stands rather than drifted, so an upgrade does
not replace every node. Nodes already behind a node class edit when this
lands still have to be replaced by hand.

Closes #24

Stacked on #25; merge that first. 0.8.0 carries both.

Bootstrap, image selector, SSH keys, public IPs and placement group strategy cannot be read back from a running server, so they are compared by hash instead, after the AWS provider: each NodeClaim is stamped at launch with the hash of its node class, and a mismatch drifts it as NodeClassDrift. Fields drift already checks against the server, and kubelet, which changes no server, are left out of the hash. NodeClaims with no hash, or one under another hash version, are stamped with the node class as it stands rather than drifted, so an upgrade does not replace every node. Nodes already behind a node class edit when this lands still have to be replaced by hand. Closes #24 Stacked on #25; merge that first. 0.8.0 carries both.
The module path becomes sarak.sh/mikluko/karpenter-provider-hetzner,
which sarak.sh already serves as a go-import. CI and releases run on
Forgejo Actions and publish to the sarak.sh registry, following
arr/sniffarr: REGISTRY_TOKEN logs in as agent, RELEASE_TOKEN pushes the
tag so release-roll starts.

Cosign signing is dropped: keyless signing needs an OIDC token that
Forgejo Actions does not issue. The upgrade agent is dropped with the
GitHub App and gh stack it is built on. Security reports go to
security@sarak.sh, as Forgejo has no private advisories.
docs: drop the code of conduct
Some checks failed
Security / govulncheck (shipped toolchain) (pull_request) Has been skipped
CI / test (pull_request) Failing after 39s
CI / generate (pull_request) Has been cancelled
CI / controllers (pull_request) Has been cancelled
CI / chart (pull_request) Has been cancelled
CI / changelog (pull_request) Has been cancelled
CI / lint (pull_request) Has been cancelled
Security / govulncheck (pull_request) Has been cancelled
0f72c7f763
fix: drift nodes on node class edits the server cannot show, cut 0.8.0
Some checks failed
Security / govulncheck (shipped toolchain) (pull_request) Has been skipped
CI / test (pull_request) Has been cancelled
CI / lint (pull_request) Has been cancelled
CI / generate (pull_request) Has been cancelled
CI / controllers (pull_request) Has been cancelled
CI / chart (pull_request) Has been cancelled
CI / changelog (pull_request) Has been cancelled
Security / govulncheck (pull_request) Has been cancelled
2c451b19bb
Bootstrap, image selector, SSH keys, public IPs and placement group
strategy cannot be read back from a running server, so they are compared
by hash instead, after the AWS provider: each NodeClaim is stamped at
launch with the hash of its node class, and a mismatch drifts it as
NodeClassDrift. Fields drift already checks against the server, and
kubelet, which changes no server, are left out of the hash.

NodeClaims with no hash, or one under another hash version, are stamped
with the node class as it stands rather than drifted, so an upgrade does
not replace every node. Nodes already behind a node class edit when this
lands still have to be replaced by hand.

Closes #24
mikluko force-pushed mikluko/nodeclass-hash from 2c451b19bb
Some checks failed
Security / govulncheck (shipped toolchain) (pull_request) Has been skipped
CI / test (pull_request) Has been cancelled
CI / lint (pull_request) Has been cancelled
CI / generate (pull_request) Has been cancelled
CI / controllers (pull_request) Has been cancelled
CI / chart (pull_request) Has been cancelled
CI / changelog (pull_request) Has been cancelled
Security / govulncheck (pull_request) Has been cancelled
to f290258622
Some checks failed
Security / govulncheck (shipped toolchain) (pull_request) Has been skipped
CI / lint (pull_request) Has been cancelled
CI / generate (pull_request) Has been cancelled
CI / controllers (pull_request) Has been cancelled
CI / chart (pull_request) Has been cancelled
CI / changelog (pull_request) Has been cancelled
CI / test (pull_request) Has been cancelled
Security / govulncheck (pull_request) Has been cancelled
2026-10-27 22:16:43 +00:00
Compare
mikluko force-pushed mikluko/nodeclass-hash from f290258622
Some checks failed
Security / govulncheck (shipped toolchain) (pull_request) Has been skipped
CI / lint (pull_request) Has been cancelled
CI / generate (pull_request) Has been cancelled
CI / controllers (pull_request) Has been cancelled
CI / chart (pull_request) Has been cancelled
CI / changelog (pull_request) Has been cancelled
CI / test (pull_request) Has been cancelled
Security / govulncheck (pull_request) Has been cancelled
to 3623018f3b
Some checks failed
Security / govulncheck (shipped toolchain) (pull_request) Has been skipped
CI / lint (pull_request) Has been cancelled
CI / generate (pull_request) Has been cancelled
CI / controllers (pull_request) Has been cancelled
CI / chart (pull_request) Has been cancelled
CI / changelog (pull_request) Has been cancelled
CI / test (pull_request) Has been cancelled
Security / govulncheck (pull_request) Has been cancelled
2026-10-27 22:18:58 +00:00
Compare
mikluko force-pushed mikluko/nodeclass-hash from 3623018f3b
Some checks failed
Security / govulncheck (shipped toolchain) (pull_request) Has been skipped
CI / lint (pull_request) Has been cancelled
CI / generate (pull_request) Has been cancelled
CI / controllers (pull_request) Has been cancelled
CI / chart (pull_request) Has been cancelled
CI / changelog (pull_request) Has been cancelled
CI / test (pull_request) Has been cancelled
Security / govulncheck (pull_request) Has been cancelled
to 74c5b25540
Some checks failed
Security / govulncheck (shipped toolchain) (pull_request) Has been skipped
CI / generate (pull_request) Has been cancelled
CI / controllers (pull_request) Has been cancelled
CI / chart (pull_request) Has been cancelled
CI / changelog (pull_request) Has been cancelled
CI / test (pull_request) Has been cancelled
CI / lint (pull_request) Has been cancelled
Security / govulncheck (pull_request) Has been cancelled
2026-10-27 22:21:46 +00:00
Compare
mikluko force-pushed mikluko/nodeclass-hash from 74c5b25540
Some checks failed
Security / govulncheck (shipped toolchain) (pull_request) Has been skipped
CI / generate (pull_request) Has been cancelled
CI / controllers (pull_request) Has been cancelled
CI / chart (pull_request) Has been cancelled
CI / changelog (pull_request) Has been cancelled
CI / test (pull_request) Has been cancelled
CI / lint (pull_request) Has been cancelled
Security / govulncheck (pull_request) Has been cancelled
to bf98fde198
Some checks failed
Security / govulncheck (shipped toolchain) (pull_request) Has been skipped
CI / generate (pull_request) Has been cancelled
CI / controllers (pull_request) Has been cancelled
CI / chart (pull_request) Has been cancelled
CI / changelog (pull_request) Has been cancelled
CI / lint (pull_request) Has been cancelled
CI / test (pull_request) Has been cancelled
Security / govulncheck (pull_request) Has been cancelled
2026-10-27 22:25:54 +00:00
Compare
mikluko force-pushed mikluko/nodeclass-hash from bf98fde198
Some checks failed
Security / govulncheck (shipped toolchain) (pull_request) Has been skipped
CI / generate (pull_request) Has been cancelled
CI / controllers (pull_request) Has been cancelled
CI / chart (pull_request) Has been cancelled
CI / changelog (pull_request) Has been cancelled
CI / lint (pull_request) Has been cancelled
CI / test (pull_request) Has been cancelled
Security / govulncheck (pull_request) Has been cancelled
to 1b5dba4593
Some checks failed
Security / govulncheck (shipped toolchain) (pull_request) Has been skipped
CI / lint (pull_request) Has been cancelled
CI / generate (pull_request) Has been cancelled
CI / controllers (pull_request) Has been cancelled
CI / chart (pull_request) Has been cancelled
CI / changelog (pull_request) Has been cancelled
CI / test (pull_request) Has been cancelled
Security / govulncheck (pull_request) Has been cancelled
2026-10-27 22:31:33 +00:00
Compare
mikluko force-pushed mikluko/nodeclass-hash from 1b5dba4593
Some checks failed
Security / govulncheck (shipped toolchain) (pull_request) Has been skipped
CI / lint (pull_request) Has been cancelled
CI / generate (pull_request) Has been cancelled
CI / controllers (pull_request) Has been cancelled
CI / chart (pull_request) Has been cancelled
CI / changelog (pull_request) Has been cancelled
CI / test (pull_request) Has been cancelled
Security / govulncheck (pull_request) Has been cancelled
to 51f3a1917a
Some checks failed
Security / govulncheck (shipped toolchain) (pull_request) Has been skipped
CI / generate (pull_request) Successful in 7m46s
CI / lint (pull_request) Successful in 11m39s
CI / chart (pull_request) Successful in 11s
CI / changelog (pull_request) Successful in 10s
CI / controllers (pull_request) Has been cancelled
CI / test (pull_request) Has been cancelled
Security / govulncheck (pull_request) Has been cancelled
2026-10-27 22:33:19 +00:00
Compare
mikluko force-pushed mikluko/nodeclass-hash from 51f3a1917a
Some checks failed
Security / govulncheck (shipped toolchain) (pull_request) Has been skipped
CI / generate (pull_request) Successful in 7m46s
CI / lint (pull_request) Successful in 11m39s
CI / chart (pull_request) Successful in 11s
CI / changelog (pull_request) Successful in 10s
CI / controllers (pull_request) Has been cancelled
CI / test (pull_request) Has been cancelled
Security / govulncheck (pull_request) Has been cancelled
to 84c153695f
All checks were successful
Security / govulncheck (shipped toolchain) (pull_request) Has been skipped
CI / lint (pull_request) Successful in 5m32s
CI / chart (pull_request) Successful in 14s
CI / changelog (pull_request) Successful in 10s
Security / govulncheck (pull_request) Successful in 2m51s
CI / generate (pull_request) Successful in 7m46s
CI / test (pull_request) Successful in 16m58s
CI / controllers (pull_request) Successful in 9m41s
2026-10-27 22:49:14 +00:00
Compare
All checks were successful
Security / govulncheck (shipped toolchain) (pull_request) Has been skipped
CI / lint (pull_request) Successful in 5m32s
CI / chart (pull_request) Successful in 14s
CI / changelog (pull_request) Successful in 10s
Security / govulncheck (pull_request) Successful in 2m51s
CI / generate (pull_request) Successful in 7m46s
CI / test (pull_request) Successful in 16m58s
CI / controllers (pull_request) Successful in 9m41s
This pull request can be merged automatically.
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin mikluko/nodeclass-hash:mikluko/nodeclass-hash
git switch mikluko/nodeclass-hash

Merge

Merge the changes and update on Forgejo.

Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.

git switch main
git merge --no-ff mikluko/nodeclass-hash
git switch mikluko/nodeclass-hash
git rebase main
git switch main
git merge --ff-only mikluko/nodeclass-hash
git switch mikluko/nodeclass-hash
git rebase main
git switch main
git merge --no-ff mikluko/nodeclass-hash
git switch main
git merge --squash mikluko/nodeclass-hash
git switch main
git merge --ff-only mikluko/nodeclass-hash
git switch main
git merge mikluko/nodeclass-hash
git push origin main
Sign in to join this conversation.
No description provided.