Go to file
Maarten 594467ddf6 Add Hetzner lab guide + target configs for AWX and HAProxy
Validates full end-to-end deployment: OC + 3-node Incus cluster,
OVN overlay, HAProxy HA pair, AWX on K3s, Prometheus/Grafana stack.

New files:
- hetzner/hetzner-lab-guide.md — complete end-to-end deployment guide
- incusos/targets/hetzner/awx.yaml — AWX deploy config (hz-node-03, 10.10.0.122)
- incusos/targets/hetzner/haproxy.yaml — HAProxy deploy config (VIP 10.10.0.200)

Script fixes discovered during Hetzner deployment:
- deploy-awx: parse target_remote correctly (was reading target_node key);
  add RESUME flag support; fix target_node passthrough to incus launch;
  fix aether_url sed to not strip :8443 port
- deploy-observability: fix --remote flag (was --cluster-remote in docs),
  fix --resume to clearly skip phases 1-5 including node-exporters
- hetzner/proxmox-setup: state detection improvements from full run
- incusos-proxmox, deploy-haproxy: minor fixes from Hetzner testing

Guide covers known Aether v6.4.202 workarounds:
- HAProxy ACL bug (OVN LB DNAT-only, source IP not VIP)
- AWX cluster binding API bug (DB workaround documented)
- OVN SNAT unreliable for net-prod containers (offline install procedure)
- node-exporter manual deploy when --resume skips phase 5

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-03 16:03:08 +01:00
.claude Add Hetzner bare metal setup guide, proxmox-setup script, and multi-target config layout 2026-03-02 15:52:57 +01:00
ansible Add AWX showcase blueprints: webapp, staticsite, k3scluster 2026-02-26 15:16:49 +01:00
hetzner Add Hetzner lab guide + target configs for AWX and HAProxy 2026-03-03 16:03:08 +01:00
incusos Add Hetzner lab guide + target configs for AWX and HAProxy 2026-03-03 16:03:08 +01:00
notes Update observability guide and refresh all dashboard screenshots 2026-02-25 15:14:56 +01:00
screenshots Update observability guide and refresh all dashboard screenshots 2026-02-25 15:14:56 +01:00
.gitignore Add Hetzner lab guide + target configs for AWX and HAProxy 2026-03-03 16:03:08 +01:00
.mcp.json Add API interception guide, incus-mitm helper, and payload rules 2026-02-24 15:01:56 +01:00
CLAUDE.md Add Hetzner bare metal setup guide, proxmox-setup script, and multi-target config layout 2026-03-02 15:52:57 +01:00
README.md Add Hetzner bare metal setup guide, proxmox-setup script, and multi-target config layout 2026-03-02 15:52:57 +01:00

README.md

incu-contrib

Peripheral tools, snippets, and scripts for working with Incus, IncusOS, and the broader ecosystem.

Primarily aimed at home lab environments but useful in production as well.

Contents

incusos/

Scripts for building IncusOS installation media and seed configurations:

  • incusos-iso -- Build customized IncusOS ISO/IMG images using the official flasher-tool. Supports both architectures (x86_64, aarch64), multiple applications (Incus, Operations Center), automatic client certificate injection, and batch generation.

  • incusos-seed -- Generate IncusOS seed archives (tar or FAT image) for installation customization. Covers all seed file types: install, applications, Incus preseed, Operations Center, network, and update configuration.

  • incusos-proxmox -- Declarative IncusOS deployment on Proxmox VE. Define VMs in YAML, and the script handles seed generation, ISO upload, VM creation with correct settings (UEFI, TPM 2.0, VirtIO-SCSI), and automated installation.

  • targets/ -- Per-host Proxmox connection configs and lab definitions. Each subdirectory (beelink, hetzner) has a proxmox.yaml.example and lab YAML files sized for that host. See targets/README.md.

  • deploy-awx -- Deploy and manage AWX (Ansible automation) on the Incus cluster. Handles VM creation, K3s install, AWX Operator deployment, project/template configuration, and Aether integration.

See incusos/README.md for full documentation.

ansible/

Ansible playbooks for AWX/Aether lifecycle hooks. Playbooks use the Incus REST API (not SSH) for all instance operations — works regardless of network topology.

  • playbooks/post-deploy.yml -- Runs after Aether creates an instance. Configures hostname, installs base packages, sets timezone, logs deployment.
  • playbooks/decommission.yml -- Runs before Aether deletes an instance. Graceful service shutdown and decommission logging (best-effort).

hetzner/

Setup guide and automation for deploying IncusOS labs on a Hetzner dedicated server:

  • hetzner-setup.md -- Step-by-step guide: Proxmox install, private networking, WireGuard tunnel, firewall lockdown, and API token creation.
  • proxmox-setup -- Interactive helper script that automates the guide steps over SSH. Configures repos, bridge, storage, WireGuard, firewall, and API tokens.

See also incusos/targets/ for per-host connection configs and lab definitions.

notes/

Guides and reference material (roughly in learning order):

Quick Start

# Install the flasher-tool (requires Go 1.22+)
go install github.com/lxc/incus-os/incus-osd/cmd/flasher-tool@latest

# Build a default IncusOS ISO with your client cert injected
./incusos/incusos-iso

# Build for a specific architecture and application
./incusos/incusos-iso --arch aarch64 --app operations-center --defaults

# Generate all common ISO variants at once
./incusos/incusos-iso --batch

# Generate a standalone seed archive
./incusos/incusos-seed --app incus --defaults --output my-seed.tar

# Generate a SEED_DATA FAT image for external boot media
./incusos/incusos-seed --format fat --app incus --defaults --output seed.img

Requirements

  • Go 1.22+ -- for installing the flasher-tool
  • curl -- for downloading images from the CDN
  • tar, gzip -- for seed archive creation and image decompression
  • Incus client (recommended) -- for automatic client certificate detection. Works with any version; certificates are read directly from disk. See version compatibility notes for install instructions per platform (macOS, Debian/Ubuntu, Arch).
  • mtools (optional) -- for creating FAT seed images

License

MIT