Os usuários do Cloud Assembly que precisam projetar e executar integrações do Terraform enquanto estão desconectados da Internet podem configurar seu ambiente de execução seguindo este exemplo.

Observação: Para obter uma origem para a criação da imagem, a configuração envolve uma breve conexão à Internet. Talvez seja necessário realizar essas etapas fora do site desconectado, se uma conexão temporária não for possível.

Esse processo pressupõe que você tenha seu próprio Registro Docker e possa acessar seus repositórios sem uma conexão com a Internet.

Criar a imagem de contêiner personalizada

  1. Crie uma imagem de contêiner personalizada que inclua os binários do plug-in do provedor do Terraform.

    O Dockerfile a seguir mostra um exemplo de criação de uma imagem personalizada com o provedor do Terraform GCP.

    O download da imagem de base projects.registry.vmware.com/vra/terraform:latest no Dockerfile requer acesso à Internet para o registro VMware Harbor em projects.registry.vmware.com.

    Configurações de firewall ou de proxy podem fazer com que a criação da imagem falhe. Pode ser necessário ativar o acesso a releases.hashicorp.com para baixar os binários do plug-in de provedor do Terraform. No entanto, você pode usar seu registro privado para fornecer os binários do plug-in como uma opção.

    FROM projects.registry.vmware.com/vra/terraform:latest as final
     
    # Create provider plug-in directory
    ARG plugins=/tmp/terraform.d/plugin-cache/linux_amd64
    RUN mkdir -m 777 -p $plugins
      
    # Download and unzip all required provider plug-ins from hashicorp to provider directory
    RUN cd $plugins \
        && wget -q https://releases.hashicorp.com/terraform-provider-google/3.58.0/terraform-provider-google_3.58.0_linux_amd64.zip \
        && unzip *.zip \
        && rm *.zip
      
    # For "terraform init" configure terraform CLI to use provider plug-in directory and not download from internet
    ENV TF_CLI_ARGS_init="-plugin-dir=$plugins -get-plugins=false"
  2. Crie, marque e envie a imagem do contêiner personalizado ao seu próprio repositório Docker no seu site desconectado.
  3. No Cloud Assembly no seu site desconectado, em Infraestrutura > Conexões > Integrações, vá para a sua integração do tempo de execução do Terraform.
  4. Crie ou edite as configurações do contêiner de tempo de execução para adicionar seu repositório à imagem de contêiner personalizada. O exemplo de nome de imagem de contêiner personalizada criado é registry.ourcompany.com/project1/image1:latest.
    Imagem de contêiner Terraform

Hospedar a CLI do Terraform localmente

  1. Baixe os binários da CLI do Terraform.
  2. Carregue os binários da CLI do Terraform no seu servidor Web local ou FTP.
  3. No Cloud Assembly, acesse Infraestrutura > Configurar > Versões do Terraform.
  4. Crie ou edite a versão do Terraform para que ela inclua a URL para os binários da CLI do Terraform hospedados no seu servidor local.
  5. Se o seu servidor Web ou FTP local exigir autenticação por login, selecione Autenticação Básica e insira credenciais de nome de usuário e senha que podem acessar o servidor.

    Para alterar o tipo de autenticação, você deve ter a função de administrador de nuvem no Cloud Assembly.

    URL da CLI do Terraform

Projetar e implantar configurações do Terraform

Com o tempo de execução em vigor, você pode adicionar arquivos de configuração do Terraform ao Git, projetar modelos de nuvem para eles e implantar.

Para começar, consulte Preparando para configurações do Terraform no Cloud Assembly.

Solução de problemas

Ao implantar, abra a implantação no Cloud Assembly. Na guia Histórico, procure eventos do Terraform e clique em Mostrar Logs à direita. Quando seu provedor do Terraform local está funcionando, as seguintes mensagens aparecem no log.

Initializing provider plugins

Terraform has been successfully initialized

Para um registro mais robusto, você pode editar manualmente o código do modelo de nuvem para adicionar TF_LOG: DEBUG conforme mostrado no exemplo a seguir.

resources:
  terraform:
    type: Cloud.Terraform.Configuration
    properties:
      providers:
        - name: google
          # List of available cloud zones: gcp/us-west1
          cloudZone: gcp/us-west1
      environment:
        # Configure terraform CLI debug log settings
        TF_LOG: DEBUG
      terraformVersion: 0.12.29
      configurationSource:
        repositoryId: fc569ef7-f013-4489-9673-6909a2791071
        commitId: 3e00279a843a6711f7857929144164ef399c7421
        sourceDirectory: gcp-simple

Criando sua própria imagem de base

Embora a VMware atualize ocasionalmente a imagem de base no projects.registry.vmware.com/vra/terraform:latest, essa imagem pode estar desatualizada e conter vulnerabilidades.

Para criar sua própria imagem de base, use o seguinte Dockerfile.

FROM alpine:latest as final
RUN apk add --no-cache git wget curl openssh