RESTe raus und rein oder Lesen&Schreiben von vROps 6 Daten via REST API?

By | 16. März 2015

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.

 

REST-API-post-attribute-01

 

 

 

 

 

Damit haben wir jetzt alles zusammen. Das Script aus Teil 2 ergänzen wir dazu wie folgt:

REST-API-post-attribute-02

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)
# Be aware that vROps6 does return 100 resources max if not other specified or zou have to build a wrapper
# around the nopages it splits the result
SRCH=”/resources?resourceKind=VirtualMachine&pageSize=5000″
# SRCH=”/resources?resourceStatus=DATA_RECEIVING”
# SRCH=”/resources?regex=appd-01a.*”

# No modifications beyond required
# ———————————–
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

FILE=file
XML_F=${TMP}/${FILE}.xml
IDENT_F=${TMP}/${FILE}.ident

CTJSON=’Content-Type: application/json’
CTXML=’Content-Type: application/XML’

URL=”https://${VROPS}/suite-api/api”

# Retrieve Token for quick access
AUTHT=${CURL} -k -H "${CTJSON}" -X POST -d '{"username":"'$ID'","password":"'$PWD'","others":[],"otherAttributes":{}}' -u "${ID_PWD}" --url "${URL}/auth/token/acquire" |\
sed 's/^.*<ops\:token>//' | sed 's/<\/ops\:token>.*$//'

CTAUTH=”Authorization: vRealizeOpsToken ${AUTHT}”

# Retrieve resources and extract the resource identifier incl. creation time
# awk part extracts and reformats the identifier/date. Date format for out is handled in strftime
CNT=0
${CURL} -k -H “${CTAUTH}” –url “${URL}${SRCH}” |\
sed ‘s!/>!&\
!g’ | sed ‘s!><!>\
<!g’ | \
awk ‘BEGIN { RS=”\
“; } \
/identifier=/{ \
print gensub(/.*=\”(.*)\”>/, “\\1”, “g”, $3) ” ” strftime(“%F:%T”, gensub(/.*=\”(.*)…\”/, “\\1”, “g”, $2)); \
}’ > ${IDENT_F}
cat ${IDENT_F} | while read IDENT CREATED
do
# Variables required for POST
TIMESTAMP=$(date +%s000)
POST_DATA='<?xml version=”1.0″ encoding=”UTF-8″ standalone=”yes”?>
<ops:property-contents xmlns:xs=”http://www.w3.org/2001/XMLSchema”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xmlns:ops=”http://webservice.vmware.com/vRealizeOpsMgr/1.0/”>
<ops:property-content statKey=”YOURATTRIB|CreationTime”>
<ops:timestamps>’${TIMESTAMP}'</ops:timestamps>
<ops:values>’${CREATED}'</ops:values>
</ops:property-content>
</ops:property-contents>’
# Post via REST API
((CNT++))
echo “$CNT – Processing resource: $IDENT”
echo “$POST_DATA” | ${CURL} -k -H “${CTAUTH}” -H “${CTXML}” -X POST -d @- –retry 3 –url “${URL}/resources/${IDENT}/properties”
done

print
Frank Bess

Frank Bess

Global Solutions Consultant bei VMware Global Inc.
Die letzten 15+ Jahre schwerpunktmäßig im Umfeld von Systems und IT Service Management unterwegs. Seit 5 Jahren bei VMware in unterschiedlichen Rollen in EMEA/CEMEA und Deutschland. Auch hier mit starker Ausrichtung auf Management und zunehmend Automation. Also alles oder besser gesagt vieles Rund um vRealize.
Frank Bess
Category: _vR Ops 6 REST API Schlagwörter: , ,

About Frank Bess

Die letzten 15+ Jahre schwerpunktmäßig im Umfeld von Systems und IT Service Management unterwegs. Seit 5 Jahren bei VMware in unterschiedlichen Rollen in EMEA/CEMEA und Deutschland. Auch hier mit starker Ausrichtung auf Management und zunehmend Automation. Also alles oder besser gesagt vieles Rund um vRealize.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.