Creazione di script dei comandi dell'interfaccia a riga di comando gcloud

Oltre a eseguire i comandi Google Cloud CLI dalla riga di comando, puoi eseguire script o altre automazioni, ad esempio quando utilizzi Jenkins per gestire l'automazione delle attività di Google Cloud.

gcloud CLI include una varietà di strumenti, come filtri, la formattazione e il flag --quiet, che ti consentono di gestire in modo efficace e automatizzare le attività.

Nozioni di base sulla creazione di script con l'interfaccia a riga di comando gcloud

Per una guida passo passo alla creazione di script di base con l'interfaccia a riga di comando gcloud, consulta questo post del blog: Scripting con gcloud: una guida per principianti all'automazione delle attività di Google Cloud.

Autorizzazione

Quando crei script con gcloud CLI, devi considerare metodi di autorizzazione. gcloud CLI offre due opzioni:

  • Autorizzazione dell'account utente
  • Autorizzazione tramite account di servizio

L'autorizzazione a livello di account utente è consigliata se esegui uno script o e altre applicazioni su una singola macchina.

Per autorizzare l'accesso ed eseguire altri passaggi comuni di configurazione della CLI gcloud:

gcloud init

L'autorizzazione dell'account di servizio è consigliata se esegui il deployment di uno script o altre automazioni su più macchine in un ambiente di produzione. È anche il metodo di autorizzazione consigliato se esegui comandi dell'interfaccia a riga di comando gcloud su un'istanza della macchina virtuale Compute Engine a cui tutti gli utenti hanno accesso a root.

Per utilizzare l'autorizzazione dell'account di servizio, utilizza 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 chiavi in formato JSON, scegli Gestisci chiavi dal menu di azioni dell'account di servizio.

Per eseguire l'autorizzazione, esegui gcloud auth activate-service-account:

gcloud auth activate-service-account --key-file [KEY_FILE]

Puoi accedere con SSH all'istanza VM 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 prompt

Alcuni comandi della gcloud CLI sono interattivi e richiedono agli utenti la conferma di o richiedere un input aggiuntivo per un comando inserito.

Nella maggior parte dei casi, ciò non è consigliabile quando si eseguono comandi in uno script o in un altro e l'automazione degli annunci. Puoi disattivare i prompt dei comandi dell'interfaccia a riga di comando gcloud impostando la proprietà disable_prompts nella configurazione su True o utilizzando il flag --quiet o -q globale. Più alta i comandi interattivi hanno valori predefiniti quando vengono è obbligatorio. Se i prompt sono disabilitati, vengono utilizzati questi valori predefiniti.

Ad esempio:

gcloud debug targets list --quiet

Output filtri e formattazione

Per scrivere script con la CLI gcloud, è importante avere un output prevedibile. È qui che entrano in gioco i flag --filter e --format. Loro assicurati che quando esegui un comando utilizzando gcloud CLI, produce un output conforme al tuo formato (come json, yaml, csv e testo) filtro (nomi VM con prefisso "test", anno di creazione dopo il 2015 e così via) specifiche.

Se vuoi seguire un tutorial interattivo sull'utilizzo dei flag di formato e filtro, avvialo utilizzando il seguente pulsante:

Apri in Cloud Shell

I seguenti esempi illustrano gli utilizzi comuni della formattazione e dei filtri con I comandi della 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'"

Tieni presente che nell'ultimo esempio è stata utilizzata una proiezione sulla chiave. Il filtro è applicata al tasto 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 appiattito delle quote globali in formato CSV:

gcloud compute project-info describe --flatten='quotas[]' \
  --format='csv(quotas.metric,quotas.limit,quotas.usage)'

Elenca le risorse delle istanze di calcolo con decorazioni delle caselle e titoli, 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 del progetto:

gcloud info --format='value(config.account)'

Per esempi più pertinenti delle funzionalità di configurazione dell'output create nell'interfaccia alla gcloud CLI filters, formats e projections flag, scopri di più post del blog su filtri e formattazione.

Best practice

Se vuoi che uno script o un'altra automazione esegua azioni in base alle condizioni sull'output di un comando gcloud CLI, osserva quanto segue:

  • Dipende dallo stato di uscita del comando.

    Se lo stato dell'uscita non è zero, si è verificato un errore e l'output potrebbe essere siano incompleti, a meno che non sia indicato diversamente nella documentazione del comando. Ad esempio, un comando che crea più risorse può creare solo alcune, elencale nell'output standard e quindi escono con uno stato diverso da zero. In alternativa, puoi utilizzare la proprietà show_structured_logs per analizzare log degli errori. Esegui gcloud config per ulteriori dettagli.

  • Non dipendere da messaggi stampati con errore standard.

    Il testo di questi messaggi potrebbe cambiare nelle versioni future del con gcloud CLI e interrompere l'automazione.

  • Non dipende dall'output non elaborato dei messaggi stampati su output standard.

    L'output predefinito di qualsiasi comando potrebbe cambiare in una release futura. Puoi ridurre al minimo l'impatto di queste modifiche utilizzando il flag --format per formattare il risultato con uno dei seguenti: --format=json|yaml|csv|text|list per specificare i valori da restituire. Esegui gcloud topic formats per visualizzare altre opzioni.

    Puoi modificare l'output predefinito --format mediante l'utilizzo projections. Per una maggiore granularità, utilizza il flag --filter per restituire un sottoinsieme di valori in base a un'espressione. Puoi quindi creare script in base a questi valori restituiti.

    Nella sezione riportata di seguito puoi trovare esempi di formattazione e filtri dell'output.

Script di esempio

Utilizzando le funzionalità di formattazione e filtro, puoi combinare i comandi gcloud CLI in uno script per estrarre facilmente i comandi informazioni.

Elenca le chiavi per tutti i progetti account di servizio

I seguenti script di esempio elencano le chiavi associate a tutti i tuoi progetti account di servizio per:

  • Eseguire l'iterazione sui progetti
  • Per ogni progetto, ottieni gli account di servizio associati
  • Per ogni account di servizio, ottieni le chiavi associate

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

In alternativa, 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"
      }
  }
}

Analizza l'output 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 separa i valori in serviceAccounts.scope() con formattazione CSV a più valori campo:

#!/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