Oltre a eseguire i comandi dell'interfaccia a riga di Google Cloud CLI dalla riga di comando, puoi eseguirli da script o altre automazioni, ad esempio quando utilizzi Jenkins per guidare l'automazione delle attività di Google Cloud.
Gcloud CLI è dotata di una varietà di strumenti come filtri, formattazione e flag --quiet
, che consentono di gestire efficacemente l'output e di automatizzare le attività.
Nozioni di base sullo script con gcloud CLI
Per una guida passo passo per creare script di base con gcloud CLI, consulta questo post del blog: Esecuzione di script con gcloud: una guida per nuovi utenti all'automazione delle attività di Google Cloud.
Autorizzazione
Quando scrivi script con l'interfaccia a riga di comando gcloud, devi prendere in considerazione i metodi di autorizzazione. L'gcloud CLI fornisce due opzioni:
- Autorizzazione account utente
- Autorizzazione tramite account di servizio
L'autorizzazione degli account utente è consigliata se esegui uno script o un'altra automazione su un'unica macchina.
Per autorizzare l'accesso ed eseguire altri passaggi comuni di configurazione gcloud CLI:
gcloud init
L'autorizzazione dell'account di servizio è consigliata se stai eseguendo il deployment di uno script o di altra automazione su più macchine in un ambiente di produzione. È anche il metodo di autorizzazione consigliato se esegui comandi gcloud CLI su un'istanza di macchina virtuale Compute Engine in cui tutti gli utenti hanno accesso a root
.
Per utilizzare l'autorizzazione dell'account di servizio, usa un account di servizio esistente o creane uno nuovo nella pagina Account di servizio:
Vai alla pagina Account di servizio
Per creare e scaricare la chiave privata associata come file di chiave in formato JSON, scegli Gestisci chiavi dal menu delle azioni per l'account di servizio.
Per eseguire l'autorizzazione, esegui
gcloud auth activate-service-account
:
gcloud auth activate-service-account --key-file [KEY_FILE]
Puoi connetterti all'istanza VM tramite SSH utilizzando gcloud compute ssh
, che si occupa dell'autenticazione. I file di configurazione SSH possono essere configurati utilizzando gcloud compute config-ssh
.
Per istruzioni dettagliate sull'autorizzazione degli strumenti gcloud CLI, consulta Autorizzazione dell'interfaccia a riga di comando gcloud.
Disattivazione dei messaggi
Alcuni comandi dellgcloud CLI sono interattivi, che richiedono agli utenti di confermare un'operazione o richiedono un input aggiuntivo per un comando inserito.
Nella maggior parte dei casi, questo non è consigliabile quando si eseguono comandi in uno script o altra automazione. Puoi disabilitare le richieste dai comandi dell'interfaccia a riga di comando gcloud CLI impostando la proprietà disable_prompts
nella configurazione su True
o utilizzando il flag globale --quiet
o -q
. La maggior parte dei comandi interattivi ha valori predefiniti quando è richiesta conferma o input aggiuntivi. Se le richieste sono disabilitate, vengono utilizzati questi valori predefiniti.
Ad esempio:
gcloud debug targets list --quiet
Filtri e formattazione dell'output
Per creare script con l'interfaccia alla gcloud CLI, è importante disporre di un output prevedibile: è qui che i flag --filter
e --format
aiutano. Garantiscono che quando esegui un comando utilizzando gcloud CLI, produce un output conforme al tuo formato (come json, yaml, csv e testo) e alle specifiche del filtro (nomi di VM preceduti da "test", anno di creazione dopo il 2015 e così via).
Se vuoi completare un tutorial interattivo sull'utilizzo dei flag di filtro e formattazione, avvia il tutorial utilizzando il seguente pulsante:
Gli esempi seguenti mostrano gli utilizzi comuni della formattazione e dei filtri con i comandi gcloud CLI:
Elenca le istanze create nella zona us-central1-a:
gcloud compute instances list --filter="zone:us-central1-a"
Elenca in formato JSON i progetti in cui le etichette corrispondono a valori specifici (ad es. label.env è "test" e label.version è alpha):
gcloud projects list --format="json" \
--filter="labels.env=test AND labels.version=alpha"
Elenca i progetti con la data e l'ora di creazione specificate nel fuso orario locale:
gcloud projects list \
--format="table(name, project_id, createTime.date(tz=LOCAL))"
Elenca i progetti creati dopo una data specifica in formato tabella:
gcloud projects list \
--format="table(projectNumber,projectId,createTime)" \
--filter="createTime.date('%Y-%m-%d', Z)='2016-05-11'"
Nell'ultimo esempio è stata utilizzata una proiezione della chiave. Il filtro viene applicato alla chiave createTime
dopo l'impostazione della formattazione della data.
Elenca una tabella nidificata delle quote di una regione:
gcloud compute regions describe us-central1 \
--format="table(quotas:format='table(metric,limit,usage)')"
Stampa un elenco suddiviso delle quote globali in formato CSV:
gcloud compute project-info describe --flatten='quotas[]' \
--format='csv(quotas.metric,quotas.limit,quotas.usage)'
Elenca le risorse di istanza di calcolo con decorazioni e titoli delle caselle, ordinate per nome, in formato tabella:
gcloud compute instances list \
--format='table[box,title=Instances](name:sort=1,zone:label=zone,status)'
Elenca l'indirizzo email dell'utente autenticato dal progetto:
gcloud info --format='value(config.account)'
Per altri esempi sulle capacità di configurazione dell'output integrate nei flag filters
, formats
e projections
dell'interfaccia a riga di comando gcloud, consulta questo post del blog su filtro e formattazione.
Best practice
Se vuoi che uno script o un'altra automazione esegua azioni condizionali in base all'output di un comando gcloud CLI, osserva quanto segue:
Dipende dallo stato di uscita del comando.
Se lo stato dell'uscita è diverso da zero, si è verificato un errore e l'output potrebbe essere incompleto, a meno che la documentazione del comando non indichi diversamente. Ad esempio, un comando che crea più risorse può solo crearne alcune, elencarle nell'output standard e poi uscire con uno stato diverso da zero. In alternativa, puoi utilizzare la proprietà
show_structured_logs
per analizzare i log degli errori. Eseguigcloud config
per ulteriori dettagli.Non fare affidamento su messaggi stampati con un errore standard.
Il testo di questi messaggi può cambiare nelle future versioni dell'interfaccia alla gcloud CLI e interrompere l'automazione.
Non dipendere dall'output non elaborato dei messaggi stampati nell'output standard.
L'output predefinito di qualsiasi comando può cambiare in una release futura. Puoi ridurre al minimo l'impatto di queste modifiche utilizzando il flag
--format
per formattare l'output con uno dei seguenti valori:--format=json|yaml|csv|text|list
per specificare i valori da ripristinare. Eseguigcloud topic formats
per ulteriori opzioni.Puoi modificare l'output predefinito da
--format
utilizzandoprojections
. Per una maggiore granularità, utilizza il flag--filter
per restituire un sottoinsieme di valori in base a un'espressione. Puoi quindi creare script con i valori restituiti.Esempi di formattazione e filtri di output sono disponibili nella sezione di seguito.
Script di esempio
Utilizzando la funzionalità di formato e filtro, puoi combinare i comandi dell'interfaccia a riga di comando gcloud in uno script per estrarre facilmente le informazioni incorporate.
Elenca le chiavi per tutti gli account di servizio dei tuoi progetti
I seguenti script di esempio elencano le chiavi associate agli account di servizio dei tuoi progetti per:
- Iterazione sui tuoi progetti
- Per ciascun progetto, ottenere gli account di servizio associati
Per ogni account di servizio, le chiavi associate vengono ricevute
Bash
#!/bin/bash
for project in $(gcloud projects list --format="value(projectId)")
do
echo "ProjectId: $project"
for robot in $(gcloud iam service-accounts list --project $project --format="value(email)")
do
echo " -> Robot $robot"
for key in $(gcloud iam service-accounts keys list --iam-account $robot --project $project --format="value(name.basename())")
do
echo " $key"
done
done
done
Windows PowerShell
Oppure come Windows PowerShell:
foreach ($project in gcloud projects list --format="value(projectId)")
{
Write-Host "ProjectId: $project"
foreach ($robot in gcloud iam service-accounts list --project $project --format="value(email)")
{
Write-Host " -> Robot $robot"
foreach ($key in gcloud iam service-accounts keys list --iam-account $robot --project $project --format="value(name.basename())")
{
Write-Host " $key"
}
}
}
Output analisi per l'elaborazione
L'esempio seguente mostra l'analisi dell'output per l'elaborazione. In particolare, lo script di esempio scrive le informazioni dell'account di servizio in un array e separa i valori nel campo serviceAccounts.scope()
a più valori in formato CSV:
#!/bin/bash
for scopesInfo in $(
gcloud compute instances list --filter=name:instance-1 \
--format="csv[no-heading](name,id,serviceAccounts[].email.list(),
serviceAccounts[].scopes[].map().list(separator=;))")
do
IFS=',' read -r -a scopesInfoArray<<< "$scopesInfo"
NAME="${scopesInfoArray[0]}"
ID="${scopesInfoArray[1]}"
EMAIL="${scopesInfoArray[2]}"
SCOPES_LIST="${scopesInfoArray[3]}"
echo "NAME: $NAME, ID: $ID, EMAIL: $EMAIL"
echo ""
IFS=';' read -r -a scopeListArray<<< "$SCOPES_LIST"
for SCOPE in "${scopeListArray[@]}"
do
echo " SCOPE: $SCOPE"
done
done