catalogue: one mesh-state namespace — /var/lib/mesh/<module>/ (consistency)

The review found broker own-secret paths drifting: mostly /var/lib/<module>/
broker, but grafana/redis/icecast/nextcloud carried a '-module' suffix to dodge
a collision with the service's own /var/lib/<name> data, and photos sat under
/etc. Normalized to one collision-free namespace a service never owns:
/var/lib/mesh/<module>/broker, with a mesh-state directory resource for the
parent, across 24 modules. audit-logger is grandfathered (lab-proven, referenced
by the assigned test, and it has no service to collide with). All 33 manifests
parse; no client hardcoded a path, so nothing in code moved.

Claude-Session: https://claude.ai/code/session_01LrgweAeERJYBg88c5cKDzF
This commit is contained in:
2026-09-04 21:28:55 +02:00
parent 5fd78a77ad
commit 67d8d0dcbd
24 changed files with 164 additions and 26 deletions
+7 -1
View File
@@ -8,7 +8,7 @@
"module.bazarr.subtitle.downloaded" "module.bazarr.subtitle.downloaded"
], ],
"own-secrets": { "own-secrets": {
"broker": "/var/lib/bazarr/broker" "broker": "/var/lib/mesh/bazarr/broker"
}, },
"listens": [ "listens": [
{ {
@@ -19,6 +19,12 @@
} }
], ],
"resources": [ "resources": [
{
"id": "mesh-state",
"type": "directory",
"path": "/var/lib/mesh/bazarr",
"mode": "0700"
},
{ {
"id": "config", "id": "config",
"type": "directory", "type": "directory",
+8 -2
View File
@@ -18,13 +18,19 @@
}, },
"own-secrets": { "own-secrets": {
"token": "/var/lib/cloudflare-dns/token", "token": "/var/lib/cloudflare-dns/token",
"broker": "/var/lib/cloudflare-dns/broker" "broker": "/var/lib/mesh/cloudflare-dns/broker"
}, },
"emits": [ "emits": [
"module.cloudflare-dns.record.created", "module.cloudflare-dns.record.created",
"module.cloudflare-dns.record.removed" "module.cloudflare-dns.record.removed"
], ],
"resources": [ "resources": [
{
"id": "mesh-state",
"type": "directory",
"path": "/var/lib/mesh/cloudflare-dns",
"mode": "0700"
},
{ {
"id": "state", "id": "state",
"type": "directory", "type": "directory",
@@ -61,7 +67,7 @@
"/var/lib/cloudflare-dns/config.json:/run/config/config.json:ro", "/var/lib/cloudflare-dns/config.json:/run/config/config.json:ro",
"/var/lib/cloudflare-dns/grants:/grants", "/var/lib/cloudflare-dns/grants:/grants",
"/var/lib/cloudflare-dns/token:/run/secrets/token:ro", "/var/lib/cloudflare-dns/token:/run/secrets/token:ro",
"/var/lib/cloudflare-dns/broker:/run/secrets/broker:ro" "/var/lib/mesh/cloudflare-dns/broker:/run/secrets/broker:ro"
] ]
} }
] ]
+7 -1
View File
@@ -12,7 +12,7 @@
"module.dnsmasq.name.removed" "module.dnsmasq.name.removed"
], ],
"own-secrets": { "own-secrets": {
"broker": "/var/lib/dnsmasq/broker" "broker": "/var/lib/mesh/dnsmasq/broker"
}, },
"claims": [ "claims": [
{ {
@@ -30,6 +30,12 @@
} }
], ],
"resources": [ "resources": [
{
"id": "mesh-state",
"type": "directory",
"path": "/var/lib/mesh/dnsmasq",
"mode": "0700"
},
{ {
"id": "package", "id": "package",
"type": "package", "type": "package",
+7 -1
View File
@@ -39,9 +39,15 @@
], ],
"own-secrets": { "own-secrets": {
"internal-token": "/var/lib/gitea/internal-token.secret", "internal-token": "/var/lib/gitea/internal-token.secret",
"broker": "/var/lib/gitea/broker" "broker": "/var/lib/mesh/gitea/broker"
}, },
"resources": [ "resources": [
{
"id": "mesh-state",
"type": "directory",
"path": "/var/lib/mesh/gitea",
"mode": "0700"
},
{ {
"id": "state", "id": "state",
"type": "directory", "type": "directory",
+7 -1
View File
@@ -6,7 +6,7 @@
], ],
"own-secrets": { "own-secrets": {
"admin": "/var/lib/grafana-module/admin.secret", "admin": "/var/lib/grafana-module/admin.secret",
"broker": "/var/lib/grafana-module/broker" "broker": "/var/lib/mesh/grafana/broker"
}, },
"capabilities": [ "capabilities": [
"container-runtime" "container-runtime"
@@ -20,6 +20,12 @@
} }
], ],
"resources": [ "resources": [
{
"id": "mesh-state",
"type": "directory",
"path": "/var/lib/mesh/grafana",
"mode": "0700"
},
{ {
"id": "state", "id": "state",
"type": "directory", "type": "directory",
+7 -1
View File
@@ -8,7 +8,7 @@
"module.home-assistant.state.changed" "module.home-assistant.state.changed"
], ],
"own-secrets": { "own-secrets": {
"broker": "/var/lib/home-assistant/broker" "broker": "/var/lib/mesh/home-assistant/broker"
}, },
"listens": [ "listens": [
{ {
@@ -19,6 +19,12 @@
} }
], ],
"resources": [ "resources": [
{
"id": "mesh-state",
"type": "directory",
"path": "/var/lib/mesh/home-assistant",
"mode": "0700"
},
{ {
"id": "config", "id": "config",
"type": "directory", "type": "directory",
+7 -1
View File
@@ -12,7 +12,7 @@
"source": "/var/lib/icecast-module/source.secret", "source": "/var/lib/icecast-module/source.secret",
"admin": "/var/lib/icecast-module/admin.secret", "admin": "/var/lib/icecast-module/admin.secret",
"relay": "/var/lib/icecast-module/relay.secret", "relay": "/var/lib/icecast-module/relay.secret",
"broker": "/var/lib/icecast-module/broker" "broker": "/var/lib/mesh/icecast/broker"
}, },
"listens": [ "listens": [
{ {
@@ -23,6 +23,12 @@
} }
], ],
"resources": [ "resources": [
{
"id": "mesh-state",
"type": "directory",
"path": "/var/lib/mesh/icecast",
"mode": "0700"
},
{ {
"id": "state", "id": "state",
"type": "directory", "type": "directory",
+7 -1
View File
@@ -36,9 +36,15 @@
], ],
"own-secrets": { "own-secrets": {
"admin": "/var/lib/keycloak/admin.secret", "admin": "/var/lib/keycloak/admin.secret",
"broker": "/var/lib/keycloak/broker" "broker": "/var/lib/mesh/keycloak/broker"
}, },
"resources": [ "resources": [
{
"id": "mesh-state",
"type": "directory",
"path": "/var/lib/mesh/keycloak",
"mode": "0700"
},
{ {
"id": "state", "id": "state",
"type": "directory", "type": "directory",
+7 -1
View File
@@ -50,9 +50,15 @@
"secret-key": "/var/lib/mailu/secret-key.secret", "secret-key": "/var/lib/mailu/secret-key.secret",
"database": "/var/lib/mailu/database.secret", "database": "/var/lib/mailu/database.secret",
"admin": "/var/lib/mailu/admin.secret", "admin": "/var/lib/mailu/admin.secret",
"broker": "/var/lib/mailu/broker" "broker": "/var/lib/mesh/mailu/broker"
}, },
"resources": [ "resources": [
{
"id": "mesh-state",
"type": "directory",
"path": "/var/lib/mesh/mailu",
"mode": "0700"
},
{ {
"id": "state", "id": "state",
"type": "directory", "type": "directory",
+8 -2
View File
@@ -36,9 +36,15 @@
}, },
"own-secrets": { "own-secrets": {
"root": "/var/lib/minio/root.secret", "root": "/var/lib/minio/root.secret",
"broker": "/var/lib/minio/broker" "broker": "/var/lib/mesh/minio/broker"
}, },
"resources": [ "resources": [
{
"id": "mesh-state",
"type": "directory",
"path": "/var/lib/mesh/minio",
"mode": "0700"
},
{ {
"id": "state", "id": "state",
"type": "directory", "type": "directory",
@@ -109,4 +115,4 @@
] ]
} }
] ]
} }
+7 -1
View File
@@ -27,7 +27,7 @@
], ],
"own-secrets": { "own-secrets": {
"admin": "/var/lib/nextcloud-module/admin.secret", "admin": "/var/lib/nextcloud-module/admin.secret",
"broker": "/var/lib/nextcloud-module/broker" "broker": "/var/lib/mesh/nextcloud/broker"
}, },
"capabilities": [ "capabilities": [
"container-runtime" "container-runtime"
@@ -41,6 +41,12 @@
} }
], ],
"resources": [ "resources": [
{
"id": "mesh-state",
"type": "directory",
"path": "/var/lib/mesh/nextcloud",
"mode": "0700"
},
{ {
"id": "state", "id": "state",
"type": "directory", "type": "directory",
+7 -1
View File
@@ -5,7 +5,7 @@
"module.nodered.flows.deployed" "module.nodered.flows.deployed"
], ],
"own-secrets": { "own-secrets": {
"broker": "/var/lib/nodered/broker" "broker": "/var/lib/mesh/nodered/broker"
}, },
"capabilities": [ "capabilities": [
"container-runtime" "container-runtime"
@@ -19,6 +19,12 @@
} }
], ],
"resources": [ "resources": [
{
"id": "mesh-state",
"type": "directory",
"path": "/var/lib/mesh/nodered",
"mode": "0700"
},
{ {
"id": "data", "id": "data",
"type": "directory", "type": "directory",
+7 -1
View File
@@ -10,7 +10,7 @@
], ],
"consumes": [], "consumes": [],
"own-secrets": { "own-secrets": {
"broker": "/var/lib/nzbget/broker" "broker": "/var/lib/mesh/nzbget/broker"
}, },
"listens": [ "listens": [
{ {
@@ -21,6 +21,12 @@
} }
], ],
"resources": [ "resources": [
{
"id": "mesh-state",
"type": "directory",
"path": "/var/lib/mesh/nzbget",
"mode": "0700"
},
{ {
"id": "config", "id": "config",
"type": "directory", "type": "directory",
+7 -1
View File
@@ -9,7 +9,7 @@
"module.ombi.request.approved" "module.ombi.request.approved"
], ],
"own-secrets": { "own-secrets": {
"broker": "/var/lib/ombi/broker" "broker": "/var/lib/mesh/ombi/broker"
}, },
"listens": [ "listens": [
{ {
@@ -20,6 +20,12 @@
} }
], ],
"resources": [ "resources": [
{
"id": "mesh-state",
"type": "directory",
"path": "/var/lib/mesh/ombi",
"mode": "0700"
},
{ {
"id": "config", "id": "config",
"type": "directory", "type": "directory",
+7 -1
View File
@@ -19,9 +19,15 @@
"module.photos.item.added" "module.photos.item.added"
], ],
"own-secrets": { "own-secrets": {
"broker": "/etc/photos/broker" "broker": "/var/lib/mesh/photos/broker"
}, },
"resources": [ "resources": [
{
"id": "mesh-state",
"type": "directory",
"path": "/var/lib/mesh/photos",
"mode": "0700"
},
{ {
"id": "config", "id": "config",
"type": "directory", "type": "directory",
+7 -1
View File
@@ -13,7 +13,7 @@
"module.*.download.completed" "module.*.download.completed"
], ],
"own-secrets": { "own-secrets": {
"broker": "/var/lib/plex/broker" "broker": "/var/lib/mesh/plex/broker"
}, },
"listens": [ "listens": [
{ {
@@ -24,6 +24,12 @@
} }
], ],
"resources": [ "resources": [
{
"id": "mesh-state",
"type": "directory",
"path": "/var/lib/mesh/plex",
"mode": "0700"
},
{ {
"id": "config", "id": "config",
"type": "directory", "type": "directory",
+7 -1
View File
@@ -33,9 +33,15 @@
}, },
"own-secrets": { "own-secrets": {
"superuser": "/var/lib/postgres/superuser.secret", "superuser": "/var/lib/postgres/superuser.secret",
"broker": "/var/lib/postgres/broker" "broker": "/var/lib/mesh/postgres/broker"
}, },
"resources": [ "resources": [
{
"id": "mesh-state",
"type": "directory",
"path": "/var/lib/mesh/postgres",
"mode": "0700"
},
{ {
"id": "state", "id": "state",
"type": "directory", "type": "directory",
+7 -1
View File
@@ -10,7 +10,7 @@
], ],
"consumes": [], "consumes": [],
"own-secrets": { "own-secrets": {
"broker": "/var/lib/qbittorrent/broker" "broker": "/var/lib/mesh/qbittorrent/broker"
}, },
"listens": [ "listens": [
{ {
@@ -21,6 +21,12 @@
} }
], ],
"resources": [ "resources": [
{
"id": "mesh-state",
"type": "directory",
"path": "/var/lib/mesh/qbittorrent",
"mode": "0700"
},
{ {
"id": "config", "id": "config",
"type": "directory", "type": "directory",
+7 -1
View File
@@ -10,7 +10,7 @@
], ],
"consumes": [], "consumes": [],
"own-secrets": { "own-secrets": {
"broker": "/var/lib/radarr/broker" "broker": "/var/lib/mesh/radarr/broker"
}, },
"listens": [ "listens": [
{ {
@@ -21,6 +21,12 @@
} }
], ],
"resources": [ "resources": [
{
"id": "mesh-state",
"type": "directory",
"path": "/var/lib/mesh/radarr",
"mode": "0700"
},
{ {
"id": "config", "id": "config",
"type": "directory", "type": "directory",
+7 -1
View File
@@ -25,7 +25,7 @@
}, },
"own-secrets": { "own-secrets": {
"default": "/var/lib/redis-module/default.secret", "default": "/var/lib/redis-module/default.secret",
"broker": "/var/lib/redis-module/broker" "broker": "/var/lib/mesh/redis/broker"
}, },
"listens": [ "listens": [
{ {
@@ -36,6 +36,12 @@
} }
], ],
"resources": [ "resources": [
{
"id": "mesh-state",
"type": "directory",
"path": "/var/lib/mesh/redis",
"mode": "0700"
},
{ {
"id": "state", "id": "state",
"type": "directory", "type": "directory",
+1 -1
View File
@@ -20,7 +20,7 @@
"module.registry.image.pushed" "module.registry.image.pushed"
], ],
"own-secrets": { "own-secrets": {
"broker": "/var/lib/registry/broker" "broker": "/var/lib/mesh/registry/broker"
}, },
"serves": { "serves": {
"artifact-store": { "artifact-store": {
+7 -1
View File
@@ -10,7 +10,7 @@
], ],
"consumes": [], "consumes": [],
"own-secrets": { "own-secrets": {
"broker": "/var/lib/sonarr/broker" "broker": "/var/lib/mesh/sonarr/broker"
}, },
"listens": [ "listens": [
{ {
@@ -21,6 +21,12 @@
} }
], ],
"resources": [ "resources": [
{
"id": "mesh-state",
"type": "directory",
"path": "/var/lib/mesh/sonarr",
"mode": "0700"
},
{ {
"id": "config", "id": "config",
"type": "directory", "type": "directory",
+7 -1
View File
@@ -5,7 +5,7 @@
"module.tautulli.watch.recorded" "module.tautulli.watch.recorded"
], ],
"own-secrets": { "own-secrets": {
"broker": "/var/lib/tautulli/broker" "broker": "/var/lib/mesh/tautulli/broker"
}, },
"capabilities": [ "capabilities": [
"container-runtime" "container-runtime"
@@ -19,6 +19,12 @@
} }
], ],
"resources": [ "resources": [
{
"id": "mesh-state",
"type": "directory",
"path": "/var/lib/mesh/tautulli",
"mode": "0700"
},
{ {
"id": "config", "id": "config",
"type": "directory", "type": "directory",
+7 -1
View File
@@ -8,7 +8,7 @@
"module.verdaccio.package.published" "module.verdaccio.package.published"
], ],
"own-secrets": { "own-secrets": {
"broker": "/var/lib/verdaccio/broker" "broker": "/var/lib/mesh/verdaccio/broker"
}, },
"listens": [ "listens": [
{ {
@@ -19,6 +19,12 @@
} }
], ],
"resources": [ "resources": [
{
"id": "mesh-state",
"type": "directory",
"path": "/var/lib/mesh/verdaccio",
"mode": "0700"
},
{ {
"id": "conf", "id": "conf",
"type": "directory", "type": "directory",