Como realizar o script de comandos da CLI da gcloud

Além de executar os comandos da CLI da gcloud a partir da linha de comando, também é possível executá-los a partir de scripts ou outras automações. Por exemplo, ao usar o Jenkins para orientar a automação das tarefas do Google Cloud Platform.

Autorização

As ferramentas do Google Cloud SDK aceitam dois métodos de autorização:

  • autorização da conta de usuário
  • autorização da conta de serviço

É recomendável usar a autorização da conta de usuário 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 Cloud SDK:

    gcloud init

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

Para usar a autorização de conta de serviço, use uma conta de serviço atual ou crie uma nova no Console do Google Cloud Platform. Na coluna de opções da tabela de contas de serviço, crie e faça o download da chave privada associada como arquivo de chave formatado para JSON.

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

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

É possível se conectar via SSH à instância da VM com gcloud compute ssh, que será o responsável pela autenticação. Os arquivos de configuração SSH podem ser definidos usando gcloud compute config-ssh.

Para instruções detalhadas sobre autorização de ferramentas do Cloud SDK, confira nosso guia completo.

Como desativar prompts

Alguns comandos da CLI da gcloud são interativos e solicitam que os usuários confirmem uma operação ou entradas complementares para um comando inserido.

Na maioria dos casos, isso não é conveniente para a execução de comandos em um script ou outra automação. É possível desativar os prompts dos comandos da CLI do gcloud definindo a propriedade disable_prompts em sua configuração como True ou usando a sinalização global --quiet ou -q. A maioria dos comandos interativos tem valores padrão quando a confirmação extra ou a entrada é obrigatória. Caso os prompts estejam desativados, os valores padrão são usados.

Por exemplo:

    gcloud --quiet debug targets list

Observe que a sinalização --quiet é inserida na parte inicial.

Como processar a saída

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

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

    Elas podem mudar em versões futuras da CLI da gcloud e interromper a automação.

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

    A saída padrão de qualquer comando pode mudar em uma versão futura. Para minimizar o impacto dessas alterações, use a sinalização --format para formatar a saída com uma das seguintes opções: --format=json|yaml|csv|text|list para especificar os valores a serem retornados. Execute os formatos de tópico do gcloud $ para mais opções.

    Modifique a saída padrão de --format usando projections. Para maior granularidade, use a sinalização --filter para retornar um subconjunto dos valores com base em uma expressão. Crie um script para esses valores retornados.

    Exemplos de formatação e resultados de filtragem podem ser encontrados na seção abaixo.

  • Conte com o status de saída do comando.

    O status de saída diferente de zero indica que ocorreu um erro e a saída pode estar incompleta, a menos que a documentação do comando faça observações diferentes. Por exemplo, um comando que cria vários recursos só pode criar alguns, listá-los na saída padrão e acabar saindo com um status diferente de zero. Você também pode usar a propriedade show_structured_logs para analisar registros de erros. Execute $ gcloud config para ver mais detalhes.

Exemplos de filtragem e formatação

Para ver um tutorial interativo sobre como usar as sinalizações de filtro e formato, pressione o botão abaixo para começar o tutorial:

Abrir no Cloud Shell

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

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

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

Lista no 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"

Liste 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))"

Liste projetos que foram criados após uma data específica no formato da 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 de formatação de datas.

Liste uma tabela aninhada de cotas de uma região:

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

Imprima uma lista nivelada de cotas globais no formato CSV:

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

Liste recursos de instância de computação com decorações e títulos de caixas, ordenadas por nome no formato da tabela:

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

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

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

Exemplos de script

Com esta funcionalidade de formato e filtro, combine comandos da CLI do gcloud em um script para extrair facilmente informações integradas.

Para listar todas as chaves associadas a todas as contas de serviço do seu projeto, incremente todos os seus projetos e, para cada projeto, receba todas as contas de serviço associadas a ele. Para cada conta de serviço, receba todas as chaves. Isso pode ser realizado das seguintes formas:

Como um script 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

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

Às vezes, você precisará analisar a saída para processamento. Por exemplo, pode ser útil escrever as informações da conta de serviço em uma matriz e segregar valores no campo serviceAccounts.scope() com formato CSV de vários valores. O script abaixo realiza essa ação:

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

Mais informações

Para ver um guia passo a passo de como criar scripts básicos usando a CLI do gcloud, consulte este guia para iniciantes sobre como automatizar tarefas do GCP.

Veja nesta postagem do blog sobre filtragem e formatação mais exemplos relacionados dos recursos de configuração de saída integrados às sinalizações filters, formats e projections da CLI da gcloud.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Cloud SDK