Gli utenti di Cloud Assembly che devono progettare ed eseguire integrazioni di Terraform mentre sono disconnessi da Internet possono configurare il proprio ambiente di runtime seguendo questo esempio.

Nota: Per ottenere un'origine per la creazione dell'immagine, la configurazione richiede una breve connessione a Internet. Se non è possibile connettersi temporaneamente a Internet, potrebbe essere necessario eseguire questi passaggi al di fuori del sito disconnesso.

Questo processo presuppone che l'utente disponga del proprio registro Docker e possa accedere ai repository senza connessione Internet.

Creazione dell'immagine del contenitore personalizzata

  1. Creare un'immagine del contenitore personalizzata che includa i file binari dei plug-in del provider Terraform.

    Il Dockerfile seguente illustra un esempio di creazione di un'immagine personalizzata con il provider GCP di Terraform.

    Il download dell'immagine di base projects.registry.vmware.com/vra/terraform:latest nel Dockerfile richiede l'accesso a Internet per poter raggiungere il registro VMware Harbor in projects.registry.vmware.com.

    Le impostazioni del firewall o le impostazioni del proxy possono causare errori nella creazione dell'immagine. Potrebbe essere necessario abilitare l'accesso a releases.hashicorp.com per scaricare i file binari dei plug-in del provider Terraform. Tuttavia, è possibile utilizzare il proprio registro privato per fornire i file binari dei plug-in come opzione.

    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. Creare, contrassegnare ed eseguire il push dell'immagine del contenitore personalizzata nel repository Docker nel sito disconnesso.
  3. In Cloud Assembly, nel sito disconnesso, in Infrastruttura > Connessioni > Integrazioni, passare all'integrazione del runtime Terraform.
  4. Creare o modificare le impostazioni del contenitore di runtime per aggiungere il repository per l'immagine del contenitore personalizzata. Il nome dell'immagine del contenitore personalizzata di esempio è registry.ourcompany.com/project1/image1:latest.
    Immagine del contenitore Terraform

Hosting locale della CLI di Terraform

  1. Scaricare i file binari della CLI di Terraform.
  2. Caricare i file binari della CLI di Terraform nel server FTP o Web locale.
  3. In Cloud Assembly, passare a Infrastruttura > Configura > Versioni Terraform.
  4. Creare o modificare la versione di Terraform in modo che includa l'URL dei file binari della CLI di Terraform ospitati nel server locale.
  5. Se il server FTP o Web locale richiede l'autenticazione di accesso, selezionare Autenticazione di base e immettere il nome utente e la password che possono accedere al server.

    Per modificare il tipo di autenticazione, è necessario disporre del ruolo di amministratore del cloud in Cloud Assembly.

    URL della CLI Terraform

Progettazione e distribuzione delle configurazioni di Terraform

Con il runtime in esecuzione, è possibile aggiungere file di configurazione di Terraform a git, progettare modelli cloud per tali file ed eseguire la distribuzione.

Per iniziare, vedere Preparazione delle configurazioni Terraform in Cloud Assembly.

Risoluzione dei problemi

Durante la distribuzione, aprire la distribuzione in Cloud Assembly. Nella scheda Cronologia, cercare gli eventi di Terraform e fare clic su Mostra registri a destra. Quando il provider Terraform locale funziona, nel registro vengono visualizzati i seguenti messaggi.

Initializing provider plugins

Terraform has been successfully initialized

Per un registro più affidabile, è possibile modificare manualmente il codice del modello cloud per aggiungere TF_LOG: DEBUG come illustrato nell'esempio seguente.

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

Creazione della propria immagine di base

Nonostante VMware aggiorni l'immagine di base in projects.registry.vmware.com/vra/terraform:latest, tale immagine potrebbe essere obsoleta e contenere vulnerabilità.

Per creare la propria immagine di base, utilizzare invece il Dockerfile seguente.

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