The lab's diagnostics said it in one line: AUTH called without any password configured for the default user. With an aclfile configured, redis takes the default user from the file and quietly ignores requirepass — so the empty seed this module shipped left the store without any password at all, politely refusing the credential the mesh had sealed for it. And the file could never have worked here anyway: it was host-declared content, which the host reconciles, so every re-apply would have wiped what ACL SAVE wrote — a fight between two reconcilers with the tenants as the ball. So no file. requirepass alone does what it says, and durability moves to the watch, which now checks the store and not only its inputs: a restarted store comes back empty and is re-granted within a tick, because reconciling is against reality, not against a diff of instructions. A run that failed leaves last empty, so the next tick retries instead of believing the inputs were handled.
examples
Things that run, kept here because a contract is easier to read as working code than as prose.
Nothing here is part of the control plane. The control plane decides and never touches a machine (README); everything in this directory runs on a machine and touches it. These are reference implementations of contracts the control plane defines, and a real one ships with the module that ships the software it configures.
postgres-provisioner |
the last step of a credential: reads what the mesh delivered and makes PostgreSQL accept it |
Running the provisioner
--watch reconciles now and again whenever what the mesh delivered changes. That is what lets it
be a module: an ordinary long-running service the host supervises, rather than something that has
to be invoked after every declaration by a timer or a unit wired to a file.
It polls rather than watching the filesystem, because the host writes atomically — the file is replaced, so a watch on the path stops seeing anything after the first replacement. A watcher that silently stops working is worse than a poll.
Credentials are compared by digest and never by content. This runs for as long as the machine is up, and a secret does not belong in a long-lived variable when a hash answers the same question.