A standby
A standby
stado placement standby PROFILE --host HOST --reason WHY makes a registered
host a place the profile may move to, as one idempotent pass: each service of
the profile is resolved through the service catalog — by its own name, else by
the unit the placed host's template declares for it (its name, then its
launchd label or systemd unit), since a directory service named for what it
offers often runs a product the catalog names otherwise — and classified by its
program — a managed program under $HOME/.stado/bin is delivered through the
same manifest-verified path stado release version converge uses, at the
version the host or the placed host declares under managed_versions; a
release-controlled tree under $HOME/.stado/services/<product>/current is
declared for the host in the release control of that product, or of the
product whose service names it (weles-worker rolls out
weles-admission) — an install_root written as an absolute path under the
placed host's home is rewritten in the same commit to that path under
{home} (for a host release control already targets, in a commit of its
own), which each host expands to its own home, and a root under neither
is refused, since the new host would install into a path not its own; when
the root is not {home}/.stado/services/<product> itself, where the catalog
program runs from, or when the product's release control rolls it out with
the replace strategy (the release agent drives only blue-green policies, and
a replace release reaches a target only when it is promoted, so no agent
pass would ever stage it), the pass also installs the desired release there
(fetched and verified against its signed manifest as the release agent does,
unpacked by the archive installer stado service release uses, current
moved onto it, the catalog program required in it; a tree already active from
that archive is left as it is), reporting delivered, since the
agent's rollout would leave the staged unit's program missing — under the $HOME the
host's own shell states (read over its channel; a host that does not state
one is refused as unreachable), and the host's own
agent stages it — then every unit is asserted through service ensure from
the catalog for the host's platform, and only when every unit is declared is
the host written into the profile and into the directory as a standby
endpoint. Its probes are the placed host's, each asking the port its unit
listens on on this host — the address the directory names for the host,
else the placed host's port, which the unit then takes — so a host the
directory already serves on another port is probed where it listens; a
probe of a service the directory does not route is copied as it is, and a
probe URL that cannot carry a port is refused by name. Before each unit is
staged, the host's socket table is read for the port the directory gives it
there; the staged unit is not running, so any listener is another program, and
the pass is refused with <host>: the service directory gives <service> (<catalog>) port <port> there, and pid <pid> (<command> as <user>) already listens on it; the moved unit could not bind it. Give <service> a free port on <host> in the directory's standby address, or move the other program off it, then stand by again. The host said: …. Writing the host into the directory
advances service_directory.generation with it: every resolver refuses a
directory changed under the generation it holds, and a registry write that
would do that is refused before the store sees it. A pass that stops at a
pending rollout reports awaiting_release_rollout; the next pass continues.
Refusals name the cause: an unknown profile, the placed host standing by for itself, a
service the catalog does not know, a program neither delivery path reaches,
a product with no artifact for the host's platform (and the submit that would
build one), a version nobody declares. --check gives the refusals the pass
gives before it delivers anything — no reason, an unknown profile or one a
move holds, the placed host standing by for itself, a service the catalog
does not know, a program neither delivery path reaches — and lists what it
would deliver ({"status": "would_stand_by", "profile", "host", "placed_on", "platform", "services": [{"service", "catalog", "delivery": "managed_program"|"release_tree", "product", "release_control", "as_daemon"}]}
with --json, release_control naming, for a tree, the release-control
product that rolls it out and its install_root, or null when none does;
the text form prints one line per service, <host> <service> <delivery> <product> <release-control product> with not reported for a field the
check has none for, then <profile> <host> would_stand_by),
delivering, staging and writing nothing; artifact and version
refusals come only from the delivery itself. Each step of the pass is a wait on
stderr, czekam: placement standby of <profile> on <host>: deliver <service>,
… stage unit <service> and … write the host into the profile and the directory (on the registry), closed with its time or its cause, so a pass
that stands names its step in stado waits and in Stado Desktop's open waits.
Every managed program of the profile is delivered at once, each over the
host's own channel; release-controlled trees are declared one after another,
since each is a compare-and-swapped registry commit. The receipt lists the
deliveries in the profile's order, and the first refusal in that order is the
one reported.
Source: this website