Instalar o provedor do Compute Engine Symphony

Neste documento, descrevemos como instalar e configurar o provedor do IBM Symphony para o Compute Engine. Você vai aprender a configurar o Pub/Sub para monitorar eventos de instâncias de máquina virtual (VMs), criar e instalar o plug-in do provedor e configurar a instância do provedor no ambiente de fábrica de hosts do Symphony.

Para mais informações sobre os conectores do Symphony para Google Cloud, consulte Integrar o IBM Spectrum Symphony ao Google Cloud.

Antes de começar

Para instalar o provedor do Symphony para o Compute Engine, você precisa ter os seguintes recursos:

  • Um cluster do IBM Spectrum Symphony em execução com o serviço de fábrica de hosts ativado. Você tem o nome do host principal do IBM Spectrum Symphony.
  • Uma conta de serviço dedicada com os papéis necessários. Para mais informações sobre como criar essa conta de serviço, consulte Criar uma conta de serviço.
  • Uma regra de firewall configurada para permitir a comunicação entre o host principal do Symphony e o Compute Engine. Exemplo:

    gcloud compute firewall-rules create allow-symphony-primary-to-compute \
        --project=PROJECT_ID \
        --direction=INGRESS \
        --priority=1000 \
        --network=NETWORK_NAME \
        --allow=all \
        --source-tags=NETWORK_TAGS_MASTER \
        --target-tags=NETWORK_TAGS
    
    gcloud compute firewall-rules create allow-symphony-compute-to-primary \
        --project=PROJECT_ID \
        --direction=INGRESS \
        --priority=1000 \
        --network=NETWORK_NAME \
        --allow=all \
        --source-tags=NETWORK_TAGS \
        --target-tags=NETWORK_TAGS_MASTER
    

    Substitua:

    • PROJECT_ID: o ID do seu projeto do Google Cloud.
    • NETWORK_NAME: o nome da rede VPC em que seus recursos do Symphony são implantados.
    • NETWORK_TAGS_MASTER: a tag de rede aplicada à VM do host principal do Symphony.
    • NETWORK_TAGS: a tag de rede aplicada às VMs do nó de computação do Symphony.

    Para mais informações, consulte Criar regras de firewall da VPC.

Funções exigidas

Para ter as permissões necessárias para criar e gerenciar instâncias que usam uma conta de serviço, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto:

Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Também é possível conseguir as permissões necessárias usando papéis personalizados ou outros papéis predefinidos.

Preparar o ambiente do Compute Engine

Para permitir que a fábrica de hosts do Symphony crie e gerencie VMs, você precisa configurar vários recursos do Google Cloud :

  • Modelo de instância: um projeto que define a configuração das VMs de computação do Symphony criadas pela fábrica de hosts.

  • Grupo gerenciado de instâncias (MIG): um grupo de VMs idênticas criadas usando um modelo de instância. A fábrica de hosts aumenta ou diminui esse grupo adicionando ou removendo VMs com base na demanda de carga de trabalho.

  • Tópico e assinatura do Pub/Sub: um serviço de mensagens que notifica o provedor do Symphony sobre eventos do ciclo de vida da VM, como remoções ou exclusões. Esse serviço permite que o provedor mantenha um estado preciso do cluster.

Criar um modelo de instância

Crie um modelo de instância para os hosts de computação do Symphony usando o comando gcloud compute instance-templates create. Esse modelo define as propriedades das VMs que ele cria. Essas VMs precisam ter o Symphony instalado. É possível usar uma imagem com o Symphony pré-instalado ou usar um script de inicialização para instalar o Symphony depois de criar as VMs. Para informações sobre como instalar o Symphony em uma VM de host de computação, consulte Instalar em um host de computação Linux na documentação da IBM.

  gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --machine-type=MACHINE_TYPE \
    --network-interface=nic-type=GVNIC,stack-type=IPV4_ONLY,subnet=SUBNET_NAME,no-address \
    --instance-template-region=REGION \
    --service-account=SERVICE_ACCOUNT_EMAIL \
    --scopes=https://www.googleapis.com/auth/devstorage.read_only,https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring.write,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/trace.append \
    --tags=NETWORK_TAGS \
    --create-disk=auto-delete=yes,boot=yes,device-name=INSTANCE_TEMPLATE_NAME,image-family=rocky-linux-9,image-project=rocky-linux-cloud,mode=rw,size=20,type=pd-balanced \
    --shielded-secure-boot \
    --shielded-vtpm \
    --shielded-integrity-monitoring

