Commit Graph

8 Commits

Author SHA1 Message Date
josh 76b9f64141 Remove keys volume mount and add install script
build-and-push / test (push) Successful in 36s
build-and-push / build-and-push (push) Successful in 1m8s
- Remove /etc/provisioning/keys mount (ephemeral keys are in-memory now)
- Remove /etc/provisioning VOLUME from Dockerfile
- Add deploy/install.sh that creates config files before docker compose up,
  preventing Docker from creating directories in place of missing bind mounts
- Update README with install script usage

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-09 20:48:35 -04:00
josh 4dcd1f943b Disable Go module cache in CI to avoid 4m+ timeout
build-and-push / test (push) Successful in 41s
build-and-push / build-and-push (push) Successful in 1m22s
Gitea's cache server is unreachable, causing setup-go to block on a
failed cache restore. Disable it since the Docker build layer caches
dependencies independently.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-03 21:44:12 -04:00
josh a12755522f Fix .gitignore excluding cmd/provisioning directory
build-and-push / build-and-push (push) Has been cancelled
build-and-push / test (push) Has been cancelled
The pattern `provisioning` matched both the binary and the directory.
Use `/provisioning` to only match at the repo root.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-03 21:39:20 -04:00
josh ca6e8661fc Update README with full API reference and ephemeral key docs
build-and-push / build-and-push (push) Has been cancelled
build-and-push / test (push) Has been cancelled
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-03 21:17:37 -04:00
josh b23ef64ee1 Use ephemeral SSH keys per rebuild instead of static config keys
build-and-push / test (push) Successful in 9m57s
build-and-push / build-and-push (push) Has been cancelled
Generate a fresh ed25519 key pair at rebuild time, inject the public key
into the Proxmox answer file, use the private key for cluster join over
SSH, then remove the key from both the remote host and the database.
This eliminates the need to manage static SSH keys in config/secrets.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-03 21:09:22 -04:00
josh aec31b9f8b Add README with deploy instructions
build-and-push / test (push) Successful in 9m57s
build-and-push / build-and-push (push) Has been cancelled
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-03 20:59:20 -04:00
josh c06ce6e8bb Add CI/CD pipeline and docker-compose for deployment
build-and-push / test (push) Successful in 10m25s
build-and-push / build-and-push (push) Failing after 33s
- Gitea Actions workflow: test → build → push to container registry
- docker-compose.yml for host deployment (host network for PXE)
- Update example config to use container paths (/data, /etc/provisioning)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-03 20:58:15 -04:00
josh bda568b25c Initial implementation: host lifecycle + PXE + admin dashboard
Go service for Proxmox homelab cluster provisioning. Handles PXE boot,
Proxmox autoinstall (answer file generation), cluster join via SSH,
and Infrastructure API registration.

- Host state machine (registered → pxe_ready → installing → ready)
- dnsmasq supervisor with MAC-based allowlist
- iPXE script and Proxmox answer file generation
- First-boot phone-home → cluster join → infra registration
- Operation locking with expiry (409 on conflict)
- SSE event hub for real-time dashboard updates
- Admin dashboard (host grid, detail, registration form)
- Config-driven server types with hot-reload
- Docker deployment (multi-stage fat image)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-03 20:55:14 -04:00