IT-Infrastrukturen automatisieren mit einer CMDB als Datenbasis

Benjamin Heisig, synetics GmbH

CommitterConf, 17. Oktober 2016

Agenda

/me

  • Seit 5 Jahren bei synetics (erst als Entwickler, nun als Consultant)
  • Vollzeit-Geek aus Düsseldorf
  • Baut Web-Applikationen
  • Liebt FLOSS
  • Faible für Informationssicherheit
  • Hat das Studium (Wirtschaftsinformatik in Essen) damals nicht abgebrochen

Über IT-Dokumentation, CMDB, i-doit und synetics

Was ist IT-Dokumentation?

Pyramide

Alles ist ein Objekt.

Objekt = Configuration Item (CI) = Asset = Information Value

  • Informationen
  • Infrastruktur
  • Hardware
  • Software
  • Services
  • Netzwerke
  • … und Menschen

Objekte stehen in Beziehung zueinander.

  • Komponenten bilden Netzwerke
  • Software wird installiert
  • Services werden modelliert
  • Server stehen in Racks, Racks in Räumen
  • Menschen arbeiten mit Clients und Telefonen, …

Über i-doit

Logo von i-doit
Logo ;-)
  • Software für IT-Dokumentation und Configuration Management Database (CMDB)
  • Web-basiert
  • LAMP Stack
  • Offene Schnittstellen
    • Network Monitoring: Check_MK, Nagios, Icinga und Co.
    • Network Discovery/Inventory: JDisc, OCS Inventory NG, …
    • Service Desk: OTRS Help Desk, Request Tracker, iTop
    • Verzeichnisdienste: OpenLDAP, Active Directory
    • CSV-Datenimport
    • API (JSON-RPC)
    • Externe Scripte triggern (Events)

Und das geht noch weiter …

  • Reporting
  • Analysen
  • Benachrichtigungen
  • Visualisierungen
  • Authentifizierung/Authorisierung

Kleine Kunde

  • Gründung von synetics 1996 in Düsseldorf
  • i-doit 2004 aus Kundenprojekt entstanden
  • Seit 2007 Free Software (AGPLv3)
  • Monetarisierung durch Lizensierung, pro-Module und Dienstleistungen
  • Mehrere Partner, > 700 Kunden, tausende Downloads pro Jahr

Warum i-doit?

  • Vollständige, umfassende Dokumentation möglich
  • Schlank und pragmatisch
  • Breiten- und Tiefen-Dokumentation
  • Strukturiert dokumentieren, flexibel anzupassen, modular erweiterbar und interoperabel in ITSM-Landschaft
  • Arbeitserleichterung, kolaboratives Arbeiten, Wissen bündeln und zur Verfügung stellen
  • Kostengünstig in Einführung und Betrieb

API ausreizen

  • i-doit bringt eine vollumfängliche Programmierschnittstelle mit
  • Daten erstellen? Lesen? Aktualisieren? Löschen? Kein Problem.
  • Sehr gute Ergänzung oder gar Alternative zu bestehenden Features und Schnittstellen
  • Beruht auf JSON-RPC: jsonrpc.org
  • Zur Authentifizierung kann API Key verwendet werden
  • Optional: explizit User und Passwort mitgeben (gut für Logs)
  • Rechte werden nicht berücksichtigt
  • Gewünschte Sprache kann mitgegeben werden
  • Client-Anfrage: HTTP POST mit Content-Type application/json
  • Server-Antwort: JSON
  • Batch Requests sind möglich
Screenshot: API konfigurieren

Beispiel

Request vom Client


{
    "jsonrpc": "2.0",
    "method": "cmdb.object_types",
    "params": {
        "order_by": "title",
        "filter": {
            "enabled": "true"
        },
        "language": "en",
        "apikey": "c1ia5q"
    },
    "id": 1
}
                    

Request mit cURL


curl \
--data '{"jsonrpc":"2.0", \
"method":"cmdb.object_types", \
"params":{"order_by":"title","filter":{"enabled":"true"}, \
"language":"en","apikey":"c1ia5q"},"id":1}' \
--header "Content-Type: application/json" \
https://demo.i-doit.com/src/jsonrpc.php
                    

Response vom Server


{
    "jsonrpc": "2.0",
    "result": [
        {
            "id": "12",
            "title": "Air Condition System",
            "const": "C__OBJTYPE__AIR_CONDITION_SYSTEM",
            "status": "2",
            "type_group": "2",
            "type_group_title": "Infrastructure",
            // …
        },
        // …
    ],
    "id":1
}
                    

Methoden

Objekte

  • cmdb.object.{create,read,update,delete}
  • cmdb.objects.read

