162 lines
7.0 KiB
Markdown
162 lines
7.0 KiB
Markdown
# NetBox-Export
|
|
|
|
NetBox-Export ist ein Plugin für NetBox 4.6.x. Es exportiert einen abgegrenzten
|
|
Mandanten- oder Standortbereich als portables ZIP-Archiv und importiert ihn in
|
|
eine zweite NetBox-Instanz.
|
|
|
|
Unterstützte Startpunkte:
|
|
|
|
- Mandantengruppe einschließlich Untergruppen und Mandanten
|
|
- einzelner Mandant
|
|
- Region einschließlich Unterregionen und Standorten
|
|
- einzelner Standort
|
|
- Lokation einschließlich Unterlokationen
|
|
|
|
Der Export folgt den Besitzbeziehungen zu DCIM-, IPAM-, Circuit-,
|
|
Virtualisierungs-, VPN-, Wireless-, Kontakt-, Tag- und Bilddaten. Benötigte
|
|
Stammdaten werden als Abhängigkeiten mitgenommen. Primärschlüssel der
|
|
Quellinstanz werden nie direkt als Zielschlüssel verwendet.
|
|
|
|
## Installation
|
|
|
|
Das Plugin muss auf beiden NetBox-Instanzen installiert sein.
|
|
|
|
```bash
|
|
cd /opt/netbox
|
|
source venv/bin/activate
|
|
pip install --upgrade --force-reinstall \
|
|
"git+https://git.mrblake.cc/MrBlake/NetBox-Export.git@main"
|
|
|
|
# Prüfen, ob das Modul im NetBox-venv verfügbar ist
|
|
python -c "import netbox_export; print(netbox_export.__file__)"
|
|
```
|
|
|
|
In `configuration.py` ergänzen:
|
|
|
|
```python
|
|
PLUGINS = [
|
|
"netbox_export",
|
|
]
|
|
|
|
PLUGINS_CONFIG = {
|
|
"netbox_export": {
|
|
"max_objects": 50000,
|
|
"max_archive_size_mb": 250,
|
|
"query_batch_size": 500,
|
|
# Auf beiden Instanzen identisch setzen, um Archive zu signieren.
|
|
"archive_signing_key": "eine-lange-zufaellige-geheime-zeichenfolge",
|
|
},
|
|
}
|
|
```
|
|
|
|
Anschließend:
|
|
|
|
```bash
|
|
cd /opt/netbox/netbox
|
|
python manage.py migrate netbox_export
|
|
python manage.py collectstatic --no-input
|
|
sudo systemctl restart netbox netbox-rq
|
|
```
|
|
|
|
Falls `ModuleNotFoundError: No module named 'netbox_export'` erscheint, wurde
|
|
das Paket nicht in `/opt/netbox/venv` installiert. In diesem Fall den obigen
|
|
Installationsblock erneut ausführen und darauf achten, dass
|
|
`/opt/netbox/venv/bin/python` verwendet wird:
|
|
|
|
```bash
|
|
/opt/netbox/venv/bin/python -m pip install --upgrade --force-reinstall \
|
|
"git+https://git.mrblake.cc/MrBlake/NetBox-Export.git@main"
|
|
/opt/netbox/venv/bin/python -c \
|
|
"import netbox_export; print(netbox_export.__file__)"
|
|
```
|
|
|
|
Bei einer Docker-Installation wird das Paket in das eigene NetBox-Image
|
|
aufgenommen; danach wird der Container mit dem aktivierten Plugin neu gebaut und
|
|
die Migration ausgeführt.
|
|
|
|
## Verwendung
|
|
|
|
Die Oberfläche liegt unter **Plugins > NetBox-Export > Export / Import** und ist
|
|
aus Sicherheitsgründen nur für Superuser sichtbar.
|
|
|
|
1. Auf Instanz A den Typ und das konkrete Objekt wählen und das ZIP exportieren.
|
|
2. Auf Instanz B das ZIP zunächst mit **Nur prüfen** verarbeiten.
|
|
3. Nach erfolgreichem Prüflauf **Nur prüfen** deaktivieren, den schreibenden
|
|
Import bestätigen und das Archiv erneut hochladen.
|
|
|
|
Der Import läuft atomar. Bei einem Fehler werden alle Datenbankänderungen
|
|
zurückgerollt. Die Konfliktstrategie **Aktualisieren** nutzt zuerst die dauerhaft
|
|
gespeicherte Zuordnung aus Quellinstanz, Modell und Quell-ID; bei einem ersten
|
|
Import werden vorhandene Objekte über ihre eindeutigen Fachschlüssel erkannt.
|
|
|
|
## Verhalten und Grenzen
|
|
|
|
- Quelle und Ziel müssen NetBox 4.6.x und dieselben Plugins/Modelle verwenden.
|
|
- Benutzerkonten und Berechtigungen werden nicht exportiert. Fehlende oder
|
|
nicht eindeutige Referenzen auf Benutzer und Gruppen werden ausgelassen und
|
|
nach dem Import als Warnung angezeigt. Benötigt ein neuer Datensatz zwingend
|
|
eine solche Referenz, wird nur dieser Datensatz übersprungen.
|
|
- Der Import erstellt und aktualisiert Objekte. Zielobjekte, die im Archiv nicht
|
|
vorkommen, werden bewusst nicht gelöscht.
|
|
- Fehlende Bilddateien werden im Archiv vermerkt, können aber nicht rekonstruiert
|
|
werden.
|
|
- Große Exporte werden synchron verarbeitet. `max_objects` begrenzt Laufzeit und
|
|
Speicherverbrauch.
|
|
- `query_batch_size` steuert die Größe gebündelter Datenbankabfragen. Der
|
|
Standardwert `500` ist für typische PostgreSQL-Installationen geeignet;
|
|
Werte zwischen `250` und `1000` erlauben eine Anpassung an Arbeitsspeicher und
|
|
Datenbankleistung.
|
|
|
|
## Plugin-Kompatibilität
|
|
|
|
Der Exportgraph berücksichtigt installierte, mandantenbezogene Modelle und
|
|
Dateien aus NetBox-SLM, Netbox-DokiWiki und NetBox-VM-Import. Private oder
|
|
temporäre Plugin-Modelle werden nicht exportiert. Die von Netbox-Utilities
|
|
erzwungene Mandantenpflicht wird beim Import berücksichtigt: Das Zielobjekt wird
|
|
erst gespeichert, nachdem sein Mandant importiert und zugeordnet wurde. Ist kein
|
|
Mandant auflösbar, wird automatisch ein vorhandener Mandant `Auto-Import`
|
|
verwendet oder neu angelegt. Der Importbericht weist darauf hin.
|
|
Beziehungen, die Teil einer Plugin-Datenbankprüfung sind, werden vollständig
|
|
aufgelöst, bevor das Objekt erstmals gespeichert wird. Dies betrifft unter
|
|
anderem die Plattformzuordnung von NetBox-SLM-Softwareinstallationen.
|
|
Eindeutige optionale Beziehungen wie die primären IP-Adressen von Geräten und
|
|
virtuellen Maschinen werden in einer zweiten Phase zugewiesen. Eine veraltete
|
|
Zielzuordnung wird dabei atomar gelöst und als Warnung protokolliert.
|
|
Gespeicherte Importzuordnungen werden bei Wiederholungsimporten gegen den
|
|
aktuellen Fachschlüssel geprüft. Existiert das Objekt bereits unter diesem
|
|
Schlüssel, wird die Zuordnung korrigiert, statt ein Duplikat anzulegen.
|
|
Bei neuen NetBox-Modulen wird die automatische Komponentenreplikation
|
|
deaktiviert. Ports, Interfaces und Bays werden stattdessen ausschließlich aus
|
|
den Archivdatensätzen angelegt beziehungsweise vorhandenen Komponenten
|
|
zugeordnet.
|
|
Geräte werden in einer separaten Abschlussphase im Rack platziert, damit auch
|
|
Positionswechsel ohne temporäre Doppelbelegung funktionieren. Bei fremden
|
|
Belegungen löst **Aktualisieren** das Zielgerät mit Warnung von seiner Position,
|
|
**Überspringen** lässt das importierte Gerät positionslos und **Import abbrechen**
|
|
meldet den Rackplatzkonflikt vor dem Datenbankfehler. Mehr-U- und
|
|
Full-Depth-Belegungen werden dabei berücksichtigt.
|
|
Front-/Rear-Port-Zuordnungen von Patchpanels werden als eigene Datensätze
|
|
exportiert und bei **Aktualisieren** auf den Stand der Quelle gebracht. Nach dem
|
|
Import stößt das Plugin für alle enthaltenen Kabel die NetBox-eigene
|
|
Neuberechnung der Kabelpfade an. Für diese Korrektur muss mit Plugin-Version
|
|
`0.3.12` oder neuer ein neues Archiv auf der Quellinstanz erzeugt werden, da
|
|
ältere Archive keine Portzuordnungen enthalten.
|
|
Bei Bildanhängen werden Breite und Höhe direkt aus der Bilddatei im Archiv
|
|
ermittelt. Dadurch sind die Pflichtfelder von NetBox auch im Prüflauf und bei
|
|
Dateispeichern ohne unmittelbaren Modell-Save gesetzt. Bilder oberhalb des in
|
|
NetBox 4.6.x verwendeten Limits von 25 Millionen Pixeln werden proportional auf
|
|
höchstens 20 Millionen Pixel verkleinert und im Importbericht als Warnung
|
|
ausgewiesen. Zum Schutz des Importprozesses bleibt eine harte Quellgrenze von
|
|
100 Millionen Pixeln bestehen.
|
|
|
|
Auf Quelle und Ziel müssen jeweils dieselben Plugin-Versionen und Migrationen
|
|
installiert sein. Verschlüsselte Zugangsdaten von NetBox-VM-Import sind nur bei
|
|
identischem Django-`SECRET_KEY` direkt nutzbar; andernfalls muss das Kennwort am
|
|
Ziel neu gesetzt werden.
|
|
|
|
## Tests
|
|
|
|
```bash
|
|
python -m pytest
|
|
```
|