fix(kanidm): align kanidm-provision to trixie, and stop its always-changed churn #265
Inga granskare
Etiketter
Inga etiketter
area/backups
area/ci
area/control-panel
area/identity
area/infra
area/observability
area/payments
area/security
area/storage
area/web
blocked
needs-info
needs-triage
ready-for-implementation
type
bug
type
chore
type
docs
type
epic
type
feature
type
task
wontfix
Ingen milstolpe
Inget projekt
Inga tilldelade
1 deltagare
Notiser
Förfallodatum
Inget förfallodatum satt.
Beroenden
Inga beroenden satta
Referens
bitborg/bitborg-infra!265
Läser in…
Hänvisa till i nytt ärende
Ingen beskrivning angiven.
Ta bort grenen "fix/kanidm-provision-trixie"
Borttagning av en gren är permanent. Även om den borttagna grenen kan fortsätta existera en kort tid innan den faktiskt tas bort, kan det INTE ångras i de flesta fall. Vill du fortsätta?
1. The build was on Debian bookworm while the estate is trixie
Everything else is trixie — the host (kernel
6.12.73+deb13),node:24.18.0-trixie-slim(×8),postgres:17.10-trixie— and this one image pair was bookworm/bookworm.The Containerfile's stated reason was "Builder and runtime are both bookworm so the glibc matches".
That is a builder↔runtime constraint — the runtime glibc must not be older than the one the binary
was linked against — and a trixie/trixie pair satisfies it identically. ADR 0016 imposes no Debian
version. The QEMU-segfault comment concerns building natively on the host, not the Debian generation.
So there was no reason for it; just drift onto oldstable.
Verified by building it, not by reasoning about it.
rust:1-trixiecompiles kanidm-provisionv1.3.0 cleanly, and the binary runs on the new runtime:
Why the runtime is
debian:13-slimand nottrixie-slimSame image (identical manifests — verified by hashing both), but numeric, so renovate can bump it.
This is the mechanism behind the drift, and it's worth recording. Renovate's dependency dashboard for
this repo found one dependency in this file:
debian:bookworm-slimwas silently ignored — a bare codename carries no version to compare. Contrastcaddy-ratelimit.Containerfile (2), where bothFROMs are versioned and both are tracked. So renovatekept the rust base current within bookworm indefinitely, with no way to express "trixie exists".
A numeric tag means Debian 14 shows up as a PR. The rust suffix stays untrackable (renovate bumps
the
1, never the-trixie), so that one still needs a human at the next Debian release — noted in thefile rather than pretended solved.
The role rebuilds when the Containerfile changes (
_kanidm_provision_containerfile is changed), not onlyon a tag bump, so this takes effect on the next apply. It does not have the image-tag apply gap of #63.
2.
changed_whenmatched a string the tool never printskanidm-provision emits no such message. Verified against the compiled binary rather than the docs
(two doc summaries were unreliable while investigating this):
Those are unconditional phase headers. There is no summary line, the exit code is 0 either way, and
--helpoffers no--dry-run/--diff— only--url,--state,--accept-invalid-certs,--no-auto-remove.So the condition could never evaluate false: the task has reported
changedon every apply since itwas written, against output that never existed. It was never prod disagreeing with the state file.
Now
changed_when: false. "We cannot detect this" is the honest encoding, and strictly better than apermanent
changedthat masks real drift — which is how the merged-but-unapplied Caddyfile in #250 hidfor a day. If upstream gains a
--dry-runor a summary line, match that instead.Effect
This was the last always-changed task.
gitborg-prodgoes from 13 spuriouschangedthis morning to0;
gitborg-monitoringis already at 0.--syntax-checkpasses;ansible-lintclean at theproductionprofile.Note on the apply
The next apply rebuilds the image on the host (compiling Rust natively), so that task will take
several minutes and is the one real risk here — the Containerfile itself warns that a link step can be
OOM-killed on a small host, with
CARGO_BUILD_JOBS=1as the remedy. Worth watching rather thanassuming.