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> |
||
|---|---|---|
| .. | ||
| beelink | ||
| hetzner | ||
| README.md | ||
README.md
Target Configurations
Target-specific Proxmox connection configs and lab definitions. Each subdirectory represents a physical host (or host type) with its own network topology, storage backend, and resource sizing.
How it works
incusos-proxmox already supports --proxmox FILE to point at any
connection config. Targets are just an organizational convention --
no script changes required.
Directory layout
targets/
├── beelink/
│ ├── proxmox.yaml.example # Connection template (LAN, vmbr0, local-lvm)
│ └── lab-cluster.yaml # 3-node cluster sized for beelink (4C/4G/50G)
└── hetzner/
├── proxmox.yaml.example # Connection template (WireGuard, vmbr1, local-zfs)
├── lab-cluster.yaml # 3-node cluster sized for hetzner (8C/16G/100G)
└── lab-production.yaml # OC + 3-node cluster for hetzner
Usage
1. Copy the example and fill in credentials
cp incusos/targets/hetzner/proxmox.yaml.example incusos/targets/hetzner/proxmox.yaml
# Edit with your API token, host IP, etc.
2. Deploy with explicit --proxmox
incusos-proxmox --proxmox incusos/targets/hetzner/proxmox.yaml \
incusos/targets/hetzner/lab-cluster.yaml
3. Or symlink for convenience
# Point the auto-discovered proxmox.yaml at your active target
ln -sf targets/hetzner/proxmox.yaml incusos/proxmox.yaml
# Now deploy without --proxmox
incusos-proxmox incusos/targets/hetzner/lab-cluster.yaml
Environment variables
incusos-proxmox reads PROXMOX_TOKEN_SECRET from the environment (or
the env file at the repo root). When working with multiple targets,
use different variable names per host:
# In env file
PROXMOX_TOKEN_SECRET=beelink-token-here
HETZNER_PROXMOX_TOKEN_SECRET=hetzner-token-here
Before deploying to a specific target, export the right secret:
# Deploy to Hetzner
export PROXMOX_TOKEN_SECRET="$HETZNER_PROXMOX_TOKEN_SECRET"
incusos-proxmox --proxmox incusos/targets/hetzner/proxmox.yaml \
incusos/targets/hetzner/lab-cluster.yaml
Key differences between targets
| Setting | Beelink | Hetzner |
|---|---|---|
| Host | 192.168.1.10 (LAN) | 10.10.0.1 (WireGuard) |
| Method | ssh | api |
| Bridge | vmbr0 | vmbr1 (private) |
| Storage | local-lvm | local-zfs |
| VLAN | 69 | (none) |
| Gateway | 192.168.100.1 | 10.10.0.1 |
| VM IPs | 192.168.102.x/22 | 10.10.0.x/24 |
| VM cores | 4 | 8 |
| VM memory | 4-8 GiB | 16 GiB |
| VM disk | 50 GiB | 100 GiB |