community.general.terraform 模块 – 管理 Terraform 部署(和计划)

注意

此模块是 community.general 集合(版本 10.1.0)的一部分。

如果您正在使用 ansible 包,则您可能已经安装了此集合。它不包含在 ansible-core 中。要检查它是否已安装,请运行 ansible-galaxy collection list

要安装它,请使用:ansible-galaxy collection install community.general。您需要其他要求才能使用此模块,有关详细信息,请参见 要求

要在 playbook 中使用它,请指定:community.general.terraform

概要

  • 提供对使用 Terraform 部署资源并将资源信息拉回 Ansible 的支持。

要求

以下要求是在执行此模块的主机上需要的。

  • terraform

参数

参数

注释

backend_config

字典

在初始化阶段提供给 -backend-config 参数的一组键值对。

backend_config_files

列表 / 元素=路径

在 community.general 0.2.0 中添加

在初始化状态下提供给 -backend-config 参数的配置文件路径。这可以接受指向多个配置文件的路径列表。

binary_path

路径

要使用的 terraform 二进制文件的路径,相对于 'service_path',除非您提供绝对路径。

check_destroy

布尔值

在 community.general 3.3.0 中添加

只有在没有资源被销毁时才应用。请注意,这仅阻止“销毁”操作,而不阻止“销毁并重新创建”操作。当 state=absent 时,此选项将被忽略。

选项

  • false ← (默认)

  • true

complex_vars

布尔值

在 community.general 5.7.0 中添加

启用/禁用处理 terraform 的复杂变量结构的功能。

如果 true,则 variables 也接受字典、列表和布尔值传递给 terraform。传递的字符串将被正确地引用。

禁用时,仅支持简单变量(字符串、整数和浮点数),并将其未加引号地传递。

选项

  • false ← (默认)

  • true

force_init

布尔值

为了避免重复基础设施,如果找不到状态文件,这将强制执行 terraform init。通常,除非您打算配置一个全新的 Terraform 部署,否则应将其关闭。

选项

  • false ← (默认)

  • true

init_reconfigure

布尔值

在 community.general 1.3.0 中添加

强制在初始化期间重新配置后端。

选项

  • false ← (默认)

  • true

lock

布尔值

启用状态文件锁定,如果您使用接受锁定的服务(例如 S3+DynamoDB)来存储您的状态文件。

选项

  • false

  • true ← (默认)

lock_timeout

整数

如果使用接受锁定的服务(例如 S3+DynamoDB),则保持状态文件锁定的时间长度。

overwrite_init

布尔值

在 community.general 3.2.0 中添加

即使 .terraform/terraform.tfstate 已经存在于 project_path 中,也运行 init。

选项

  • false

  • true ← (默认)

parallelism

整数

在 community.general 3.8.0 中添加

限制 Terraform 应用计划时的并发操作。

plan_file

路径

要应用的现有 Terraform 计划文件的路径。如果未指定此路径,Ansible 将构建一个新的 TF 计划并执行它。请注意,如果 'state' 的值为 'planned',则需要此选项。

plugin_paths

列表 / 元素=路径

在 community.general 3.0.0 中添加

包含 Terraform 插件可执行文件的路径列表。

插件可执行文件可以从https://releases.hashicorp.com/下载。

启用此选项后,将禁用 Terraform 的插件发现和自动下载功能。

插件路径中的目录结构可能比较复杂。Terraform 文档https://learn.hashicorp.com/tutorials/terraform/automate-terraform#pre-installed-plugins 显示了一个简单的文件目录,但实际上,目录结构必须与 Terraform 自动下载插件时看到的结构相同。请参见下面的示例,了解示例插件目录的树形输出。

project_path

路径 / 必需

包含 vars.tf/main.tf/etc 的 Terraform 目录根路径。

provider_upgrade

布尔值

在 community.general 4.8.0 中添加

允许 Terraform init 将提供程序升级到项目版本约束中指定的版本。

选项

  • false ← (默认)

  • true

purge_workspace

布尔值

仅当 state = absent 时有效

如果为 true,则在“terraform destroy”操作后将删除工作区。

不会删除“default”工作区。

选项

  • false ← (默认)

  • true

state

字符串

给定阶段/项目的目标状态

选项

  • "planned"

  • "present" ← (默认)

  • "absent"

state_file

路径

构建计划时要使用的现有 Terraform 状态文件路径。如果未指定此路径,则将使用默认的 terraform.tfstate

指定 plan 时,将忽略此选项。

