Nachdem wir uns in Teil 1 & Teil 2 um die Grundlagen gekümmert haben wie wir Daten (Resource ID’s und CreationTime) auslesen, nun wie wir Daten via REST API zurück schreiben.
Nochmal der Hinweis: API Aufrufe die eine Veränderung durchführen, in einer Test Umgebung und nicht gegen ein Produktiv System zuerst validieren. Oder wie heisst es so schön “Jeder ist seines Glückes Schmied”.
Aber bevor wir jetzt zu literarisch werden hier das was wir machen wollen:
Das CreationDate formatieren nach Datum:Uhrzeit und als Attribut zurückschreiben. Schauen wir uns noch kurz an was benötigt wird um eine Attribut anzulegen / zurück zu schreiben. In der REST API Dokumentation https://VROPS/suite-ap/docs/rest/index.html finden wir die geeignete Funktionalität unter addProperties.
Wie zu sehen handelt es sich um einen POST Aufruf. Die entsprechenden Daten für den Aufruf finden wir wenn wir den unter Sample Request auf Show klicken.
Damit haben wir jetzt alles zusammen. Das Script aus Teil 2 ergänzen wir dazu wie folgt:
Einerseits benötigen wir noch das CreationDate, was wir in dem awk Skriptteil mit extrahieren. Gleichzeitig noch mit der Funktion strftime neu formatieren, in die Form “Jahr-Monat-Tag:Std:Min:Sec” und wie gehabt erstmal in einer Datei sichern.
Danach lesen wir die Datei wieder ein, bereiten den XML String für den POST wie in dem Beispiel in der Dokumentation beschrieben auf und schreiben diesen als “Content-Type: application/XML” mittels curl zurück. Für das Zurückschreiben nutzen wir jetzt das beim letzten Mal schon erwähnte Token für die Authentifizierung. Bei häufigen Aufrufen reduziert sich somit der komplette Overhead und die Laufzeit ist häufig in Minuten statt Stunden erledigt.
Um das Tippen zu reduzieren hier mein Script als Vorlage. Falls es zu Fehlermeldungen bei der Ausführung kommt, auf jeden Fall die Zwischendatei “/tmp/file.ident” kontrollieren. Hier sollte mind eine ResourceID und Datum stehen. Falls nicht, ist evtl. die Aufbereitung in dem awk Teil anzupassen.
Wenn keine Fehler, dann lässt sich das Ergebnis schonmal via API nachverfolgen. Dazu getResourceProperties verwenden.
Viel Spaß beim ersten Testen.
Das nächste Mal schauen wir uns an wie wir das Propertie in einem View darstellen und in einem Dashboard & Report verwenden.
#!/usr/bin/env bash # # Script to retrieve vm resourceid & creation time # create an attribute which can be used for report/dashboard # Author: fbess # # Fetch resource identifiers incl. creation time for all resources matching SRCH critera # Push attribute(s) with reformated creation time back to all identifiers # test in a demo environment first # # e.g. setattr.sh # ## Change here for your environment VROPS=192.168.110.70 ID=’admin’ PWD=’VMware1!’ ID_PWD=”$ID:$PWD” CURL=/usr/bin/curl ECHO=/bin/echo TMP=/tmp # Objects you want to apply the attribute against (resourceKind=VirtualMachine does take ALL virtual machines) # No modifications beyond required FILE=file CTJSON=’Content-Type: application/json’ URL=”https://${VROPS}/suite-api/api” # Retrieve Token for quick access CTAUTH=”Authorization: vRealizeOpsToken ${AUTHT}” # Retrieve resources and extract the resource identifier incl. creation time |