{ "module": "nats", "version": "1", "upgrade": { "policy": "record", "why": "the bus: replaced only as a planned step a person starts (`bus upgrade`), its streams snapshotted first and checked after (hq ADR 0236); the controller holds this whatever is said here" }, "provides": [ { "name": "mesh-bus", "scope": "mesh" } ], "claims": [ { "name": "mesh-broker", "scope": "mesh" } ], "bus-users": "/var/lib/nats-module/conf/accounts.conf", "own-secrets": { "broker": "${dir:mesh-state}/broker" }, "capabilities": [ "container-runtime" ], "emits": [], "consumes": [], "listens": [ { "name": "bus", "port": 4222, "protocol": "tcp", "from": "mesh", "why": "the mesh bus — every link the mesh has, over TLS, reached across the overlay" } ], "tools": [ "nats_server", "nats_connections", "nats_closed_connections", "nats_subscriptions", "nats_streams", "nats_backlog", "nats_buckets", "nats_users", "nats_user_can" ], "guards": [ 8222 ], "data": { "own": [ { "id": "jetstream", "path": "${dir:jetstream-data}", "class": "valuable", "active": "1d", "backup": { "dump": "docker exec -i mesh-broker-nats mesh-nats-snapshot snapshot < ${dir:mesh-state}/broker > ${dir:snapshots}/bus.tar.partial && mv ${dir:snapshots}/bus.tar.partial ${dir:snapshots}/bus.tar || { rm -f ${dir:snapshots}/bus.tar.partial; exit 1; }", "into": "snapshots" }, "why": "the bus's streams and key-value buckets: the hand-act log, conditions, every module's state; written all the time, so copied by the server's own snapshot of each stream (novox/hq ADR 0235), never as live files" }, { "id": "snapshots", "path": "${dir:snapshots}", "class": "rebuildable", "why": "last night's snapshot of every stream with its manifest, made again every night" } ] }, "resources": [ { "id": "jetstream-data", "type": "directory", "path": "/var/lib/mesh-broker-nats", "mode": "0700" }, { "id": "conf-dir", "type": "directory", "path": "/var/lib/nats-module/conf", "mode": "0700" }, { "id": "snapshots", "type": "directory", "mode": "0700" }, { "id": "mesh-state", "type": "directory", "mode": "0700", "place": "mesh" }, { "id": "server-conf", "type": "file", "path": "/var/lib/nats-module/conf/nats.conf", "template": "files/nats.conf", "mode": "0644" }, { "id": "server", "type": "container", "name": "mesh-broker-nats", "ports": [ "4222:4222", "127.0.0.1:8222:8222" ], "volumes": [ "/var/lib/mesh-broker-nats:/data", "/var/lib/nats-module/conf:/etc/nats:ro", "${access:tls}:/tls:ro" ], "artifact": "server" } ], "accesses": [ { "id": "tls", "path": "/var/lib/mesh-broker-tls", "mode": "read" } ], "build": { "on": [ { "arg": "NATS_BASE", "image": "nats@sha256:e4bf19f15fd3218814a4e3c9e0064e1334bd8aa20d5984b9f1a0afd084f8cc00" }, { "arg": "GO_BASE", "image": "golang@sha256:8ac98ca534ac3f51e1f420a1dd2c15e74c75cfa0f23f3ad27eb5d7236c349a0c" } ], "artifacts": [ { "name": "server", "kind": "image", "from": "Dockerfile" }, { "name": "tools", "kind": "bundle", "language": "go", "system": "arch", "from": "cmd/nats-tools", "binary": "nats-tools", "loads": [ "nats-tools" ], "env": { "MESH_NATS_MONITOR": "http://127.0.0.1:8222", "MESH_NATS_CONTAINER": "mesh-broker-nats", "MESH_NATS_USERS_FILE": "/etc/nats/accounts.conf" } }, { "name": "files", "kind": "archive", "from": "files" } ] } }