4e1fae12d0a009d488f549103c4c347fd098ecc4
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
provisioning-server
Maschinen-zu-Maschine-API für Geräteaktivierung, Agent-Check-in/Report und
den Self-Service-ISO-Bau (anode) — von kundenplattform bewusst getrennter
Dienst, siehe ADR-0011.
Architektur
- FastAPI, reine Maschinen-Endpoints (kein Frontend) - Aktivierung, Agent-Bootstrap/Checkin/Report, Auftragskatalog, Self-Service-ISO-Bau.
- Eigene Postgres-Datenbank (
tuxflotte), getrennt von kundenplattforms Datenbank - Migrationen untermigrations/. - Läuft unter einem eigenen, unprivilegierten System-User
provisioning-server(nicht root - sieheprovisioning-server.serviceund ADR-0027). Seit 03.10.2026 braucht auch der Self-Service-ISO-Bau (run_iso_build()inapp.py) kein root mehr:build_customer_iso.shlegt die Kundendaten als eigene Squashfs-Schicht auf das Boot-Medium. Die frühere sudo-Regel (ADR-0027) ist entfallen, die Unit hat die volle Härtung.
Setup (lokal)
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
TUXFLOTTE_DATABASE_URL=postgresql://... .venv/bin/psql ... -f migrations/0001_*.sql # + alle weiteren migrations/ der Reihe nach
Wichtige Env-Variablen (/etc/tuxflotte/provisioning-server.env im Betrieb):
TUXFLOTTE_DATABASE_URLTUXFLOTTE_ADMIN_TOKENTUXFLOTTE_KUNDENPLATTFORM_TOKEN- muss mit dem gleichnamigen Wert in kundenplattforms Env übereinstimmenTUXFLOTTE_ANSIBLE_CONTENT_REPO- URL desansible-content-ReposTUXFLOTTE_INSTALLER_DIR(Default/root/tuxflotte-installer- im produktiven De-Root-Setup stattdessen explizit auf einen für denprovisioning-server-User lesbaren Pfad setzen, z.B./opt/tuxflotte-installer)TUXFLOTTE_BOOT_MEDIUM_PATH(früherTUXFLOTTE_MINT_ISO_PATH),TUXFLOTTE_ISO_BUILD_OUTPUT_DIR- relativ zum Arbeitsverzeichnis des Dienstes (data/upstream/...,data/iso-builds)
Start: .venv/bin/uvicorn app:app --port 8080
Deploy (anode)
git pull --ff-only
systemctl restart provisioning-server
Port 8080 (kundenplattform belegt 8081). Bei einer Neuinstallation
zusätzlich zum Code-Deploy nötig (einmalig, nicht Teil von git pull):
- System-User
provisioning-serveranlegen,/opt/provisioning-serverdiesem User gehörend. provisioning-server.servicenach/etc/systemd/system/kopieren,systemctl daemon-reload && systemctl enable --now provisioning-server.tuxflotte-installer-Repo an den Pfad ausTUXFLOTTE_INSTALLER_DIRklonen (für den Dienstbenutzer lesbar).- Arbeitsverzeichnis für den ISO-Bau
/srv/tuxflotte/build-tmpdem Dienstbenutzer übereignen (ohne dieses Verzeichnis/var/tmp).
Öffentliche Erreichbarkeit über Pangolin ist nicht Teil dieses Repos — das ist ein separater Ops/DNS/Reverse-Proxy-Schritt.
Languages
Python
79.8%
PLpgSQL
20.2%