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 中添加

仅当没有资源被销毁时才应用。请注意,这只会阻止“destroy”操作,而不会阻止“destroy and re-create”操作。当 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/等的 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

complex

所有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)