Skip to content

Site provisioning

Experimental: the provisioner connector is optional. Most greenfield operators create clusters directly via FleetClusterJoin. Use this path when a site jumphost runs YAIDAP for metal/VM provisioning.

FleetSite.spec.provision binds an optional metal/VM provisioner (noop default, yaidap). The hub starts async connector actions; YAIDAP runs on the site jumphost using that site’s inventory path. On success the action returns a handoff host fragment (ansible_host, …) for enroll / add-worker.

Start with the YAIDAP operator guide (binding, inventory schema, checklist). Background: YAIDAP introduction, Inventory model, UMKIM integration. API details: fleet-site. Commands: umkim CLI.

Optional cluster membership and intent use the native Ansible layout:

  • {cluster}.yml (inventory root) — group with hosts: listing member guest names.
  • group_vars/{cluster}.yml — Fleet ClusterSpec fields (topology, autoApply, controlPlaneVip, haGroup, mode, …).
Field (in group_vars/{cluster}.yml) Purpose
topology single_node or ha_3_node
autoApply Reconciler creates FCJ when guests are Ready
controlPlaneVip / haGroup HA enroll

Inventory file layout and sync phases: Inventory model.

  1. Edit guests.yml, bare_metals.yml, hypervisors.yml, group_vars/all/all.yml, host_vars/{guest}.yml, {cluster}.yml, and group_vars/{cluster}.yml (console, CLI, or API). Libvirt guests live under guests.hosts; bare-metal cluster nodes under hub-only bare_metals.yml; hypervisors under hypervisors.yml.
  2. umkim site inventory sync SITE --wait — push synced YAML to jumphost.
  3. umkim site host provision SITE guest01 --wait — YAIDAP create_vm reads the top-level ansible_host line from host_vars/{guest}.yml. The hub marks guest status in _meta/status.json. After successful placement, the controller rewrites guests.yml and host_vars/{guest}.yml from schedule tokens (least-utilized, auto, or empty) to the concrete hypervisor (from YAIDAP_RESULT) and auto-syncs to the jumphost.
  4. Reconciler cluster-apply — creates FleetClusterJoin from cluster group files when members are Ready (umkim site host cluster-apply SITE guest01).
  5. Download bootstrap bundle; run bootstrap.sh on first control (via jumphost).
  6. umkim cluster provision NAME — hub finalize (OCM, edge, providers).

VM hosts created through the connector use minRootDiskGi: 38 on the FCJ (40G vdisk root LV is smaller than 40 GiB after EFI/boot).

Provision actions, discovery, and TempXE flows: Provisioning workflows and UMKIM integration.

Console is the fleet UI. On site homelab (jumphost linux@jump.otthol.hu:30200), open Provisioner inventory. The same clicks are shown in the console walkthrough.

Hypervisors in this lab: virt01 172.16.10.2, virt02 172.16.10.3, virt04 172.16.10.6. virt03 172.16.10.4 is bare metal (lab-single-0), not a libvirt guest. The Add VM guest form defaults are 2 CPU, 4096 MiB, and 40 GiB. This lab guest is docs-probe-vm on virt02 at 172.16.10.190.

  1. Add VM guest, step 1: Guest name, VM location (hypervisor name such as virt02 at 172.16.10.3, or least-utilized), and optional ansible_host / static IP on the lab LAN 172.16.10.0/24.
  2. Step 2: CPU cores, memory MiB, and boot disk GiB. Leave GPU passthrough unchecked unless the guest is a GPU passthrough VM on a prepared hypervisor (virt04 is 172.16.10.6).
  3. Save guest files writes guests.yml and host_vars/{name}.yml. When a static IP was entered, host_vars includes a top-level ansible_host line. create_vm reads that line. The file also sets os: rocky-10, provisioning_provider: libvirt, and configure_firewalld: false. The generated host_vars file uses MAC 52:54:00:00:00:01 unless you edit it. Change that address when another guest already uses it, then Save file.
  4. Sync to jumphost and wait until Sync phase is synced.
  5. Hosts tab, Provision, Run provision. That starts YAIDAP create_vm. A new guest does not need the confirm checkbox. Phase goes Declared, Provisioning, Ready. The libvirt domain is on the hypervisor named by vm_location.
  6. Destroy VM removes the libvirt domain and keeps the guest in guests.yml and host_vars. Confirm the checkbox before the destroy button.
Terminal window
umkim site provision set SITE --provider yaidap \
--jumphost linux@jump.example:22 \
--ssh-secret fleet-site-SITE-provision-ssh \
--inventory /path/to/yaidap/inventory \
--yaidap-root /path/to/yaidap

Optional: set yaidapRepo / yaidapRef on the site and run umkim site provision yaidap-sync SITE (or POST …/provision/yaidap/sync) so the hub clones or updates the YAIDAP checkout on the jumphost before provision actions.

Default provider is noop (caller supplies the SSH-ready host fragment via --ansible-host on provision run).