Files
mesh-lab/scenarios/two-nodes.yml
T
jschoubben 21a1e85d32 Prove rotation against a real database, with a real login
Two ends holding a matching string proves they agree, not that either is right.
So the check is three logins over the private network from the consumer's own
machine: the delivered credential works, the rotated one works, and the one
that was rotated away does not. Without the last, the test passes against a
provider that added a password without replacing one.

Not over loopback: pg_hba trusts anything there, and a deliberately wrong
password returned a row for a whole afternoon once.
2026-08-31 02:39:00 +02:00

40 lines
1.4 KiB
YAML

# Two machines, one mesh.
#
# The first raises everything from the bundle its host carries and joins the mesh it made. The
# second is an ordinary node: it has a host and nothing else, and a person carries it a token.
#
# This is the first scenario where the mesh is a mesh. Everything before it proved a machine could
# talk to a control plane on its own loopback, which proves less than it looks.
scenario: two-nodes
segments:
hosting:
kind: public
cidr: [192.0.2.0/24]
machines:
anchor:
at: { segment: hosting, address: [192.0.2.10] }
inbound: allow
laptop:
at: { segment: hosting, address: [192.0.2.20] }
inbound: allow
images:
- postgres:17-alpine
- cloudamqp/lavinmq:latest
- mesh-control:development
# So a module can mirror one into a registry of the mesh's own. The scenario's registry serves
# what the mesh's registry is built from — the same chicken-and-egg the bootstrap has, resolved
# the same way.
- registry:2
# And the builder, because it is a module the mesh assigns rather than a program somebody
# starts by hand — which is the only way its credential can be one the mesh delivered.
- mesh-builder:development
# And the provisioner, which is what makes a sealed credential true on a machine — the mesh
# discarded the plaintext and cannot tell a database to start accepting it.
- mesh-provision-postgres:development
place:
all: [host, runtime]