doITbetter Blog - Das i-doit-Blog

CSV-Import mit i-doit automatisieren

Geschrieben von Pattrick Bluhm | 26. November 2020

Häufig existieren im Unternehmen viele Daten, die Sie in die CMDB übernehmen sollten. Dies können vorhandene Excel-Tabellen sein, die kontinuierlich gepflegt wurden. Verschiedene Applikationen und Dienste verfügen ebenfalls über wichtige Informationen. Denken Sie dabei z. B. an Wiki-Systeme (Knowledgebase) oder Inventarisierungstools. Auch diese bieten meist eine Funktion für den Export der Daten. Liegen diese Daten als CSV-Dateien vor, lässt sich der Import in i-doit ganz schnell automatisieren.

Sollte es keine API oder andere Exportmöglichkeiten geben, müssen Sie direkt auf die Datenbasis zugreifen. Häufig werden die Daten in einer Datenbank wie z. B. Postgresql, MySQL, MariaDb oder MongoDB gespeichert. Aus den Datenbanken können Sie Informationen einfach als SQL-Query gemäß Ihren Anforderungen zusammenstellen und regelmäßig (z.B. als Cronjob) extrahieren.

 

 

 

Was müssen Sie im Vorfeld beachten? Sie müssen geeignete Datenquellen identifizieren.

Was aus dem einen System automatisch extrahiert werden kann, können wir auch über das i-doit CLI (Command Line Interface) regelmäßig und automatisiert importieren. Dadurch erreichen wir eine automatisierte Aktualisierung der Daten und senken gleichzeitig den Dokumentationsaufwand der Mitarbeiter.

 

 

 

Den automatisierten Datenimport realisieren

 

Im ersten Schritt müssen Sie Ihre Datenquellen identifizieren. Welche Daten wollen Sie importieren und wo sind diese aktuell gespeichert? Werden diese regelmäßig durch einen Mitarbeiter oder eine andere Abteilung aktualisiert? Sollen diese Daten regelmäßig aus einer Datenbank oder Applikation exportiert werden?

Prüfen Sie die Möglichkeiten und erstellen Sie ggf. einen Testdurchlauf Ihres Querys. Es kann vorkommen das Sie Informationen nicht in der gewünschten Form extrahieren können. Dies könnte z.B. dann der Fall sein, wenn Sie nur den Hostname aber nicht den FQDN extrahieren können. In diesem Fall empfehlen wir den Export einfach noch über ein Script für die geeignete Form anzupassen.

Ein Beispiel hierzu:

 

Wir exportieren aus einem Inventarisierungstool Hostname, Hersteller, Modell und Seriennummer unserer Clients. Wir möchten allerdings nicht nur den Hostnamen, sondern den vollständigen FQDN später importieren.

Für diesen Fall erstellen wir ein kleines Powershell-Script das die vorhandene CSV-Datei einliest und erweitert. Dieses Script nehmen wir entweder lokal oder auf unserem Windows Server in die Aufgabenplanung (Task Scheduler) für die automatische Ausführung auf.

 

$Data = Import-Csv -Path "C:\data\Clients.csv" -Delimiter ';' | ForEach-Object { $_.Hostname = $_.Hostname + '.i-doit.com'; $_ } | ConvertTo-Csv -NoTypeInformation -Delimiter ';' Out-File "C:\data\Clients-erweitert.csv" -InputObject $Data

 

 

Nachdem unsere CSV-Datei nun im gewünschten Format vorliegt, starten wir einen Testlauf und erstellen dabei auch gleich unser notwendiges CSV-Profil für den Import. Dazu laden wir die erweiterte CSV-Datei unter Extras -> Import -> CSV-Import hoch und konfigurieren das Mapping.

Wichtig: Unbedingt das konfigurierte Mapping als Profil für den Import speichern.

Nachdem der Importvorgang gestartet wurde, werden die Objekte erstellt bzw. diese aktualisiert. Danach wechseln wir auf die Konsole. Um nun den automatischen CSV-Import zu konfigurieren, müssen wir im ersten Schritt die ID unseres CSV-Profiles kennen.

Dazu geben wir folgendes Kommando in die Konsole ein:

sudo -u www-data php /var/www/html/console.php csv-profiles --user admin --password admin --tenantId 1

 

 

In diesem Beispiel hat unser Profil die ID 9. Je nachdem wie viele verschiedene CSV-Dateien importiert werden sollen, kann es ggf. hilfreich sein, diese in verschiedenen Dateien zu organisieren. Dazu erstellen wir z.B. einen neuen Cron mit sudo nano csv-clients und legen einen neuen Cronjob an. Hier müssen wir nun unbedingt das korrekte Importprofil angeben und den Pfad zu unserer CSV-Datei.

 

* * * * * www-data /usr/bin/php /var/www/html/console.php import-csv --user admin --password admin --tenantId 1 --importFile /var/www/html/imports/1/clients-erweitert.csv --importProfileId 9 --csvSeparator ";" --multiValueMode column

 

Zum Abschluss müssen wir nun nur noch die notwendigen Dateien regelmäßig zum oben angelegten Pfad per cURL kopieren. Der automatische Import von CSV-Daten ist somit eine schnelle und kostengünstige Alternative, da keine zusätzliche Schnittstelle benötigt wird.