So, nachdem wir gesehen haben wie die REST API in vROps 6 anzusprechen ist und auch die erste Abfrage via Web Browser erfolgreich war, wollen wir jetzt mal sehen wie wir das in ein Script einbetten.
Hierzu verwende ich die Abfrage nach Resourcen und extrahiere neben dem Resource Identifier auch gleich das Creation Date. Wie erinnern uns, der Resource Identifier ist die eindeutige ID ist unter der ein Objekt in vROps abgelegt ist. Zum Creation Date hier die Zusatzinformation des es sich um den Zeitstempel handelt, zu dem das Objekt in vROps angelegt wurde. Das Format ist hierbei Epoch, also in Sekunden seit dem 1.1.1970.
Beim letzten Mal haben wir einfach Resource Informationen ausgelesen. Ich möchte diesmal nur die Resource Informationen von virtuellen Maschinen lesen. Drum schränke ich die Suche entsprechend ein. Die API liefert mir hierfür auch schon Möglichkeiten wie der folgende Auszug aus der Dokumentation zeigt:
Dem Aufruf /api/resources ist ?name=suchstring anzufügen. Zusätzlich dazu will ich auch gleich alles in einem Rutsch lesen. Auch hier kommt wieder pageSize zum Einsatz. Die URL sieht nun wie folgt aus:
https://vrops01.vcc.vmw/suite-api/api/resources?resourceKind=VirtualMachine&pageSize=5000
Zur Erinnerung: Die Basis URL für die REST API lautet http://VROPS/suite-api/
Nochmal kurz im Web Browser verifizieren
Sehr gut. Das Ganze nun in ein Skript gepackt. Habe hierzu ein Shell Script auf Basis von bash verwendet.
Für die eigene Umgebung ist VROPS=eigeneip/hostname, ID=’anredend oder admin lassen’ und PWD=’eigenespwd’ anzupassen. Als Ergebnis werden die ResourceID und der Zeitstempel in die Datei /tmp/ident.file geschrieben.
#!/usr/bin/env bash # # Script to retrieve resourceID & timestamp from vRealize Operations # Author: fbess # # Fetch resource identifiers for all resources matching SRCH critera # test the url in a browser first! # # (c) 03/2015# Change here for your environment VROPS=172.16.96.88 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) # Be aware that vROps6 does return 100 resources max if not other specified or you have to build a wrapper # around the #ofpages SRCH=”/resources?resourceKind=VirtualMachine&pageSize=5000″# No modifications beyond required# ———————————– PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binFILE=file XML_F=${TMP}/${FILE}.xml IDENT_F=${TMP}/${FILE}.identCTJSON=’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 and timestamp |
Zum Lesen der Inhalte wird curl verwendet. Als Besonderheit wird hier noch mit einem Access Token gearbeitet. Das wäre für die eine Abfrage nicht notwendig, aber im 3. Teil wollen wir auch Daten zurück schreiben. Um das zu beschleunigen hier schonmal die Abfrage des Tokens, der bei allen weiteren curl Aufufen zum Einsatz kommt. Dies beschleunigt spätere Mehrfachaufrufe um den Faktor 20-25.
Mit sed extrahiere ich aus dem XML Ergebnis das Token für die weitere Nutzung
Der letzte Aufruf von curl ist der, der die Resource Informationen ermittelt. Da das Ergebnis auch in XML geliefert wird, wird mittels awk und sed die ResourceID und das CreationDate extrahiert und in die Zieldatei geschrieben.
Das nächste Mal nutzen wir diese Informationen, bereiten den Zeitstempel in lesbare Form auf und fügen das Ganze als ein eigenes Attribut der jeweiligen Resource hinzu…..