Files
mesh-catalog/modules/distribution/module.json
T
jschoubben 80b8002a94
mesh/delivery merged: source.main moved to novox/mesh-catalog@bac7f503f0ae
mesh/check checking 80b8002a94f7 on bac7f503f0ae
distribution provides artifact-store again beside its new roles, for the running node-engines (issue 1966)
The registry milestone renamed what distribution offers (container-image-registry, oci-artifact-registry,
mesh-artifact-store), as ADR 0632 section 3 decides. The node-engines running on every node are the ones
from before it: they find the store through the provision artifact-store, so they fetch no new build,
including their own successor, and keep running what they ran. ADR 0632 section 2's guarantee (no node loses
the store while its engine reads it the old way) lives in the new indexer's hold, which the running indexer
predates. So this goes against ADR 0632 section 3 for a limited time, at the operator's word (bootstrap of
2026-11-07, no new record): offered again beside the new roles until every node-engine runs the registry
milestone's build, then removed in the next change to distribution.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-07 17:02:47 +01:00

285 lines
6.1 KiB
JSON

{
"module": "distribution",
"version": "2",
"packages": {
"builds": "0.1"
},
"provides": [
{
"name": "artifact-store",
"scope": "mesh",
"credential": {
"form": "none"
}
}
],
"serves": {
"artifact-store": {
"port": 5000
}
},
"claims": [
{
"name": "container-image-registry",
"scope": "mesh",
"serves": [
"hold",
"list",
"mirror",
"publish",
"publish-part",
"release",
"remove",
"tags",
"versions"
]
},
{
"name": "oci-artifact-registry",
"scope": "mesh",
"serves": [
"hold",
"list",
"publish",
"publish-part",
"release",
"remove",
"versions"
]
},
{
"name": "mesh-artifact-store",
"scope": "mesh"
}
],
"tools": [
"registry_callers",
"registry_direct_writes",
"registry_health",
"registry_holds",
"registry_incoming",
"registry_mirrors",
"registry_old_name"
],
"invokes": [
"distribution.registry_callers",
"mesh-delivery-builder.builder_versions",
"mesh-delivery-view.node_haves",
"seat:node-engine.manifest-reads",
"seat:mesh-hand-acts.hand-act"
],
"consumes": [
"mesh-delivery-view.delivered",
"node-engine.manifest-reads-changed"
],
"config": {
"callers": {
"type": "string",
"trusted": true,
"runtime": true,
"default": "",
"description": "per verb, the modules that may call it (JSON object of verb to modules; operator for the operator's session); empty is design 51's list"
}
},
"requires": [
{
"name": "incoming",
"storage": "object-store",
"template": "objects",
"options": {
"max-mib": 8192
}
},
{
"name": "transfers",
"storage": "key-value",
"template": "state"
},
{
"name": "idle",
"storage": "key-value",
"template": "state",
"options": {
"key-ttl": true
}
},
{
"name": "holds",
"storage": "key-value",
"template": "state"
},
{
"name": "windows",
"storage": "key-value",
"template": "state"
},
{
"name": "mirrors",
"storage": "key-value",
"template": "state"
},
{
"name": "findings",
"storage": "key-value",
"template": "state"
},
{
"name": "events",
"storage": "stream",
"template": "events",
"options": {
"events": [
"old-name-closed",
"direct-writes-closed"
],
"max-age-days": 7,
"max-mib": 16
}
}
],
"capabilities": [
"container-runtime"
],
"own-secrets": {
"broker": "/var/lib/mesh/registry/broker"
},
"secrets-owner": "distribution",
"listens": [
{
"name": "registry",
"port": 5000,
"protocol": "tcp",
"from": "mesh",
"why": "every machine pulls images and artifacts from here; distribution's program serves it in front of the store"
}
],
"data": {
"own": [
{
"id": "registry",
"path": "${dir:registry-data}",
"class": "rebuildable",
"backup": "none",
"measure": "shallow",
"why": "the artifact store: every image is built again from its source, and too large to copy every night (ADR 0214 left it out)"
}
]
},
"resources": [
{
"id": "account",
"type": "user",
"name": "distribution",
"shell": "/usr/bin/nologin",
"home": "/var/lib/mesh/registry"
},
{
"id": "state",
"type": "directory",
"path": "/var/lib/mesh/registry",
"mode": "0700",
"unknown": "program",
"owner": "distribution"
},
{
"id": "registry-data",
"type": "directory",
"path": "/var/lib/mesh-registry",
"mode": "0700",
"unknown": "program",
"owner": "distribution"
},
{
"id": "store",
"type": "container",
"name": "mesh-registry",
"image": "registry@sha256:a3d8aaa63ed8681a604f1dea0aa03f100d5895b6a58ace528858a7b332415373",
"ports": [
"127.0.0.1:5001:5000"
],
"volumes": [
"/var/lib/mesh-registry:/var/lib/registry"
],
"env": {
"REGISTRY_STORAGE_DELETE_ENABLED": "true"
},
"health": {
"kind": "http",
"endpoint": "registry",
"path": "/v2/",
"status": 200,
"interval": "60s",
"timeout": "10s",
"looks": 2,
"grace": "90s"
}
},
{
"id": "program",
"type": "process",
"name": "distribution",
"artifact": "program",
"run": [
"./distribution"
],
"env": {
"MESH_BROKER_FILE": "/var/lib/mesh/registry/broker",
"MESH_REGISTRY_LOOPBACK": "http://127.0.0.1:5001",
"MESH_REGISTRY_LISTEN": ":5000"
},
"user": "distribution",
"health": {
"kind": "tool",
"tool": "registry_health",
"interval": "60s",
"timeout": "10s",
"looks": 2,
"grace": "90s"
}
},
{
"id": "collect",
"type": "container",
"name": "mesh-registry-collect",
"image": "registry@sha256:a3d8aaa63ed8681a604f1dea0aa03f100d5895b6a58ace528858a7b332415373",
"volumes": [
"/var/lib/mesh-registry:/var/lib/registry"
],
"args": [
"garbage-collect",
"/etc/docker/registry/config.yml"
],
"schedule": "30 3 * * *",
"while-stopped": [
"store"
]
}
],
"build": {
"artifacts": [
{
"name": "program",
"kind": "bundle",
"language": "go",
"system": "arch",
"from": "cmd/distribution",
"binary": "distribution"
},
{
"name": "tools",
"kind": "bundle",
"language": "go",
"system": "arch",
"from": "cmd/distribution-tools",
"binary": "distribution-tools",
"loads": [
"distribution-tools"
],
"env": {
"MESH_REGISTRY_CONTAINER": "mesh-registry"
}
}
]
}
}