如果 Automation Assembler 用户需要设计并运行 Terraform 集成但 Internet 连接已断开,则可以按照以下示例设置其运行时环境。

注: 要获取映像创建的源,设置过程涉及短暂连接到 Internet。如果无法建立临时连接,可能需要在断开连接的站点之外执行这些步骤。

此过程假设您具有自己的 Docker 注册表,无需 Internet 连接即可访问其存储库。

创建自定义容器映像

  1. 构建包括 Terraform 提供程序插件二进制文件的自定义容器映像。

    以下 Dockerfile 显示了使用 Terraform GCP 提供程序创建自定义映像的示例。

    Dockerfile 中的基础映像 projects.registry.vmware.com/vra/terraform:latest 下载需要通过 Internet 访问位于 projects.registry.vmware.com 的 VMware Harbor 注册表。

    防火墙设置或代理设置可能会导致映像构建失败。可能需要允许访问 releases.hashicorp.com 以下载 Terraform 提供程序插件二进制文件。但是,可以选择使用专用注册表提供插件二进制文件。

    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. 在断开连接的站点上,构建、标记自定义容器映像并将自定义容器映像推送到您自己的 Docker 存储库。
  3. 在断开连接的站点的 Automation Assembler 中,在基础架构 > 连接 > 集成下,转到您的 Terraform 运行时集成。
  4. 创建或编辑运行时容器设置,以将您的存储库添加到自定义容器映像上。构建的自定义容器映像名称示例为 registry.ourcompany.com/project1/image1:latest
    Terraform 容器映像

在本地托管 Terraform CLI

  1. 下载 Terraform CLI 二进制文件。
  2. 将 Terraform CLI 二进制文件上载到本地 Web 或 FTP 服务器。
  3. Automation Assembler 中,转到基础架构 > 配置 > Terraform 版本
  4. 创建或编辑 Terraform 版本,以使其包含本地服务器上托管的 Terraform CLI 二进制文件的 URL。
  5. 如果本地 Web 或 FTP 服务器需要登录身份验证,请选择基本身份验证,然后输入可以访问服务器的用户名和密码凭据。

    要更改身份验证类型,您必须在 Automation Assembler 中具有云管理员角色。

    Terraform CLI URL

设计和部署 Terraform 配置

运行时准备就绪后,可以将 Terraform 配置文件添加到 git,为其设计云模板并进行部署。

要开始使用,请参见在 Automation Assembler 中准备 Terraform 配置

故障排除

部署时,在 Automation Assembler 中打开部署。在“历史记录”选项卡下,查找 Terraform 事件,然后单击右侧的显示日志。本地 Terraform 提供程序正常运行时,日志中会显示以下消息。

Initializing provider plugins

Terraform has been successfully initialized

要获得更可靠的日志,可以手动编辑云模板代码以添加 TF_LOG: DEBUG,如以下示例所示。

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

创建您自己的基础映像

尽管 VMware 偶尔会更新 projects.registry.vmware.com/vra/terraform:latest 上的基础映像,但该映像可能已过期并包含漏洞。

要构建您自己的基础映像,请改用以下 Dockerfile。

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