Skip to content

YAIDAP

Experimental: YAIDAP is a sibling repository, not vendored into UMKIM. Validate on your hardware before production use.

YAIDAP (Yet Another Inventory-Driven Ansible Provisioner) is inventory-defined host provisioning: multi-NIC bridges and VLANs, optional bonding, firewalld, temporary PXE (TempXE), and VM create/destroy (libvirt-first, Proxmox optional).

Canonical source: github.com/rborso/yaidap.

┌─────────────────────────────────────────────────────────────┐
│ UMKIM hub (L1: OS → fleet) │
│ FleetClusterJoin · OCM · Harbor · FleetApp · fleet-edge │
└───────────────────────────┬─────────────────────────────────┘
│ SSH-ready handoff
▼
┌─────────────────────────────────────────────────────────────┐
│ YAIDAP (L0: iron → OS) │
│ TempXE / PXE · libvirt · hypervisor prepare · guest VMs │
└─────────────────────────────────────────────────────────────┘

YAIDAP provisions bare metal and hypervisor guests until they are SSH-ready. UMKIM takes over at that point with cluster enroll, bootstrap, and fleet operations. Kubernetes, OCM, Harbor, and FleetApp are out of scope for YAIDAP.

When a site does not need metal/VM provisioning, leave FleetSite.spec.provision.provider at noop and supply SSH-ready hosts directly via FleetClusterJoin.

Capability Notes
Bare metal OS install TempXE PXE kickstart (Rocky, Proxmox)
Hypervisor prepare Bridges, bonds, libvirt pools, Proxmox pvesm, firewalld
VM create/destroy libvirt cloud-init (default) or Proxmox
Hardware discovery SSH (discover-hosts.yml) or PXE/TempXE collector
GPU passthrough VFIO host prep + guest attach
OpenWrt gateway Virtualized ZTP + optional DynDNS/reverse proxy

On the site jumphost (or any Ansible controller running YAIDAP directly):

Terminal window
ansible-galaxy collection install -r requirements.yml
pip install -r python_requirements.txt

Copy inventory/example/ and replace IPs, MACs, and keys before real use. The inventory/demo/ tree is a fictional reference lab for walkthroughs.

playbooks/ tag-driven entrypoints (always use --tags)
roles/
configure-common Uplink normalization, discovery, firewalld
configure-hypervisor Bridges, bonds, libvirt pools, Proxmox pvesm
configure-provisioning VM create/destroy, placement scheduling
configure-tempxe TempXE PXE container, kickstart, discovery collector
configure-router OpenWrt DynDNS, reverse proxy, ACME
inventory/example/ sanitized starter inventory (schema contract)
Playbook Tags Purpose
discover-hosts.yml check_host_details SSH hardware draft → generated/host_vars/
configure-tempxe.yml configure_tempxe, tempxe_start/stop, collect_discovery PXE arm/disarm, BM install, PXE discovery
configure-hypervisors.yml prepare, prepare_gpu_passthrough HV bridges, storage pools
plan-vm-placement.yml plan Dry-run vm_location: least-utilized scheduling
provision-vms.yml create, destroy Guest VM lifecycle
validate-all.yml validate Schema check (no remote changes)
validate-integration.yml validate_integration Structured validate JSON for hub/console (yaidap_emit_result)
install-bare-metal.yml install_bm TempXE bare-metal OS install (UMKIM install_bm)
discover-pxe.yml discover_pxe TempXE PXE hardware discovery (UMKIM discover_pxe)
configure-routers.yml configure_router OpenWrt DynDNS, nginx reverse proxy, ACME

Hub connector jobs map provision actions to these playbooks and parse YAIDAP_RESULT (schema: yaidap.integration.v1) from job logs. See Playbook and tag map and UMKIM integration.

Provider When to use
noop (default) Greenfield operators create clusters directly via FleetClusterJoin; hosts are already SSH-ready
yaidap Site jumphost runs YAIDAP; hub stores native Ansible inventory, syncs to jumphost, and dispatches provision actions as async Jobs

Binding a YAIDAP site is documented in UMKIM integration. The operator runbook for inventory → cluster is Site provisioning.