2015-01-16 10 views
5

Ich habe eine Reihe von Instanzen in GCE ausgeführt. Ich möchte programmgesteuert eine Liste der internen IP-Adressen von ihnen abrufen, ohne sich bei den Instanzen (lokal) anzumelden.So erhalten Sie eine Liste der internen IP-Adressen von GCE-Instanzen

Ich weiß, dass ich laufen kann:

gcloud compute instances list 

Aber gibt es irgendwelche Flaggen ich nur passieren kann, um die Informationen Ich will zu bekommen? z.B.

gcloud compute instances list --internal-ips 

oder ähnlich? Oder muss ich mein sed/awk Gehirn abstauben und die Ausgabe parsen?

Ich weiß auch, dass ich die Ausgabe in JSON mit --format = Json erhalten kann, aber ich versuche, dies in einem Bash-Skript zu tun.

+0

oder awk ist wahrscheinlich besser – Spanky

+0

ein kleiner Satz von Beispielausgabe von 'gcloud' und Ihre gewünschten Ausgabe wäre es viel einfacher für Nicht-'Gcloud'-Mitglieder, die Ihnen bei Ihrem Problem helfen. Viel Glück. – shellter

Antwort

0

Soweit ich weiß, können Sie nicht nach bestimmten Feldern im gcloud-Tool filtern. Etwas Ähnliches wird für einen Bash-Skript arbeiten, aber es fühlt sich immer noch ein wenig spröde:

gcloud compute instances list --format=yaml | grep " networkIP:" | cut -c 14-100 
0

ich mit @Christiaan zustimmen. Derzeit gibt es keinen automatisierten Weg, um die internen IPs mit dem Befehl gcloud zu erhalten.

können Sie den folgenden Befehl verwenden, um die interne IP-Adressen (4. Spalte) zu drucken:

gcloud compute instances list | tail -n+2 | awk '{print $4}' 

oder die folgende ein, wenn Sie das Paar <instance_name> <internal_ip> (1. und 4. Spalte) haben wollen

gcloud compute instances list | tail -n+2 | awk '{print $1, $4}' 

Ich hoffe es hilft.

+0

Beachten Sie, dass dies nicht funktioniert, wenn Sie ein Netzwerk mit präemptiven Instanzen haben (in diesem Fall ist die vierte Spalte, ob es präemptiv ist). – speedplane

6

Ein paar Dinge hier.

Das standardmäßige Ausgabeformat von gcloud für die Auflistung ist nicht garantiert stabil und neue Spalten können in Zukunft hinzugefügt werden. Schreib nicht dagegen!

Die drei Ausgabemodi sind drei Ausgabemodi, auf die mit dem Formatflag zugegriffen werden kann: --format = json, --format = yaml und format = text, basieren auf key = value-Paaren und können selbst dann skripted werden neue Felder werden in Zukunft eingeführt.

Zwei gute Möglichkeiten, zu tun, was Sie wollen, sind JSON zu verwenden und das jq Werkzeug,

gcloud compute instances list --format=json \ 
    | jq '.[].networkInterfaces[].networkIP' 

oder Textformat und grep + zeilenorientierten Tools,

gcloud compute instances list --format=text \ 
    | grep '^networkInterfaces\[[0-9]\+\]\.networkIP:' | sed 's/^.* //g' 
+1

Ich denke du brauchst ein. Im Befehl jq zB gcloud compute instances list --format = json | jq '. []. networkInterfaces []. networkIP' – dranxo

+1

Meine Antwort hier ist jetzt ein bisschen veraltet. Neue Versionen von gcloud bieten viel mehr Kontrolle über die Ausgabeformatierung, Filterfelder usw. Unter https://cloud.google.com/sdk/gcloud/reference/topic/formats finden Sie eine Übersicht. –

+0

das hat enorm geholfen. export PROXY = $ (gcloud compute -instanzen list --format = text | grep '^ netzwerkInterfaces \ [[0-9] \ + \] \. NetworkIP:' | sed 's /^.* // g') speichert es in eine env-Variable für Sie – Ozzadar

10

Der einfachste Weg, programmgesteuert eine Liste der internen IPs (oder externen IPs) ohne eine Abhängigkeit von anderen Tools als gcloud zu erhalten ist:

$ gcloud --format="value(networkInterfaces[0].networkIP)" compute instances list 
$ gcloud --format="value(networkInterfaces[0].accessConfigs[0].natIP)" compute instances list 

Verwendet --format=value, die auch eine projection erfordert, die eine Liste von resource keys ist, die Ressourcendatenwerte auswählen.Für jeden Befehl können Sie --format=flattened verwenden, um die Liste der Ressourcen Schlüssel/Wert-Paare zu erhalten:

$ gcloud --format=flattened compute instances list 
+0

Wissen Sie, wie Sie es Komma getrennt mit Wertattributen machen? Dieser funktioniert nicht: 'gcloud --format =" wert [terminator = ","] (networkInterfaces [0] .accessConfigs [0] .natIP) "compute instances liste' –

+2

@ AlexCalm1Kov hast du doppelte Anführungszeichen geschachtelt double-quotes, die bricht, so ersetzen Sie das eine der Paare wie folgt: 'gcloud --format =" Wert [terminator = ','] (networkInterfaces [0] .accessConfigs [0] .natIP) "Liste der Instanzen berechnen 'oder Sie könnten auch versuchen, "Einfügen" wie folgt zu verwenden: 'gcloud --format =" value (networkInterfaces [0] .accessConfigs [0] .natIP) "Liste der Instanzen berechnen | paste -d, -s -', die kein falsches abschließendes Komma zurücklässt, wenn es nur einen Wert gibt - ich würde in diesem Fall einen Fehler im vorherigen Befehl betrachten. – aculich