targets

列表 / 元素=字符串

在此计划/应用程序中要定位的特定资源列表。此处选择的资源还将自动包含所有依赖项。

默认值: []

variables

字典

一组键值对,用于覆盖模板变量或变量文件中的变量。默认情况下,只允许字符串和数值,它们将不带引号传递。

complex_vars=true 时,支持复杂的变量结构(列表、字典、数字和布尔值)以反映 terraform 变量语法。

Ansible 整数或浮点数映射到 terraform 数字。

Ansible 字符串映射到 terraform 字符串。

Ansible 字典映射到 terraform 对象。

Ansible 列表映射到 terraform 列表。

Ansible 布尔值映射到 terraform 布尔值。

注意 作为变量传递的密码将显示在日志输出中。请确保在生产环境中使用 no_log=true

variables_files

别名:variables_file

列表 / 元素=路径

Terraform 用于填充 TF 配置的变量文件路径。这可以接受多个变量文件的路径列表。

workspace

字符串

要使用的 terraform 工作区。这将设置 TF_WORKSPACE 环境变量,用于覆盖工作区选择。有关工作区的更多信息,请查看 https://developer.hashicorp.com/terraform/language/state/workspaces

默认值: "default"

属性

属性

支持

描述

check_mode

支持:完全支持

可以在 check_mode 中运行,并在不修改目标的情况下返回更改状态预测。

diff_mode

支持:完全支持

在 community.general 8.3.0 中添加

在差异模式下,将返回有关已更改内容(或可能需要在 check_mode 中更改的内容)的详细信息。

备注

注意

  • 要仅运行 terraform plan,请使用检查模式。

示例

- name: Basic deploy of a service
  community.general.terraform:
    project_path: '{{ project_dir }}'
    state: present

- name: Define the backend configuration at init
  community.general.terraform:
    project_path: 'project/'
    state: "{{ state }}"
    force_init: true
    backend_config:
      region: "eu-west-1"
      bucket: "some-bucket"
      key: "random.tfstate"

- name: Define the backend configuration with one or more files at init
  community.general.terraform:
    project_path: 'project/'
    state: "{{ state }}"
    force_init: true
    backend_config_files:
      - /path/to/backend_config_file_1
      - /path/to/backend_config_file_2

- name: Disable plugin discovery and auto-download by setting plugin_paths
  community.general.terraform:
    project_path: 'project/'
    state: "{{ state }}"
    force_init: true
    plugin_paths:
      - /path/to/plugins_dir_1
      - /path/to/plugins_dir_2

- name: Complex variables example
  community.general.terraform:
    project_path: '{{ project_dir }}'
    state: present
    complex_vars: true
    variables:
      vm_name: "{{ inventory_hostname }}"
      vm_vcpus: 2
      vm_mem: 2048
      vm_additional_disks:
        - label: "Third Disk"
          size: 40
          thin_provisioned: true
          unit_number: 2
        - label: "Fourth Disk"
          size: 22
          thin_provisioned: true
          unit_number: 3
    force_init: true

### Example directory structure for plugin_paths example
# $ tree /path/to/plugins_dir_1
# /path/to/plugins_dir_1/
# └── registry.terraform.io
#     └── hashicorp
#         └── vsphere
#             ├── 1.24.0
#             │   └── linux_amd64
#             │       └── terraform-provider-vsphere_v1.24.0_x4
#             └── 1.26.0
#                 └── linux_amd64
#                     └── terraform-provider-vsphere_v1.26.0_x4

返回值

常见的返回值已在此处记录,以下是此模块特有的字段

描述

command

字符串

此模块构建的完整 terraform 命令,如果您想在模块外部重新运行命令或调试问题,可以使用。

返回:始终

示例: "terraform apply ..."

outputs

复杂

所有 TF 输出及其指定名称的字典。使用 outputs.MyOutputName.value 访问值。

返回:成功时

示例: "{\"bukkit_arn\": {\"sensitive\": false, \"type\": \"string\", \"value\": \"arn:aws:s3:::tf-test-bukkit\"}"

sensitive

布尔值

Terraform 是否已将此值标记为敏感值

返回:始终

type

字符串

值的类型(字符串、整数等)

返回:始终

value

字符串

由 Terraform 解释的输出值

返回:始终

stdout

字符串

完整的 terraform 命令标准输出,如果您想显示它或检查事件日志,可以使用。

返回:始终

示例: ""

作者

  • Ryan Scott Brown (@ryansb)