Script de comandos da CLI do gcloud

Além de executar comandos do Google Cloud CLI na linha de comando, você pode executá-los a partir de scripts ou outras automações — por exemplo, ao usar o Jenkins para conduzir a automação de Google Cloud tarefas.

O gcloud CLI vem com uma variedade de ferramentas, como filtragem, formatação e o sinalizador --quiet , permitindo que você gerencie a saída e automatize tarefas de forma eficaz.

Noções básicas de script com o gcloud CLI

Para obter um guia passo a passo sobre como criar scripts básicos com o gcloud CLI, consulte esta postagem do blog: Scripting com gcloud: um guia para iniciantes sobre automação Google Cloud tarefas .

Autorização

Ao criar scripts com o gcloud CLI, você precisará considerar os métodos de autorização . O gcloud CLI oferece duas opções:

  • Autorização de conta de usuário
  • Autorização de conta de serviço

A autorização da conta de usuário é recomendada se você estiver executando um script ou outra automação em uma única máquina.

Para autorizar o acesso e executar outras etapas comuns de configuração do gcloud CLI:

gcloud init

A autorização da conta de serviço é recomendada se você estiver implantando um script ou outra automação em máquinas em um ambiente de produção. Também é o método de autorização recomendado se você estiver executando comandos da CLI gcloud em uma instância de máquina virtual do Compute Engine onde todos os usuários têm acesso root .

Para usar a autorização da conta de serviço, use uma conta de serviço existente ou crie uma nova na página Contas de serviço:

Acesse a página Contas de serviço

Para criar e baixar a chave privada associada como um arquivo de chave no formato JSON, escolha Gerenciar Chaves no menu de ações da conta de serviço.

Para executar a autorização, execute gcloud auth activate-service-account :

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

Você pode acessar sua instância de VM via SSH usando gcloud compute ssh , que cuida da autenticação. Os arquivos de configuração SSH podem ser configurados usando gcloud compute config-ssh .

Para obter instruções detalhadas sobre como autorizar as ferramentas da CLI do gcloud, consulte Autorizando a CLI do gcloud .

Desativando prompts

Alguns comandos da CLI do gcloud são interativos, solicitando aos usuários a confirmação de uma operação ou solicitando entradas adicionais para um comando inserido.

Na maioria dos casos, isso não é desejável ao executar comandos em um script ou outra automação. Você pode desabilitar prompts de comandos da CLI do gcloud definindo a propriedade disable_prompts na sua configuração como True ou usando o sinalizador global --quiet ou -q . A maioria dos comandos interativos tem valores padrão quando confirmação ou entrada adicional é necessária. Se os prompts estiverem desabilitados, esses valores padrão serão usados.

Por exemplo:

gcloud debug targets list --quiet

Filtragem e formatação de saída

Para criar scripts com a CLI do gcloud, é importante ter uma saída previsível; é aqui que as sinalizações --filter e --format ajudam. Elas garantem que, ao executar um comando usando a CLI do gcloud, ele produza uma saída que obedeça às suas especificações de formato (como JSON, YAML, CSV e texto) e filtro (nomes de VM prefixados com "test", ano de criação posterior a 2015, etc.).

Se você quiser trabalhar em um tutorial interativo sobre como usar os sinalizadores de filtro e formato, inicie o tutorial usando o seguinte botão:

Abrir no Cloud Shell

Os exemplos a seguir mostram usos comuns de formatação e filtragem com comandos da CLI do gcloud:

Listar instâncias criadas na zona us-central1-a :

gcloud compute instances list --filter="zone:us-central1-a"

Listar em formato JSON os projetos em que os rótulos correspondem a valores específicos (por exemplo, label.env é 'test' e label.version é alpha):

gcloud projects list --format="json" \
  --filter="labels.env=test AND labels.version=alpha"

Listar projetos com data e hora de criação especificadas no fuso horário local:

gcloud projects list \
  --format="table(name, project_id, createTime.date(tz=LOCAL))"

Listar projetos que foram criados após uma data específica em formato de tabela:

gcloud projects list \
  --format="table(projectNumber,projectId,createTime)" \
  --filter="createTime.date('%Y-%m-%d', Z)='2016-05-11'"

Observe que, no último exemplo, foi usada uma projeção na chave. O filtro é aplicado à chave createTime após a definição da formatação da data.

Listar uma tabela aninhada das cotas de uma região:

gcloud compute regions describe us-central1 \
  --format="table(quotas:format='table(metric,limit,usage)')"

Imprima uma lista simplificada de cotas globais em formato CSV:

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

Listar recursos de instância de computação com decorações de caixa e títulos, classificados por nome, em formato de tabela:

gcloud compute instances list \
  --format='table[box,title=Instances](name:sort=1,zone:label=zone,status)'

Liste o endereço de e-mail do usuário autenticado do projeto:

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

Para obter exemplos mais detalhados dos recursos de configuração de saída incorporados aos sinalizadores filters , formats e projections do gcloud CLI, consulte esta postagem do blog sobre filtragem e formatação .

Melhores práticas

Se você quiser que um script ou outra automação execute ações condicionalmente com base na saída de um comando gcloud CLI, observe o seguinte:

  • Depende do status de saída do comando.

    Se o status de saída não for zero, ocorreu um erro e a saída poderá estar incompleta, a menos que a documentação do comando indique o contrário. Por exemplo, um comando que cria vários recursos pode criar apenas alguns, listá-los na saída padrão e, em seguida, sair com um status diferente de zero. Como alternativa, você pode usar a propriedade show_structured_logs para analisar logs de erros. Execute gcloud config para obter mais detalhes.

  • Não dependa de mensagens impressas com erro padrão.

    O texto dessas mensagens pode mudar em versões futuras do gcloud CLI e interromper sua automação.

  • Não dependa da saída bruta de mensagens impressas na saída padrão.

    A saída padrão de qualquer comando pode mudar em uma versão futura. Você pode minimizar o impacto dessas alterações usando o sinalizador --format para formatar a saída com um dos seguintes: --format=json|yaml|csv|text|list para especificar os valores a serem retornados. Execute gcloud topic formats para mais opções.

    Você pode modificar a saída padrão de --format usando projections . Para maior granularidade, use o sinalizador --filter para retornar um subconjunto dos valores com base em uma expressão. Você pode então criar um script com base nesses valores retornados.

    Exemplos de formatação e filtragem de saída podem ser encontrados na seção abaixo.

Scripts de exemplo

Usando a funcionalidade de formato e filtro, você pode combinar comandos da CLI do gcloud em um script para extrair facilmente informações incorporadas.

Listar chaves para todas as contas de serviço dos seus projetos

Os scripts de exemplo a seguir listam as chaves associadas a todas as contas de serviço dos seus projetos por:

  • Iterando sobre seus projetos
  • Para cada projeto, obter as contas de serviço associadas
  • Para cada conta de serviço, obtendo as chaves associadas

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

Ou como 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"
      }
  }
}

Analisar saída para processamento

O exemplo a seguir demonstra a análise da saída para processamento. Em particular, o script de exemplo grava as informações da conta de serviço em uma matriz e segrega os valores no campo serviceAccounts.scope() com formato CSV multivalorado:

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