ich habe vor kurzem den Auftrag bekommen, die Hardware Informationen aus dem OPSI (hwaudit) in die CMDB von OTRS zu integrieren und so jedem Computer CI die Hardwareinfos bereitzustellen ohne die Daten mühsam von Hand einzutragen.
Da ich für diese Anforderung kein Geld ausgeben wollte/konnte, habe ich eine eigene Methode entwickelt, die ich hier nun als kleine Anleitung bereitstellen möchte.
1. Vorbereitung OPSI
Der OPSI Server muss als Backend mysql eingerichtet haben, nützlich ist auch phpMyAdmin auf dem Server zu installieren (geht einfach besser als auf der Shell)
Nachdem man sämtliche Daten der Rechner (hwaudit/swaudit) erfasst hat kann man diese quasi auch schon exportieren.
2. Der SQL Query
Als nächstes kommt hier der (zugegebener maßen sehr lange Query) wichtig sind hier die Bezeichner, diese habe ich genau so angepasst, wie sie beim Import in OTRS auch heißen, es werden hier alle Nötigen Felder abgefragt.
- Name,
Depl. State,
Incident State,
Hersteller,
Model,
Typ,
Serien Nr.
OS,
CPU,
Ram (Slot 1-4),
Festplatte,
Festplatten Kapazität,
FQDN,
NIC,
IPoverDHCP,
IP/MAC Adresse,
Grafikkarte,
Code: Select all
SELECT SUBSTRING_INDEX(h.HostId, '.',1) as `Name`,
'Production' as `Deployment State`,
'Operational' as `Incident State`,
(SELECT t2.vendor FROM HARDWARE_CONFIG_COMPUTER_SYSTEM t LEFT JOIN HARDWARE_DEVICE_COMPUTER_SYSTEM t2 ON t.hardware_id = t2.hardware_id WHERE t.HostId = h.HostId AND t.state != 0 ORDER BY state DESC,t.hardware_id LIMIT 0,1) as `Vendor`,
(SELECT t2.model FROM HARDWARE_CONFIG_COMPUTER_SYSTEM t LEFT JOIN HARDWARE_DEVICE_COMPUTER_SYSTEM t2 ON t.hardware_id = t2.hardware_id WHERE t.HostId = h.HostId AND t.state != 0 ORDER BY state DESC,t.hardware_id LIMIT 0,1) as `Model`,
'Desktop' as `Type`,
h.description as `Owner`,
(SELECT t.serialNumber FROM HARDWARE_CONFIG_BIOS t WHERE t.HostId = h.HostId AND t.state != 0 ORDER BY state DESC,t.hardware_id LIMIT 0,1) as `SerialNumber`,
'Windows 7 Professional (Service Pack 1)' as `OperatingSystem`,
(SELECT t2.name FROM HARDWARE_CONFIG_PROCESSOR t LEFT JOIN HARDWARE_DEVICE_PROCESSOR t2 ON t.hardware_id = t2.hardware_id WHERE t.HostId = h.HostId AND t.state != 0 ORDER BY state DESC,t.hardware_id LIMIT 0,1) as `CPU::1`,
(SELECT CONCAT(CONCAT(t.tag,' '),round(t2.capacity / 1024 / 1024)) FROM HARDWARE_CONFIG_MEMORY_MODULE t LEFT JOIN HARDWARE_DEVICE_MEMORY_MODULE t2 ON t.hardware_id = t2.hardware_id WHERE t.HostId = h.HostId ORDER BY state DESC,t.hardware_id LIMIT 0,1) as `Ram::1`,
(SELECT CONCAT(CONCAT(t.tag,' '),round(t2.capacity / 1024 / 1024)) FROM HARDWARE_CONFIG_MEMORY_MODULE t LEFT JOIN HARDWARE_DEVICE_MEMORY_MODULE t2 ON t.hardware_id = t2.hardware_id WHERE t.HostId = h.HostId ORDER BY state DESC,t.hardware_id LIMIT 1,1) as `Ram::2`,
(SELECT CONCAT(CONCAT(t.tag,' '),round(t2.capacity / 1024 / 1024)) FROM HARDWARE_CONFIG_MEMORY_MODULE t LEFT JOIN HARDWARE_DEVICE_MEMORY_MODULE t2 ON t.hardware_id = t2.hardware_id WHERE t.HostId = h.HostId ORDER BY state DESC,t.hardware_id LIMIT 2,1) as `Ram::3`,
(SELECT CONCAT(CONCAT(t.tag,' '),round(t2.capacity / 1024 / 1024)) FROM HARDWARE_CONFIG_MEMORY_MODULE t LEFT JOIN HARDWARE_DEVICE_MEMORY_MODULE t2 ON t.hardware_id = t2.hardware_id WHERE t.HostId = h.HostId ORDER BY state DESC,t.hardware_id LIMIT 3,1) as `Ram::4`,
(SELECT t2.name FROM HARDWARE_CONFIG_HARDDISK_DRIVE t LEFT JOIN HARDWARE_DEVICE_HARDDISK_DRIVE t2 ON t.hardware_id = t2.hardware_id WHERE t.HostId = h.HostId AND t.state != 0 ORDER BY state DESC,t.hardware_id LIMIT 0,1) as `HardDisk::1`,
(SELECT t.size / 1000000000 FROM HARDWARE_CONFIG_HARDDISK_DRIVE t LEFT JOIN HARDWARE_DEVICE_HARDDISK_DRIVE t2 ON t.hardware_id = t2.hardware_id WHERE t.HostId = h.HostId AND t.state != 0 ORDER BY state DESC,t.hardware_id LIMIT 0,1) as `HardDisk::1::Capacity`,
h.hostId as `FQDN`,
(SELECT CONCAT(CONCAT(t2.name,' '),t.macAddress) FROM HARDWARE_CONFIG_NETWORK_CONTROLLER t LEFT JOIN HARDWARE_DEVICE_NETWORK_CONTROLLER t2 ON t.hardware_id = t2.hardware_id WHERE t.HostId = h.HostId AND t.state != 0 AND t2.adapterType LIKE '%Ethernet%' ORDER BY state DESC,t.hardware_id LIMIT 0,1) as `NIC::1`,
'Yes' as `NIC::1::IPoverDHCP`,
(SELECT t.ipAddress FROM HARDWARE_CONFIG_NETWORK_CONTROLLER t LEFT JOIN HARDWARE_DEVICE_NETWORK_CONTROLLER t2 ON t.hardware_id = t2.hardware_id WHERE t.HostId = h.HostId AND t.state != 0 AND t2.adapterType LIKE '%Ethernet%' ORDER BY state DESC,t.hardware_id LIMIT 0,1) as `NIC::1::IPAddress::1`,
(SELECT t2.name FROM HARDWARE_CONFIG_VIDEO_CONTROLLER t LEFT JOIN HARDWARE_DEVICE_VIDEO_CONTROLLER t2 ON t.hardware_id = t2.hardware_id WHERE t.HostId = h.HostId AND t.state != 0 ORDER BY state DESC,t.hardware_id LIMIT 0,1) as `GraphicAdapter`
FROM HOST h
- 1. Spalten getrennt mit Komma
2. Ersetze NULL durch " " (zwei Hochkomma)
3. den Haken bei Spaltennamen in die erste Zeile setzen
Um nun die erstellte .CSV korrekt importieren zu können, muss zunächst auf dem OTRS in der Import/Export Verwaltung ein passendes Template erstellt werden.
- 1. Leere Felder belassen den aktuellen Wert den Haken setzen
2. Spaltentrenner sollte Komma sein (siehe .CSV export)
3. Mit Spaltenüberschriften muss auf "Ja" stehen
4. Nun kommt der wichtigste Schritt: die Mapping-Informationen, diese müssen exakt den Namen und der Reihenfogle des .CSV exportes entsprechen. (siehe Screenshot) 4. Import
Nachdem dies alles eingerichtet ist, können die Daten Importiert werden, dieser Vorgang dauert ein paar sekunden und wenn alles geklappt hat, erstellt er die CIs mit den entsprechenden Daten.