Substitua:

  • INSTANCE_TEMPLATE_NAME: um nome para o novo modelo de instância.
  • MACHINE_TYPE: o tipo de máquina das instâncias de computação. Para mais informações, consulte Criar uma VM com um tipo de máquina personalizado.
  • SUBNET_NAME: o nome da sub-rede das suas instâncias. Para mais informações, consulte Ver a configuração de rede de uma instância.
  • SERVICE_ACCOUNT_EMAIL: o e-mail da conta de serviço que você configurou na seção Antes de começar. Verifique se essa conta de serviço tem os papéis especificados na seção Papéis necessários.
  • REGION: a Google Cloud região em que você quer criar seus recursos.
  • NETWORK_TAGS: uma tag de rede a ser aplicada às instâncias, que pode ser usada para regras de firewall, por exemplo, symphony-compute.

Criar um grupo gerenciado de instâncias

Crie um grupo gerenciado de instâncias (MIG) usando o modelo de instância da etapa anterior. O provedor de fábrica de host escalona esse grupo adicionando ou removendo instâncias com base na demanda de carga de trabalho.

gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
    --project=PROJECT_ID \
    --base-instance-name=INSTANCE_GROUP_NAME \
    --template=projects/PROJECT_ID/regions/REGION/instanceTemplates/INSTANCE_TEMPLATE_NAME \
    --size=0 \
    --zone=ZONE
    --default-action-on-vm-failure=repair \
    --no-force-update-on-repair \
    --standby-policy-mode=manual \
    --list-managed-instances-results=pageless

Substitua:

  • INSTANCE_GROUP_NAME: o nome escolhido para o grupo gerenciado de instâncias.
  • PROJECT_ID: o ID do seu projeto do Google Cloud. Para mais informações, consulte Encontrar o nome, o número e o ID do projeto.
  • INSTANCE_TEMPLATE_NAME: o nome do modelo de instância que você criou na etapa anterior.
  • REGION: a região em que seus recursos estão localizados, como us-east.
  • ZONE: a zona na região selecionada, como a.

Para mais informações sobre como criar MIGs, consulte Criar um MIG em uma única zona.

Configurar o Pub/Sub

