Posts mit dem Label JQ werden angezeigt. Alle Posts anzeigen
Posts mit dem Label JQ werden angezeigt. Alle Posts anzeigen

Montag, 13. Juni 2016

Wie bekomme ich die IPs von meinen Digital Ocean Servern?

Erzeuge einen API Token bei Digital Ocean, oben im Menü und setze eine Shell Variable, der Einfachheit halber.
export TOKEN=e21558xx1111111111111222333

Hole alle Informationen deiner Droplets via Digital Ocean REST API:
curl  -sS -X GET "https://api.digitalocean.com/v2/droplets?per_page=200" -H "Authorization: Bearer $TOKEN"  > droplets.json

Vorsicht mit der Aufteilung der Antwort in mehrere Seiten. Dazu gibt es in der Antwort die Links:
cat droplets.json | jq '.links'
{
  "pages": {
    "last": "https://api.digitalocean.com/v2/droplets?page=2&per_page=200",
    "next": "https://api.digitalocean.com/v2/droplets?page=2&per_page=200"
  }


}

Die nächste Seite erhält man:
curl  -sS -X GET "https://api.digitalocean.com/v2/droplets?page=2&per_page=200" -H "Authorization: Bearer $TOKEN"  > droplets.json

Filter aus den Agenten die dich interessieren z.B. bezüglich des Namens und hole dir die IP4 Adressen.


cat droplets.json | jq '.droplets[] | .name+";"+.networks.v4[].ip_address' | tr -d "\"" | grep imageservertest-agent | awk -F ';' '{ print $2}' > agents.txt


Das ergibt dann ein schöne IP Liste als Datei. 
wc -l agents.txt 
22 agents.txt

Erweiterung um Droplet IDs
Die Droplet Ids benötigt man z.B. wenn man automatisiert seine Droplet zerstören (löschen) möchte.

cat droplets.json | jq -r '.droplets[] | [ .name+";"+.networks.v4[].ip_address, .id|tostring] | join(";")' | grep "imageservertest-agent" > agents.csv

Interessant sind die beiden Verkettungen in JQ. Einmal werden zwei String via + verkettet. Das zweite mal wird eine Zahl in einen Stein umgewandelt und danach mittels join zu eine CSV Datei verkettet.

Anmerkung: Durch die JQ option -r werden die umschliessenden Double Ticks verhindert. Dadurch kann im zweiten Beispiel der tr Schritt ausgelassen werden.

Montag, 8. Juni 2015

Json Processing in der BASH mit JQ

JSON ist nicht das schönste Datenformat, so gibt es keine Kommentare in JSON. Aber zur Zeit braucht man JSON es an vielen Stellen, z.B. um Elastic Search Abfragen zu stellen bzw. die Elastic Search Results auszuwerten. Wer mit der Bash arbeitet wird JQ als Anfragewerkzeug zu schätzen wissen. Ein immer wieder auftauchendes Problem sind Keys in JSON, die böse Zeichen enthalten wie / oder - (Slash, Minus) die bei Abfragen via JQ escaped werden müssen.

jq .hits.hits[3]._source.http-rc result2.0.json 
error: rc is not defined

.hits.hits[3]._source.http-rc                           1 compile error

So geht es richtig:

jq '.hits.hits[3]._source["http-rc"]' result2.0.json 
"200"


Was lernen wir daraus? Bezeichner, Keys, Namen im Camel Case setzen! Das spart viel Zeit, bei deinen Kollegen.

Hier als Ergänzung der Link zu Googles JSON Style Guide: http://google-styleguide.googlecode.com/svn/trunk/jsoncstyleguide.xml#Property_Name_Format