Objektbeziehungen

  • cmdb.objects_by_relation.read
  • cmdb.impact.read
  • cmdb.location_tree.read
  • cmdb.workstation_components.read

Objekttypen und -gruppen

  • cmdb.object_types.read
  • cmdb.object_type_groups.read
  • cmdb.object_type_categories.read

Kategorien und Dialog-Felder

  • cmdb.category.{create,read,update,delete}
  • cmdb.category_info.read
  • cmdb.dialog.read

Logbuch und Reports

  • cmdb.logbook.{create,read}
  • cmdb.reports.read

Authentifizierung, Suche & Co.

  • idoit.{login,logout}
  • idoit.search
  • idoit.version
  • idoit.constants

Ressourcen

API ab i-doit 1.8 als separates Modul

Referenz-Client und Library

Download


git clone git@bitbucket.org:dstuecken/i-doit-api-clients.git
cd i-doit-api-clients/php/
make initialize
                    

Einbinden


require 'i-doit-api-clients/php/apiclient.php';
                    

Events triggern

  • Wenn sich die IT-Dokumentation verändert, wird ein Script ausgeführt.
  • Pro Event können beliebig viele Scripts ausgeführt werden.
  • Script läuft lokal mit den Rechten des Apache Webservers.
  • Vom Script aus ist alles möglich (es muss nur programmiert werden).

Events

  • Objekt
    • Erstellen
    • Unwiderrufliches Löschen (Purge)
  • Kategorie-Eintrag
    • Erstellen (nur über die Web GUI)
    • Speichern
    • Archivieren/als gelöscht markieren/wiederherstellen/unwiderruflich löschen
  • Objekttyp
    • Erstellen/Speichern
    • Unwiderrufliches Löschen

Event konfigurieren

Screenshot: Event konfigurieren

Liste von Events

Screenshot: Events auflisten

Event Log

Screenshot: Event Log

Dem Script werden Angaben zu den Änderungen übergeben (JSON).


{
    "success": 0,
    "objectID": "2912",
    "categoryID": 1,
    "categoryConst": "C__CATG__GLOBAL",
    "categoryDataID": "2949",
    "multivalue": false,
    "changes": [],
    "postData": {
        "data_id": "2948",
        "properties": {
            "title": {
                "tag": "title",
                "value": "Headquarter Network",
                "title": "LC__UNIVERSAL__TITLE"
            },
            […]
        }
    },
    "data": {
        "2949":{
            "title": "Headquarter Network",
            "status": "Normal",
            "created": "2016-04-26 14:47:57",
            "created_by": "admin",
            "changed": "2016-04-26 14:47:57",
            "changed_by": "admin",
            "purpose": "Produktion",
            "category": "Demo",
            "sysid": "SYSID_1461674878",
            "cmdb_status": "In Betrieb",
            "type": "Supernet",
            "tag": null,
            "description": "",
            "_id": 2912,
            "_title": "[…]"
        }
    }
}
                    

Ressourcen

Beispiele

VM provisionieren

API und Events

Automatisierung mit Jenkins

API

Jenkins ⇒ erstellt VM in VMware ⇒ dokumentiert in i-doit und erstellt DHCP-/DNS-Konfiguration ⇒ installiert OS ⇒ …

  • Templates und Jobs in Jenkins
  • VM wird in i-doit dokumentiert
  • DHCP und DNS wird auf Basis der IT-Dokumentation konfiguriert
  • Details: Creating systems with pipelining (ePages devBlog)

Komplexe Excel-Listen

API

  • Listen lassen sich durch den CSV-Datenimport leicht importieren, Import sogar automatisierbar.
  • Was aber bei komplexen Listen mit viel Logik und nur für Menschen verständliche Prämissen?

Demo-/Test-Daten erstellen

API

Vorsicht bei vielen Requests innerhalb kurzer Zeit!

… und vieles mehr

  • Interaktion mit Dritt-Software (Network Monitoring, Service Desk, Reporting)
  • SDN, VM/Container orchestrieren, Continous Integration/Deployment/Development
  • Standortbaum aufbauen mit ca. 16.000 Knoten
  • UI auf der Kommandozeile
  • Und Ihr Projekt?

Wenn Check_MK meldet, dass mehrere Server ausgefallen sind, wird a) der Status in i-doit auf "Außer Betrieb" gesetzt und b) die API der Kaffeemaschine angesteuert, sofort eine Tasse schwarzen, heißen Kaffee zuzubereiten.

PS: Unsere Partner und wir bieten umfassende Trainings – u. a. zur API – an.

Frage- und Diskussionsrunde