2015-01-16 12 views
5

Ho un sacco di istanze in esecuzione in GCE. Voglio ottenere a livello di programmazione un elenco degli indirizzi IP interni di essi senza accedere alle istanze (localmente).Come ottenere un elenco di indirizzi IP interni delle istanze GCE

so che posso correre:

gcloud compute instances list 

Ma ci sono delle bandiere posso passare per ottenere solo le informazioni che voglio? ad es.

gcloud compute instances list --internal-ips 

o simile? O dovrò rispolverare il mio cervello sed/awk e analizzare l'output?

So anche che posso ottenere l'output in JSON utilizzando --format = json, ma sto cercando di farlo in uno script bash.

+0

o awk è probabilmente meglio – Spanky

+0

un piccolo insieme di output di esempio da 'gcloud' e la vostra uscita richiesta renderebbe molto più facile per membri non-'gcloud' per aiutare con il tuo problema. In bocca al lupo. – shellter

risposta

0

Per quanto ne so non è possibile filtrare su campi specifici nello strumento gcloud. Qualcosa come questo lavoro per uno script Bash, ma ci si sente ancora un po 'fragile:

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

Sono d'accordo con @Christiaan. Attualmente non esiste un modo automatico per ottenere gli IP interni usando il comando gcloud.

È possibile utilizzare il seguente comando per stampare i IP interni (4 ° colonna):

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

o successiva, se si vuole avere la coppia <instance_name> <internal_ip> (1 ° e 4 ° colonna)

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

Spero che aiuti.

+0

Si noti che questo non funziona se si dispone di una rete con istanze preempibili (nel qual caso la quarta colonna indica se è possibile effettuare il prelievo). – speedplane

6

Alcune cose qui.

Il primo formato di output predefinito di gcloud per la quotazione non è garantito e le nuove colonne potrebbero essere aggiunte in futuro. Non scrivere contro questo!

Le tre modalità di output sono tre modalità di output accessibili con il flag di formato, --format = json, --format = yaml e format = text, sono basate su coppie chiave = valore e possono essere confrontate con script anche se nuovi campi verranno introdotti in futuro.

Due buoni modi per fare quello che vuoi è di utilizzare JSON e lo strumento JQ,

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

o formattare il testo e grep + line-oriented utilizzando strumenti,

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

Penso che tu abbia bisogno di un. nel comando jq, ad esempio lista delle istanze di calcolo di gcloud --format = json | jq '. []. networkInterfaces []. networkIP' – dranxo

+1

La mia risposta qui è ora un po 'obsoleta. Le nuove versioni di gcloud offrono un maggiore controllo sulla formattazione dell'output, sui filtri, ecc. Vedi https://cloud.google.com/sdk/gcloud/reference/topic/formats per una panoramica. –

+0

questo ha aiutato moltissimo. export PROXY = $ (elenco istanze di calcolo gcloud --format = testo | grep '^ networkInterfaces \ [[0-9] \ + \] \. NetworkIP:' | sed 's /^.* // g') lo salverà in una variabile env per te – Ozzadar

10

Il modo più semplice per ottenere a livello di programmazione un elenco di IP interni (o IP esterni) senza una dipendenza da strumenti diversi da gcloud è:

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

Questo utilizza --format=value che richiede anche un projection che è un elenco di resource keys che seleziona i valori dei dati delle risorse.Per ogni comando è possibile utilizzare --format=flattened per ottenere l'elenco delle risorse coppie chiave/valore:

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

Sai come renderlo separato da virgola con gli attributi di valore? Questo non funziona: 'gcloud --format =" valore [terminator = ","] (networkInterfaces [0] .accessConfigs [0] .natIP) "elenco delle istanze di calcolo" –

+2

@ AlexCalm1Kov hai le virgolette nidificate in doppie virgolette che si rompono, quindi sostituisci una delle coppie in questo modo: 'gcloud --format =" valore [terminator = ','] (networkInterfaces [0] .accessConfigs [0] .natIP) "lista di istanze di calcolo" o potresti anche provare a usare 'paste' in questo modo:' gcloud --format = "valore (networkInterfaces [0] .accessConfigs [0] .natIP)" elenco delle istanze di calcolo | incolla -d, -s -' che non lascia una virgola finale spuria quando c'è solo un valore-- Considererei quel caso un bug nel comando precedente. – aculich

Problemi correlati