Declared vs running inventory
Capture Compose declarations, running image references and digests so drift can be identified before maintenance changes anything.
Platform Engineering Case Study
This project closes the gap between declared and running container versions across Docker and Kubernetes. The same Git ownership model now also protects critical DietPi operational source, while runtime databases and plaintext secrets remain deliberately outside Git. A non-destructive rehearsal reconstructed all 38 managed DietPi files. Stage 2 then established four-host SOPS and age recovery, protected live delivery, plaintext retirement and a successful detached-media recovery rehearsal.
The Challenge
Routine maintenance exposed a version-control gap: a container could be running a newer image than the version still declared in Compose. Recreating that service could therefore introduce an unexpected downgrade even though the running platform appeared healthy.
Update tooling such as WUD was already useful for identifying newer images, but update detection alone does not provide an authoritative desired state, validation gate, audit trail or guaranteed rollback point. The project was created to add those controls end to end.
Target Architecture
Each tool has one clear role. Runtime discovery and update signals do not bypass the Git-controlled desired state.
Defines the intended image tag and digest.
Proposes image changes through pull requests.
Validates configuration, downgrade risk and image security.
Stages the change with health checks and rollback metadata.
Runs the approved image on TestServer and ids-01.
Reports compliance, drift and deployment health.
Engineering Controls
Capture Compose declarations, running image references and digests so drift can be identified before maintenance changes anything.
Renovate proposes controlled image changes in Git rather than changing running containers directly.
Jenkins checks rendered Compose configuration, architecture support, downgrade risk and Trivy findings before deployment is permitted.
SOPS + age now protects recovery sources across four hosts. Two approved identities, protected file delivery and detached-media recovery have all been validated.
The current image and known-good state are recorded before a change, and health checks determine whether the deployment is accepted.
Prometheus and Grafana will expose drift, floating versions and compliance exceptions instead of relying on manual inspection.
Staged Go-Live
The delivery plan uses explicit go/no-go gates. A failed secrets, validation or rollback test blocks progression even if the calendar says the next stage should have started.
Complete — 23 Aug
Complete — 23 Aug
Complete — 25 Aug
12–18 Sep
19–25 Sep
26 Sep–2 Oct
3–9 Oct
10–16 Oct
Design Principles
Git is authoritative. Runtime state can inform the process, but it does not silently redefine desired state.
Secrets are a go-live dependency. Encryption, protected delivery, two-identity recovery and detached-media rehearsal are proven before deployment automation gains authority.
Rollback is designed before rollout. A deployment is not considered safe if the previous known-good state cannot be restored.
Critical services move last. DNS, security and core monitoring services are introduced only after lower-risk pilots prove the process.
Engineering Outcome
The project is still in delivery, so the outcome is deliberately framed as the target operating model rather than a completed claim. Success means every production image change can be traced from an approved Git declaration to validation evidence, deployment health, runtime compliance and a tested rollback point.
It also brings version control, secrets management, vulnerability scanning and observability into one workflow instead of treating them as separate maintenance activities.