Two hosts over SSH

This inventory reuses the Vmango example on two disposable AlmaLinux 10 x86_64 targets. Its richt-test-a and richt-test-b SSH aliases are placeholders. Configure each alias’s HostName, non-root User, authentication key/agent and trusted host key using normal OpenSSH settings. Both accounts need noninteractive sudo -n for the managed operations. Both targets need DNF 4, systemd, distribution repositories, CRB, EPEL and COPR network access; neither needs a compiler, fixture package build, hypervisor or Vmango login user. Prepare CRB and EPEL on each target with sudo -n dnf config-manager --set-enabled crb and sudo -n dnf install -y epel-release; the published RPM needs EPEL’s genisoimage dependency. Start without an existing Vmango installation or the example’s managed files. See SSH rules for explicit overrides and authentication.

From the repository root, inventory-only inspection is safe even before SSH is configured:

bin/richt inventory validate -i examples/ssh/inventory.yaml
bin/richt inventory show -i examples/ssh/inventory.yaml

After replacing/configuring the aliases, check each connection, prepare once, then explicitly apply. The checks require no remote configuration changes:

ssh -o BatchMode=yes richt-test-a 'sudo -n true'
ssh -o BatchMode=yes richt-test-b 'sudo -n true'
bin/richt diff -i examples/ssh/inventory.yaml -o /var/tmp/richt-ssh-plan.json
bin/richt apply -y --parallelism 2 /var/tmp/richt-ssh-plan.json
bin/richt diff -i examples/ssh/inventory.yaml

The second diff should have no changes. Hosts can run concurrently, while services/tasks remain ordered within each host. --parallelism 1 makes host execution sequential; the default limit is 20. A failed host blocks its later tasks while the other host continues. Fix the external problem, then apply the same saved plan explicitly to skip successful tasks and retry unfinished ones. No automatic retry occurs. Saved plans retain explicit inventory connections and ready config bytes; OpenSSH still reads current client configuration.

For cleanup, set both assignments in the shared tags.example.services map to state: absent, build a new removal plan and apply it. The Vmango walkthrough describes retained application data and RPM side effects. Do not delete assignments as a substitute for declaring absence.

Validation status: published Vmango installation/no-op/removal passed on two independent AlmaLinux 10.2 x86_64 targets on 2026-11-01 using non-root SSH, explicit sudo and --parallelism 2. A separate two-host secret/file scenario verified frozen inputs, host failure isolation and manual continuation. See the acceptance report for environment and limits.