- Python 71.2%
- HTML 27.2%
- CSS 1.6%
| audit | ||
| cmdb | ||
| integrations | ||
| loom | ||
| skills | ||
| static | ||
| templates | ||
| .gitignore | ||
| AGENTS.md | ||
| CLAUDE.md | ||
| GEMINI.md | ||
| manage.py | ||
| README.md | ||
| requirements.txt | ||
Loom
Loom ist die verbindliche CMDB des MSP-Konzepts
(Kapitel 7.3.4). Loom liest Hosts und deren Node Types aus Netbox, die
cmdb/-Ordner (Manifest und Vorlagen) der ansible_role_*-Repositories aus
Forgejo und die Zugangsdaten aus OpenBAO. Daraus erzeugt Loom die
host-spezifischen Konfigurationsdateien, die Ansible-Pull beim Lauf abruft.
Abweichend vom Konzept (C#/.NET 10) ist Loom in Python/Django umgesetzt, die Oberfläche nutzt Bulma.
Funktionen
- Dashboard – Anzahl Hosts, Node Types, Node-Zuordnungen und ausstehende Vorlagen-Updates; Hinweise auf Hosts ohne oder mit unbekannten Node Types; letzte Aktivitäten; Synchronisation per Knopfdruck
- Hosts – Inventar aus Netbox mit den Konfigurationsdateien je Host; Detailansicht mit Konfiguration, Changelog und Netbox-Attributen; Konfiguration bearbeiten
- Vorlagen-Änderungen – ändert sich eine Vorlage im Repository, zeigt Loom den Diff, führt manuelle Host-Anpassungen per Drei-Wege-Merge zusammen und lässt den Vorschlag vor dem Übernehmen bearbeiten (oder verwerfen)
- Node Types – aus den Repositories gelesen, mit letztem Commit und Benutzer; Detailansicht mit Git-Verlauf und Commit-Diffs
- Audit Log – unveränderliches Protokoll jeder Aktion (inkl. Anmeldungen),
zusätzlich über den Logger
loom.auditan das zentrale Logging - API für Ansible-Pull –
GET /api/v1/hosts/<name>/configmitAuthorization: Bearer <pull_token>
Schnellstart (Demo)
python3 -m venv --without-pip .venv
python3 -m pip --python .venv/bin/python install -r requirements.txt
.venv/bin/python manage.py loom_demo_setup --no-input
.venv/bin/python manage.py runserver
Anmeldung unter http://127.0.0.1:8000 mit demo / loom-demo.
Die Demo simuliert Netbox, Forgejo und OpenBAO aus
integrations/demo_data/. Das Setup erzeugt die Konfigurationen zunächst aus
älteren Vorlagen-Ständen, wendet zwei manuelle Anpassungen an und
synchronisiert dann auf den aktuellen Stand – so gibt es sofort offene
Vorlagen-Änderungen, darunter eine sauber zusammenführbare und eine mit
Konflikt.
Umschalten auf die Produktivumgebung
Der Schalter ist die Umgebungsvariable LOOM_MODE (demo oder live);
einzelne Dienste lassen sich mit LOOM_NETBOX_MODE, LOOM_FORGEJO_MODE und
LOOM_SECRETS_MODE getrennt umschalten. Die Navigation zeigt den aktiven
Modus (DEMO / LIVE / GEMISCHT). Demo- und Live-Modus nutzen getrennte
SQLite-Dateien, damit sich die Daten nie vermischen.
| Variable | Bedeutung |
|---|---|
LOOM_MODE |
demo (Standard) oder live |
LOOM_SECRET_KEY |
Django-Secret-Key (Pflicht, sobald LOOM_DEBUG aus ist) |
LOOM_DEBUG |
Standard: an im Demo-, aus im Live-Modus |
LOOM_ALLOWED_HOSTS, LOOM_CSRF_TRUSTED_ORIGINS |
kommagetrennt |
LOOM_NETBOX_URL |
z. B. https://netbox.intra.heyer.systems |
LOOM_NETBOX_NODE_TYPES_FIELD |
Custom Field der Node Types, Standard node_types |
LOOM_FORGEJO_URL, LOOM_FORGEJO_ORG |
Forgejo-Instanz und Organisation der Rollen-Repos |
LOOM_OPENBAO_ADDR, LOOM_OPENBAO_ROLE_ID, LOOM_OPENBAO_SECRET_ID |
AppRole-Anmeldung |
LOOM_OPENBAO_MOUNT, LOOM_OPENBAO_CACERT |
KV-v2-Mount (Standard secret), CA-Datei |
LOOM_DB_NAME, LOOM_DB_USER, LOOM_DB_PASSWORD, LOOM_DB_HOST, LOOM_DB_PORT |
PostgreSQL statt SQLite |
In OpenBAO erwartet Loom: secret/loom/netbox (token),
secret/loom/forgejo (token) und secret/loom/api (pull_token).
Die periodische Synchronisation übernimmt ein systemd-Timer mit
manage.py loom_sync.
Manifest-Format (cmdb/manifest.yml)
node_type: bookstack # optional, muss zum Repository-Namen passen
files:
- template: bookstack.env.j2 # Datei unter cmdb/templates/
dest: /var/www/bookstack/.env
owner: www-data
group: www-data
mode: "0640"
In Vorlagen stehen die Netbox-Attribute als host.* bereit (name, site,
tenant, role, platform, environment, stage, primary_ip,
primary_ip4, dns_name, node_types, custom_fields, …).
Entwicklung
Hinweise für Entwickler und KI-Agenten stehen in AGENTS.md, wiederverwendbare Arbeitsabläufe unter skills/.