Taking the claim off made the seat unheld, and the controller dereferences that seat to find its own bus (to-be 26, "the one exception is the controller itself"). Unheld, the composed address fell back to a default port nothing serves, and the control plane crash-looped: "cannot reach the broker named in MESH_BROKER_AMQP: dial tcp 127.0.0.1:5672". The broker itself never stopped — it is healthy on the port the mesh actually assigned it. lavinmq becoming an ordinary provider is right, and it is still a provider of amqp here. What was wrong is the order: the seat has to pass from one holder to the next, and it cannot be empty in between, because the thing that reads it is the thing that would have to fix it.
152 lines
3.3 KiB
JSON
152 lines
3.3 KiB
JSON
{
|
|
"module": "lavinmq",
|
|
"version": "1",
|
|
"provides": [
|
|
{
|
|
"name": "amqp",
|
|
"scope": "mesh"
|
|
}
|
|
],
|
|
"claims": [
|
|
{
|
|
"name": "mesh-broker",
|
|
"scope": "mesh"
|
|
}
|
|
],
|
|
"capabilities": [
|
|
"container-runtime"
|
|
],
|
|
"emits": [
|
|
"amqp.provisioned",
|
|
"amqp.deprovisioned"
|
|
],
|
|
"consumes": [
|
|
"lavinmq.amqp.provisioned",
|
|
"lavinmq.amqp.deprovisioned"
|
|
],
|
|
"serves": {
|
|
"amqp": {
|
|
"port": 5672
|
|
}
|
|
},
|
|
"receives": {
|
|
"amqp": "/var/lib/lavinmq-module/grants/mesh.json"
|
|
},
|
|
"grants": {
|
|
"amqp": "/var/lib/lavinmq-module/grants"
|
|
},
|
|
"own-secrets": {
|
|
"admin": "/var/lib/lavinmq-module/admin.secret",
|
|
"broker": "/var/lib/mesh/lavinmq/broker"
|
|
},
|
|
"listens": [
|
|
{
|
|
"port": 5671,
|
|
"protocol": "tcp",
|
|
"from": "mesh",
|
|
"why": "the mesh bus \u2014 amqps, every module's events and the control plane, reached over the overlay"
|
|
},
|
|
{
|
|
"port": 5672,
|
|
"protocol": "tcp",
|
|
"from": "mesh",
|
|
"why": "modules on any machine that were granted a queue"
|
|
}
|
|
],
|
|
"guards": [
|
|
15672
|
|
],
|
|
"resources": [
|
|
{
|
|
"id": "mesh-state",
|
|
"type": "directory",
|
|
"path": "/var/lib/mesh/lavinmq",
|
|
"mode": "0700"
|
|
},
|
|
{
|
|
"id": "state",
|
|
"type": "directory",
|
|
"path": "/var/lib/lavinmq-module",
|
|
"mode": "0700"
|
|
},
|
|
{
|
|
"id": "grants-dir",
|
|
"type": "directory",
|
|
"path": "/var/lib/lavinmq-module/grants",
|
|
"mode": "0700"
|
|
},
|
|
{
|
|
"id": "broker-data",
|
|
"type": "directory",
|
|
"path": "/var/lib/mesh-broker",
|
|
"mode": "0700"
|
|
},
|
|
{
|
|
"id": "server",
|
|
"type": "container",
|
|
"name": "mesh-broker",
|
|
"image": "cloudamqp/lavinmq@sha256:3eb54c12916d700a978c2ea86e6362cd4974b0e3189508718006d4e6d341246b",
|
|
"ports": [
|
|
"5671:5671",
|
|
"5672:5672",
|
|
"127.0.0.1:15672:15672"
|
|
],
|
|
"volumes": [
|
|
"/var/lib/mesh-broker:/var/lib/lavinmq",
|
|
"/var/lib/mesh-broker-tls:/tls:ro"
|
|
],
|
|
"args": [
|
|
"--amqps-port=5671",
|
|
"--cert=/tls/tls.crt",
|
|
"--key=/tls/tls.key"
|
|
]
|
|
},
|
|
{
|
|
"id": "runtime",
|
|
"type": "container",
|
|
"name": "mesh-lavinmq",
|
|
"artifact": "runtime",
|
|
"network": "host",
|
|
"volumes": [
|
|
"/var/lib/mesh/lavinmq/broker:/run/secrets/broker:ro",
|
|
"/var/lib/lavinmq-module/grants:/var/lib/lavinmq-module/grants:ro",
|
|
"/var/lib/lavinmq-module/admin.secret:/run/secrets/admin:ro"
|
|
],
|
|
"env": {
|
|
"MESH_BROKER_FILE": "/run/secrets/broker",
|
|
"MESH_RECEIVES": "/var/lib/lavinmq-module/grants/mesh.json",
|
|
"MESH_PROVISION_LAVINMQ": "http://127.0.0.1:15672",
|
|
"MESH_PROVISION_ADMIN_USER": "guest",
|
|
"MESH_PROVISION_PASSWORD_FILE": "/run/secrets/admin"
|
|
}
|
|
}
|
|
],
|
|
"build": {
|
|
"on": [
|
|
{
|
|
"arg": "BUILD_BASE",
|
|
"module": "mesh-tools",
|
|
"artifact": "build"
|
|
},
|
|
{
|
|
"arg": "RUNTIME_BASE",
|
|
"module": "mesh-tools",
|
|
"artifact": "runtime"
|
|
}
|
|
],
|
|
"artifacts": [
|
|
{
|
|
"name": "runtime",
|
|
"kind": "image",
|
|
"from": "Dockerfile"
|
|
}
|
|
]
|
|
},
|
|
"accesses": [
|
|
{
|
|
"path": "/var/lib/mesh-broker-tls",
|
|
"mode": "read"
|
|
}
|
|
]
|
|
}
|