registry_incoming, npm_incoming and go_incoming dropped a transfer by hand with only a log line. Each drop now records its hand act through the seat mesh-hand-acts before anything goes, as nats_requests does; an act not recorded leaves the transfer open. distribution's manifest invokes the seat. Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
265 lines
5.7 KiB
JSON
265 lines
5.7 KiB
JSON
{
|
|
"module": "distribution",
|
|
"version": "2",
|
|
"provides": [
|
|
{
|
|
"name": "artifact-store",
|
|
"scope": "mesh",
|
|
"credential": {
|
|
"form": "none"
|
|
}
|
|
}
|
|
],
|
|
"claims": [
|
|
{
|
|
"name": "container-image-registry",
|
|
"scope": "mesh",
|
|
"serves": [
|
|
"hold",
|
|
"mirror",
|
|
"publish",
|
|
"publish-part",
|
|
"release",
|
|
"remove",
|
|
"tags",
|
|
"versions"
|
|
]
|
|
},
|
|
{
|
|
"name": "oci-artifact-registry",
|
|
"scope": "mesh",
|
|
"serves": [
|
|
"hold",
|
|
"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"
|
|
],
|
|
"emits": [
|
|
"old-name-closed",
|
|
"direct-writes-closed"
|
|
],
|
|
"config": {
|
|
"callers": {
|
|
"type": "string",
|
|
"trusted": true,
|
|
"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": {
|
|
"max-age-days": 7,
|
|
"max-mib": 16
|
|
}
|
|
}
|
|
],
|
|
"capabilities": [
|
|
"container-runtime"
|
|
],
|
|
"own-secrets": {
|
|
"broker": "/var/lib/mesh/registry/broker"
|
|
},
|
|
"secrets-owner": "distribution",
|
|
"serves": {
|
|
"artifact-store": {
|
|
"port": 5000
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
},
|
|
{
|
|
"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"
|
|
]
|
|
}
|
|
]
|
|
}
|
|
}
|