Los usuarios de Cloud Assembly que necesitan diseñar y ejecutar integraciones de Terraform mientras están desconectados de Internet pueden configurar su entorno de tiempo de ejecución siguiendo este ejemplo.

Nota: Para obtener un origen para la creación de imágenes, la instalación implica conectarse brevemente a Internet. Es posible que deba realizar estos pasos fuera del sitio desconectado si no se puede establecer una conexión temporal.

Este proceso da por sentado que usted tiene su propio registro de Docker y puede acceder a sus repositorios sin una conexión a Internet.

Crear la imagen de contenedor personalizada

  1. Cree una imagen de contenedor personalizada que incluya los archivos binarios del complemento del proveedor Terraform.

    El siguiente Dockerfile muestra un ejemplo de creación de una imagen personalizada con el proveedor de GCP de Terraform.

    La descarga de la imagen base de projects.registry.vmware.com/vra/terraform:latest en Dockerfile requiere acceso a Internet para ir al registro de VMware Harbor en projects.registry.vmware.com.

    La configuración del firewall o del proxy puede provocar un error en la compilación de la imagen. Es posible que necesite habilitar el acceso a releases.hashicorp.com para descargar los archivos binarios del complemento del proveedor de Terraform. Sin embargo, puede utilizar el registro privado para proporcionar los archivos binarios del complemento como una opción.

    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. Cree, etiquete e inserte la imagen de contenedor personalizada en su propio repositorio de Docker en su sitio desconectado.
  3. En Cloud Assembly en su sitio desconectado, en Infraestructura > Conexiones > Integraciones, vaya a la integración en tiempo de ejecución de Terraform.
  4. Cree o edite la configuración del contenedor en tiempo de ejecución para agregar el repositorio para la imagen de contenedor personalizada. El nombre de ejemplo de la imagen del contenedor personalizada que se creó es registry.ourcompany.com/project1/image1:latest.
    Imagen de contenedor de Terraform

Alojar la CLI de Terraform localmente

  1. Descargue los archivos binarios de la CLI de Terraform.
  2. Cargue los archivos binarios de la CLI de Terraform en el servidor web local o FTP.
  3. En Cloud Assembly, vaya a Infraestructura > Configurar > Versiones de Terraform.
  4. Cree o edite la versión de Terraform para que incluya la URL de los archivos binarios de la CLI de Terraform alojados en el servidor local.
  5. Si el servidor web local o FTP requieren autenticación de inicio de sesión, seleccione Autenticación básica e introduzca las credenciales de nombre de usuario y contraseña que permiten el acceso a esos servidores.

    Para cambiar el tipo de autenticación, debe tener la función de administrador de nube en Cloud Assembly.

    URL de la CLI de Terraform

Diseñar e implementar configuraciones de Terraform

Con el tiempo de ejecución establecido, puede agregar archivos de configuración de Terraform a Git, diseñar plantillas de nube para ellos e implementarlos.

Para comenzar, consulte Preparar la configuración de Terraform en Cloud Assembly.

Solución de problemas

Para implementar, abra la implementación en Cloud Assembly. En la pestaña Historial, busque eventos de Terraform y haga clic en Mostrar logs a la derecha. Cuando el proveedor de Terraform local está funcionando, aparecen los siguientes mensajes en el log.

Initializing provider plugins

Terraform has been successfully initialized

Para un log más robusto, puede editar manualmente el código de la plantilla de nube para agregar TF_LOG: DEBUG como se muestra en el siguiente ejemplo.

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

Crear su propia imagen base

Aunque VMware actualiza ocasionalmente la imagen base en projects.registry.vmware.com/vra/terraform:latest, esa imagen puede estar desactualizada y contener vulnerabilidades.

Para crear su propia imagen base, utilice el siguiente Dockerfile en su lugar.

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