跳至主要内容

环境变量

OpenTofu 使用一些环境变量来自定义其行为的各个方面。使用 OpenTofu 时,这些环境变量都不是必需的,但它们可用于在特殊情况下更改 OpenTofu 的某些默认行为,或增加输出详细程度以进行调试。

TF_LOG

启用详细日志显示在 stderr 上,这对于调试很有用。例如

代码块
export TF_LOG=trace

要禁用,请取消设置它,或将其设置为 off。例如

代码块
export TF_LOG=off

有关 OpenTofu 调试的更多信息,请查看关于 调试 的部分。

TF_LOG_PATH

这指定了日志应将其输出持久化到的位置。请注意,即使设置了 TF_LOG_PATH,也必须设置 TF_LOG 才能启用任何日志记录。例如,要始终将日志写入当前运行 tofu 的目录

代码块
export TF_LOG_PATH=./terraform.log

有关 OpenTofu 调试的更多信息,请查看关于 调试 的部分。

TF_INPUT

如果设置为“false”或“0”,则会导致 tofu 命令的行为与指定了 -input=false 标志一样。当您想要禁用对未指定值的变量的提示时,可以使用此选项。例如

代码块
export TF_INPUT=0

TF_VAR_name

环境变量可用于设置变量。环境变量必须采用 TF_VAR_name 格式,并且这将是最后检查值的地方。例如

代码块
export TF_VAR_region=us-west-1
export TF_VAR_ami=ami-049d8641
export TF_VAR_alist='[1,2,3]'
export TF_VAR_amap='{ foo = "bar", baz = "qux" }'

有关如何在上下文中使用 TF_VAR_name 的更多信息,请查看关于 变量配置 的部分。

TF_CLI_ARGS 和 TF_CLI_ARGS_name

TF_CLI_ARGS 的值将指定命令行的其他参数。这允许在 CI 环境中更轻松地进行自动化,以及修改您自己系统上 OpenTofu 的默认行为。

这些参数直接插入子命令(例如 plan之后,以及在命令行上直接指定的任何标志之前。此行为确保命令行上的标志优先于环境变量。

例如,以下命令:TF_CLI_ARGS="-input=false" tofu apply -force 等效于手动键入:tofu apply -input=false -force

标志 TF_CLI_ARGS 影响所有 OpenTofu 命令。如果您以 TF_CLI_ARGS_name 的形式指定命名命令,则它将仅影响该命令。例如,要指定只有计划永远不会刷新,您可以设置 TF_CLI_ARGS_plan="-refresh=false"

标志的值被解析,就像您直接在 shell 中键入它一样。允许使用双引号和单引号来捕获字符串,否则参数将以空格分隔。

TF_DATA_DIR

TF_DATA_DIR 更改 OpenTofu 保留其每个工作目录数据的位置,例如当前的后端配置。

默认情况下,这些数据写入当前目录的 .terraform 子目录中,但如果 TF_DATA_DIR 中给定的路径非空,则将使用该路径。

在大多数情况下,无需设置此变量,但如果例如工作目录不可写,则可能需要这样做。

数据目录用于保留必须从一个命令持续到下一个命令的数据,因此在所有 OpenTofu 工作流命令(从 tofu init 开始)中始终如一地设置此变量非常重要,否则 OpenTofu 可能无法找到提供程序、模块和其他工件。

TF_WORKSPACE

对于多环境部署,为了选择一个工作区,而不是执行 tofu workspace select your_workspace,可以使用此环境变量。使用 TF_WORKSPACE 允许并覆盖工作区选择。

例如

代码块
export TF_WORKSPACE=your_workspace

仅建议在非交互式使用时使用此环境变量,因为在本地 shell 环境中,很容易忘记设置了该变量并对错误的状态应用更改。

有关工作区的更多信息,请查看关于 使用工作区 的部分。

TF_IN_AUTOMATION

如果 TF_IN_AUTOMATION 设置为任何非空值,则 OpenTofu 会调整其输出以避免建议接下来运行的特定命令。这可以使输出在用户不直接执行 OpenTofu 命令的工作流(如 CI 系统或其他包装应用程序)中更加一致且不那么令人困惑。

这只是对 OpenTofu 的人类可读输出进行的纯美学更改,并且确切的输出差异可能会在 OpenTofu 的次要版本之间发生变化。

TF_REGISTRY_DISCOVERY_RETRY

设置 TF_REGISTRY_DISCOVERY_RETRY 以配置远程注册表客户端将尝试针对客户端连接错误或可以重试的 500 范围响应的最大请求重试次数。

TF_REGISTRY_CLIENT_TIMEOUT

对远程注册表的请求的默认客户端超时时间为 10 秒。在特殊情况下,可以配置和增加 TF_REGISTRY_CLIENT_TIMEOUT

代码块
export TF_REGISTRY_CLIENT_TIMEOUT=15

TF_CLI_CONFIG_FILE

OpenTofu CLI 配置文件 的位置。

代码块
export TF_CLI_CONFIG_FILE="$HOME/.tofurc-custom"

TF_PLUGIN_CACHE_DIR

TF_PLUGIN_CACHE_DIR 环境变量是设置 CLI 配置中 plugin_cache_dir 设置 的另一种方法。

您还可以使用 TF_PLUGIN_CACHE_MAY_BREAK_DEPENDENCY_LOCK_FILE 来激活 过渡兼容性设置 plugin_cache_may_break_dependency_lock_file

TF_IGNORE

如果将TF_IGNORE设置为“trace”,OpenTofu将输出调试消息以显示被忽略的文件和文件夹。这在调试包含.terraformignore文件的较大型代码库时非常有用。

代码块
export TF_IGNORE=trace

TF_PROVIDER_DOWNLOAD_RETRY

设置TF_PROVIDER_DOWNLOAD_RETRY以配置远程提供程序客户端针对客户端连接错误或可以重试的 500 范围响应将尝试的最大请求重试次数。

代码块
export TF_PROVIDER_DOWNLOAD_RETRY=3

有关.terraformignore的更多详细信息,请参阅使用 .terraformignore 排除上传文件

TF_STATE_PERSIST_INTERVAL

设置TF_STATE_PERSIST_INTERVAL以配置状态持久化之间的时间间隔(以秒为单位)。当处理包含大量资源(> 100k)的状态时,增加时间间隔可能很有用,因为上传到云服务可能需要大量时间。默认持久化间隔为 20 秒(这也是此参数的最小可能值)。以下命令将持久化间隔设置为 5 分钟(300 秒)

代码块
export TF_STATE_PERSIST_INTERVAL=300

云后端 CLI 集成

CLI 与云后端的集成允许您在命令行上使用它们。集成需要在您的 OpenTofu 配置中包含一个cloud块。您可以在配置文件中直接定义其参数,或者通过环境变量提供它们,这对于持续集成 (CI) 等非交互式工作流很有用。

有关cloud块环境变量的完整列表,请参阅云后端设置

TF_ENCRYPTION

TF_ENCRYPTION环境变量是指定terraform { encryption {} }块内容的另一种方法。如果提供,它将被解析为 HCL 或 JSON,并覆盖 .tf 配置文件中存在的配置。

代码块
# Add/Override encryption key_provider.static.mykp
export TF_ENCRYPTION='key_provider "static" "mykp" { key = "6f6f706830656f67686f6834616872756f3751756165686565796f6f72653169" }'