-- Which node a machine gets a provision from, when more than one could answer. -- -- One database in a mesh needs no such record: there is one answer and the mesh takes it. Several -- is entirely ordinary, and then picking one is a choice with consequences -- somebody's data -- lands on the machine that was chosen -- so the mesh refuses to guess and this is where the -- answer is kept once a person gives it. -- -- Per node rather than per mesh, because that is the granularity the choice actually has: two -- machines may reasonably use two different databases, and a mesh-wide answer could not say so. create table provision_pin ( node uuid not null references node(id) on delete cascade, -- The provision as required -- `database`, not `postgres`. What is being chosen is which node -- answers a requirement, and the module answering it may change without the choice changing. name text not null, -- The node it comes from. Not a module: the same module on two machines is two answers, and -- which machine is the whole question. provider uuid not null references node(id) on delete cascade, pinned_at timestamptz not null default now(), primary key (node, name) ); -- A pin naming a node that leaves the mesh goes with it. The alternative is a machine pointed at -- something that no longer exists, reported as configured. create index provision_pin_provider on provision_pin (provider);