From a3e7683c63aac02600c48a984544c3c361769daf Mon Sep 17 00:00:00 2001 From: jochen Date: Mon, 28 Sep 2026 10:27:42 +0200 Subject: [PATCH] The control plane migrates before it serves MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The mesh replaced its own control plane with a build carrying a migration, applied none of it, and then refused every build it recorded for three quarters of an hour while reporting itself healthy (novox/hq 04-ISSUES/133). The module now declares the step ADR 0052 prescribes: a run-once `migrate` before the server, re-run whenever the image moves because the image is part of a step's digest, and gating — a migration that fails stops the new server from starting rather than letting it serve against a schema it does not have. --- module.json | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/module.json b/module.json index bc89fd0..880748e 100644 --- a/module.json +++ b/module.json @@ -34,6 +34,30 @@ "path": "/var/lib/mesh/mesh-controller", "mode": "0700" }, + { + "id": "migrate", + "type": "container", + "name": "mesh-controller-migrate", + "run-once": true, + "network": "host", + "args": [ + "migrate" + ], + "env": { + "MESH_STORE_INVENTORY_FILE": "/run/secrets/inventory", + "MESH_STORE_IDENTITY_FILE": "/run/secrets/identity", + "MESH_STORE_LICENCES_FILE": "/run/secrets/licences", + "MESH_STORE_INVENTORY_PORT": "${seat:mesh-store:5432}", + "MESH_STORE_IDENTITY_PORT": "${seat:mesh-store:5432}", + "MESH_STORE_LICENCES_PORT": "${seat:mesh-store:5432}" + }, + "volumes": [ + "/var/lib/mesh/mesh-controller/inventory:/run/secrets/inventory:ro", + "/var/lib/mesh/mesh-controller/identity:/run/secrets/identity:ro", + "/var/lib/mesh/mesh-controller/licences:/run/secrets/licences:ro" + ], + "artifact": "server" + }, { "id": "server", "type": "container", -- 2.54.0