Para permitir que o provedor do Symphony receba notificações sobre eventos do ciclo de vida da VM, configure um tópico e uma assinatura do Pub/Sub:

  1. No host principal do Symphony, defina as seguintes variáveis de ambiente:

    export GCP_PROJECT=PROJECT_ID
    export PUBSUB_TOPIC=PUBSUB_TOPIC
    

    Substitua:

    • PROJECT_ID: o ID do seu projeto do Google Cloud .
    • PUBSUB_TOPIC: um nome para o tópicoGoogle Cloud , como hf-gce-vm-events.
  2. Crie um tópico do Pub/Sub:

    gcloud pubsub topics create $PUBSUB_TOPIC
    
  3. Use o comando gcloud logging sinks create para criar um coletor de geração de registros e exportar registros de auditoria para o Pub/Sub:

    gcloud logging sinks create ${PUBSUB_TOPIC}-sink \
        pubsub.googleapis.com/projects/${GCP_PROJECT}/topics/${PUBSUB_TOPIC} \
        --log-filter="
        logName=\"projects/${GCP_PROJECT}/logs/cloudaudit.googleapis.com%2Factivity\"
        resource.type=(\"gce_instance_group_manager\" OR \"gce_instance\")
        protoPayload.methodName=(
            \"v1.compute.instanceGroupManagers.createInstances\"
            OR
            \"v1.compute.instanceGroupManagers.deleteInstances\"
            OR
            \"v1.compute.instances.insert\"
            OR
            \"v1.compute.instances.delete\"
        )
        " \
        --description="Exports MIG VM create/delete audit logs to Pub/Sub"
    

    A saída desse comando inclui uma conta de serviço que você vai usar na próxima etapa.

  4. Conceda o papel Editor do Pub/Sub (roles/pubsub.publisher) à conta de serviço da etapa anterior:

    gcloud pubsub topics add-iam-policy-binding $PUBSUB_TOPIC \
        --member="serviceAccount:LOGGING_SINK_SERVICE_ACCOUNT" \
        --role="roles/pubsub.publisher"
    

    Substitua LOGGING_SINK_SERVICE_ACCOUNT pelo nome da conta de serviço na saída da criação do coletor de registros.

  5. Crie uma assinatura para receber os registros:

    gcloud pubsub subscriptions create ${PUBSUB_TOPIC}-sub \
        --topic=${PUBSUB_TOPIC}
    
  6. Verifique se a conta de serviço tem as permissões corretas para assinar a assinatura:

    gcloud pubsub subscriptions add-iam-policy-binding ${PUBSUB_TOPIC}-sub \
        --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \
        --role="roles/pubsub.subscriber"
    

    Substitua SERVICE_ACCOUNT_EMAIL pelo e-mail da conta de serviço que gerencia seu grupo de instâncias. Essa é a mesma conta de serviço que você configurou na seção Antes de começar.

A configuração do Pub/Sub foi concluída. Para mais informações sobre como configurar o Pub/Sub, consulte Publicar e receber mensagens no Pub/Sub usando a Google Cloud CLI.

Carregar as variáveis de ambiente de fábrica de host

Antes de configurar ou gerenciar os serviços de fábrica de host, carregue as variáveis de ambiente do Symphony na sessão do shell. Na VM do host principal do Symphony, execute o seguinte comando:

source INSTALL_FOLDER/profile.platform

Substitua INSTALL_FOLDER pelo caminho da pasta de instalação. O caminho padrão da pasta de instalação do Symphony é /opt/ibm/spectrumcomputing. Se você instalou o Symphony em um local diferente, use o caminho correto para seu ambiente.

Esse comando executa o script profile.platform, que exporta variáveis de ambiente essenciais, como $EGO_TOP e $HF_TOP, e adiciona as ferramentas de linha de comando do Symphony ao PATH do shell. Execute esse comando para cada nova sessão de terminal e garantir que o ambiente esteja configurado corretamente.

Instalar o plug-in do provedor

Para integrar o provedor do Compute Engine ao serviço de fábrica de hosts do Symphony, instale o plug-in de provedor pré-criado do pacote RPM ou crie o provedor com base no código-fonte.

Instalar o plug-in do provedor pré-criado

Para instalar o plug-in do provedor usando pacotes RPM, siga estas etapas no host principal do Symphony:

  1. Adicione o repositório yum para os Google Cloud Symphony Connectors:

    sudo tee /etc/yum.repos.d/google-cloud-symphony-connector.repo << EOM
    [google-cloud-symphony-connector] name=Google Cloud Symphony Connector
    baseurl=https://packages.cloud.google.com/yum/repos/google-cloud-symphony-connector-x86-64
    enabled=1
    gpgcheck=0
    repo_gpgcheck=0
    gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
           https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
    EOM
    
  2. Instale o pacote do provedor para o Compute Engine:

    sudo yum install -y hf-gcpgce-provider.x86_64
    

O pacote RPM instala os executáveis e scripts do provedor nos diretórios corretos para o serviço de fábrica do host do Symphony. Após a instalação, a estrutura de diretório aparece da seguinte maneira:

├── bin
│   └── hf-gce
└── scripts
    ├── getAvailableTemplates.sh
    ├── getRequestStatus.sh
    ├── getReturnRequests.sh
    ├── requestMachines.sh
    └── requestReturnMachines.sh

Criar o provedor usando o código-fonte

Para criar e instalar o executável da CLI no diretório bin do diretório de plug-ins do provedor, siga estas etapas:

  1. Clone o repositório symphony-gcp-connector do GitHub:

    git clone https://github.com/GoogleCloudPlatform/symphony-gcp-connector.git
    
  2. Navegue até o diretório hf-provider no projeto:

    cd PROJECT_ROOT/hf-provider
    

    Substitua PROJECT_ROOT pelo caminho para o diretório de nível superior que contém o diretório hf-provider, como /home/user/symphony-gcp-connector.

  3. Se você não tiver o uv instalado, faça isso:

    pip install uv
    
  4. Crie um ambiente virtual em Python usando uv:

    uv venv
    
  5. Ative o ambiente virtual:

    source .venv/bin/activate
    
  6. Instale as dependências do projeto necessárias:

    uv pip install .
    
  7. Instale o PyInstaller, que agrupa o aplicativo Python em um executável independente:

    uv pip install pyinstaller
    
  8. Crie a CLI hf-gce para clusters do Compute Engine:

    uv run pyinstaller hf-gce.spec --clean
    
  9. Para verificar a instalação, execute o comando --help em um executável. Se você não definir as variáveis de ambiente necessárias, um erro poderá aparecer.

    dist/hf-gce --help
    
  10. Copie o executável para o diretório bin do plug-in do provedor:

    mkdir -p ${HF_TOP}/${HF_VERSION}/providerplugins/gcpgce/bin
    cp dist/hf-gce ${HF_TOP}/${HF_VERSION}/providerplugins/gcpgce/bin/
    
  11. Copie os scripts para o diretório scripts do plug-in do provedor:

    cp -R ./resources/gce_cli/1.2/providerplugins/gcpgce/scripts ${HF_TOP}/${HF_VERSION}/providerplugins/gcpgce/
    

    O SO precisa ser compatível com a versão do Python usada para criar os executáveis. Os executáveis foram testados com o Python 3.9.6.

Após a instalação, a estrutura de diretórios do plug-in do provedor é semelhante a este exemplo:

├── bin
│   └── hf-gce
└── scripts
    ├── getAvailableTemplates.sh
    ├── getRequestStatus.sh
    ├── getReturnRequests.sh
    ├── requestMachines.sh
    └── requestReturnMachines.sh

Ativar o plug-in do provedor

Para ativar o plug-in do provedor do Compute Engine, registre-o na configuração da fábrica de hosts:

  1. Abra o arquivo $HF_TOP/conf/providerplugins/hostProviderPlugins.json.

    A variável de ambiente $HF_TOP é definida no seu ambiente quando você usa o comando source. O valor é o caminho para o diretório de instalação de nível superior do serviço de fábrica de hosts do IBM Spectrum Symphony.

  2. Adicione uma seção de plug-in do provedor gcpgce:

    {
        "name": "gcpgce",
        "enabled": 1,
        "scriptPath": "${HF_TOP}/${HF_VERSION}/providerplugins/gcpgce/scripts/"
    }
    

    Se você estiver usando a versão 1.2 do plug-in do provedor com o valor padrão de $HF_TOP, o valor scriptPath resultante será: INSTALL_FOLDER/hostfactory/1.2/providerplugins/gcpgce/scripts/.

Configurar uma instância de provedor

Para configurar o provedor do Compute Engine no seu ambiente, crie uma instância de provedor.

  1. Configure o diretório para a instância do provedor:

    • Se você criou o provedor com base no código-fonte, crie o diretório e os arquivos de configuração manualmente:

      mkdir -p $HF_TOP/conf/providers/gcpgceinst/
      
    • Se você instalou com RPM, esse diretório já existe e contém arquivos de configuração de exemplo. Copie os arquivos de exemplo para criar sua configuração:

      cp $HF_TOP/conf/providers/gcpgceinst/gcpgceinstprov_config.json.dist $HF_TOP/conf/providers/gcpgceinst/gcpgceinstprov_config.json
      cp $HF_TOP/conf/providers/gcpgceinst/gcpgceinstprov_templates.json.dist $HF_TOP/conf/providers/gcpgceinst/gcpgceinstprov_templates.json
      
  2. No diretório $HF_TOP/conf/providers/gcpgceinst/, crie ou edite um arquivo gcpgceinstprov_config.json. Esse arquivo contém a configuração principal do provedor. O provedor é compatível com as seguintes variáveis de configuração. Você precisa especificar variáveis que não têm um valor padrão nessa configuração.

    Nome da variável Descrição Valor padrão
    HF_DBDIR O local onde esse provedor armazena o banco de dados de estado. Definido no ambiente HostFactory como $HF_DBDIR.
    HF_TEMPLATES_FILENAME O nome do arquivo de modelos. gcpgceinstprov_templates.json
    GCP_CREDENTIALS_FILE O local do arquivo de credenciais da conta de serviço Google Cloud . O aplicativo usa as credenciais padrão se você não especificar esse valor.
    GCP_PROJECT_ID O ID do projeto Google Cloud . Nenhum
    GCP_INSTANCE_PREFIX Uma string a ser adicionada a todos os hosts criados por este provedor. sym-
    LOGFILE O local do arquivo de registro para onde o provedor envia os registros. Um arquivo com um nome gerado, localizado no diretório definido pela variável de ambiente HostFactory HF_PROVIDER_LOGDIR.
    LOG_LEVEL O nível de registro do Python WARNING
    PUBSUB_TIMEOUT Se o evento mais recente do Pub/Sub for mais antigo que essa duração, em segundos, o listener do Pub/Sub será desconectado. Esse tempo limite só se aplica quando o listener de eventos do Pub/Sub é iniciado automaticamente. Caso contrário, o listener será executado indefinidamente, e o administrador precisará controlar o ciclo de vida. 600
    PUBSUB_TOPIC O nome do tópico do Pub/Sub. Essa variável é apenas para compatibilidade com versões anteriores. hf-gce-vm-events
    PUBSUB_SUBSCRIPTION O nome da assinatura do Pub/Sub para monitorar eventos da VM. hf-gce-vm-events-sub
    PUBSUB_LOCKFILE O nome do arquivo que indica se o listener de eventos do Pub/Sub está ativo. /tmp/sym_hf_gcp_pubsub.lock
    PUBSUB_AUTOLAUNCH Se definido como true, o provedor tentará iniciar automaticamente o listener de eventos do Pub/Sub. Se false, inicie o listener de eventos do Pub/Sub usando o método de sua escolha com o comando hf-gce monitorEvents. true

    O exemplo a seguir mostra uma configuração básica:

    {
        "GCP_PROJECT_ID": "PROJECT_ID",
        "LOG_LEVEL":"INFO",
        "PUBSUB_SUBSCRIPTION": "PUBSUB_SUBSCRIPTION",
        "PUBSUB_TIMEOUT": 100
    }
    

    Substitua:

    • PROJECT_ID: o ID do seu projeto do Google Cloud .
    • PUBSUB_SUBSCRIPTION: o nome da assinatura do Pub/Sub que você criou para monitorar eventos da VM. Para mais informações, consulte Configurar o Pub/Sub.
  3. No mesmo diretório, crie ou edite um arquivo gcpgceinstprov_templates.json. Esse arquivo define os modelos para as VMs que o provedor pode criar. Os atributos no modelo precisam estar alinhados com a configuração do grupo de instâncias de suporte.

    • Se você instalou com RPM, use o arquivo gcpgceinstprov_templates.json que você criou nas etapas anteriores como ponto de partida.
    • Se você compilou a partir da origem, use o modelo de exemplo a seguir:

      {
          "templates": [
              {
                  "templateId": "template-gcp-01",
                  "maxNumber": 10,
                  "attributes": {
                      "type": [ "String", "X86_64" ],
                      "ncpus": [ "Numeric", "1" ],
                      "nram": [ "Numeric", "1024" ]
                  },
                  "gcp_zone": "GCP_ZONE",
                  "gcp_instance_group": "INSTANCE_GROUP_NAME"
              }
          ]
      }
      

      Substitua:

      • GCP_ZONE: a zona Google Cloud em que o grupo de instâncias está localizado, como us-central1-a.
      • INSTANCE_GROUP_NAME: o nome do grupo de instâncias que o provedor gerencia, como symphony-compute-ig.
  4. Depois de criar esses arquivos, verifique se o diretório da instância do provedor é semelhante a este exemplo:

    ├── gcpgceinstprov_config.json
    └── gcpgceinstprov_templates.json
    

Ativar a instância do provedor

Para ativar a instância do provedor, habilite-a no arquivo de configuração da fábrica de hosts:

  1. Abra o arquivo $HF_TOP/conf/providers/hostProviders.json.

  2. Adicione uma seção de instância do provedor gcpgceinst:

    {
        "name": "gcpgceinst",
        "enabled": 1,
        "plugin": "gcpgce",
        "confPath": "${HF_CONFDIR}/providers/gcpgceinst/",
        "workPath": "${HF_WORKDIR}/providers/gcpgceinst/",
        "logPath": "${HF_LOGDIR}/"
    }
    

    Ao configurar sua sessão do shell usando o source command, esse script define essas variáveis para apontar para os subdiretórios corretos na instalação do Symphony. O serviço de fábrica de host usa essas variáveis para construir os caminhos completos em tempo de execução.

Ativar a instância do solicitante

Para permitir que um componente específico do Symphony use o provedor do Compute Engine para provisionar recursos, ative-o para esse solicitante.

  1. Abra o arquivo $HF_TOP/conf/requestors/hostRequestors.json.

  2. Na instância do solicitante apropriada, adicione gcpgceinst ao parâmetro providers:

    "providers": ["gcpgceinst"],
    

    O valor do provedor precisa corresponder ao nome usado em Ativar a instância do provedor.

Iniciar o serviço de fábrica de hosts

Para aplicar as mudanças de configuração, inicie o serviço de fábrica de hosts. Na VM do host principal do Symphony, faça login como administrador do cluster e inicie o serviço:

sed -i -e "s|MANUAL|AUTOMATIC|g" $EGO_ESRVDIR/esc/conf/services/hostfactory.xml
egosh user logon -u "SYMPHONY_USERNAME -x "SYMPHONY_PASSWORD
egosh service start HostFactory

Substitua:

  • SYMPHONY_USERNAME: o nome de usuário do Symphony para autenticação.
  • SYMPHONY_PASSWORD: a senha do usuário do Symphony.

Testar conectores

Crie uma solicitação de recurso para testar o provedor do Compute Engine.

Para fazer isso, use um dos seguintes métodos:

  • GUI do Symphony: para instruções sobre como criar uma solicitação de recurso usando a GUI do Symphony, consulte Como programar manualmente solicitações e devoluções de host na nuvem na documentação da IBM.

  • API REST: para criar uma solicitação de recurso usando a API REST, siga estas etapas:

    1. Encontre o host e a porta da API REST da fábrica de hosts:

      egosh client view REST_HOST_FACTORY_URL
      

      A saída é semelhante a este exemplo:

      CLIENT NAME: REST_HOST_FACTORY_URL
      DESCRIPTION: http://sym2.us-central1-c.c.symphonygcp.internal:9080/platform/rest/hostfactory/
      TTL        : 0
      LOCATION   : 40531@10.0.0.33
      USER       : Admin
      
      CHANNEL INFORMATION:
      CHANNEL             STATE
      9                   CONNECTED
      
    2. Para criar uma solicitação de recurso usando a API REST, use o comando a seguir:

      HOST=PRIMARY_HOST
      PORT=PORT
      TEMPLATE_NAME=INSTANCE_TEMPLATE_NAME
      PROVIDER_NAME=gcpgceinst
      
      curl -X POST -u "SYMPHONY_USER:SYMPHONY_PASSWORD" -H "Content-Type: application/json" -d "{ \"demand_hosts\": [ { \"prov_name\": \"$PROVIDER_NAME\", \"template_name\": \"$TEMPLATE_NAME\", \"ninstances\": 1 } ] }" \
      http://$HOST:$PORT/platform/rest/hostfactory/requestor/admin/request
      

      Substitua:

      • PRIMARY_HOST: o nome do host principal da saída do comando anterior.
      • PORT: o número da porta do seu host principal na saída do comando anterior, como 9080.
      • SYMPHONY_TEMPLATE_ID: o templateId definido no arquivo gcpgceinstprov_templates.json, como template-gcp-01.
      • SYMPHONY_USER: o usuário do Symphony para autenticação.
      • SYMPHONY_PASSWORD: a senha do usuário do Symphony.

      Se a operação for bem-sucedida, a saída será semelhante a este exemplo:

      {"scheduled_request_id":["SD-641ef442-1f9e-40ae-ae16-90e152ed60d2"]}
      

A seguir