跳至主要内容

命令:init

tofu init 命令初始化一个包含 OpenTofu 配置文件的的工作目录。这是在编写新的 OpenTofu 配置或从版本控制克隆现有配置后应运行的第一个命令。多次运行此命令是安全的。

用法

用法:tofu init [选项]

此命令执行几个不同的初始化步骤,以便为当前工作目录做好使用 OpenTofu 的准备。下面各节将详细介绍这些步骤,但在大多数情况下,无需担心这些单独的步骤。

此命令始终可以安全地多次运行,以使工作目录与配置更改保持同步。尽管后续运行可能会出现错误,但此命令永远不会删除您现有的配置或状态。

此命令需要为在 模块源后端配置 块中使用的变量赋值。有关更多信息,请参阅 为根模块变量赋值

常规选项

以下选项适用于所有(或几个)初始化步骤

  • -input=true 如果需要,则请求输入。如果为 false,则如果需要输入,则会出错。

  • -lock=false 在与状态相关的操作期间禁用状态文件的锁定。

  • -lock-timeout=<duration> 覆盖 OpenTofu 等待获取状态锁的时间。默认值为 0s(零秒),如果锁已由另一个进程持有,则会导致立即失败。

  • -no-color 在命令输出中禁用颜色代码。

  • -upgrade 选择在各自的安装步骤中升级模块和插件。有关更多详细信息,请参阅以下各节。

  • -json 以机器可读的 JSON 格式生成输出,适用于文本编辑器集成和其他自动化系统。始终禁用颜色。

  • -var 'NAME=VALUE' - 为配置根模块中声明的单个 输入变量 设置值。多次使用此选项以设置多个变量。有关更多信息,请参阅 命令行上的输入变量

  • -var-file=FILENAME - 使用来自 "tfvars" 文件 的定义,为配置根模块中声明的可能多个 输入变量 设置值。多次使用此选项以包含来自多个文件的值。

除了 -var-var-file 选项之外,还有几种其他方法可以为根模块中的输入变量设置值。有关更多信息,请参阅 为根模块变量赋值

复制源模块

默认情况下,tofu init 假设工作目录已包含配置,并将尝试初始化该配置。

可选地,init 可以使用 -from-module=MODULE-SOURCE 选项针对空目录运行,在这种情况下,给定的模块将在运行任何其他初始化步骤之前复制到目标目录中。

此特殊的操作模式支持两种用例

  • 给定一个版本控制源,它可以作为从版本控制检出配置然后为其初始化工作目录的简写。

  • 如果源引用的是一个示例配置,则可以将其复制到本地目录中,用作新配置的基础。

对于常规使用,建议使用版本控制系统自己的命令单独从版本控制检出配置。这样,在必要时可以将额外的标志传递给版本控制系统,并在运行 tofu init 之前执行其他准备步骤(例如配置生成或激活凭据)。

后端初始化

在初始化过程中,会参考根配置目录中的后端配置,并使用给定的配置设置初始化选定的后端。

使用已初始化的后端重新运行初始化将更新工作目录以使用新的后端设置。必须提供-reconfigure-migrate-state来更新后端配置。

-migrate-state选项将尝试将现有状态复制到新的后端,并且根据更改的内容,可能会导致交互式提示以确认工作区状态的迁移。-force-copy选项将抑制这些提示,并对迁移问题回答“是”。启用-force-copy也会自动启用-migrate-state选项。

-reconfigure选项会忽略任何现有配置,防止任何现有状态的迁移。

要跳过后端配置,请使用-backend=false。请注意,某些其他初始化步骤需要初始化的后端,因此建议仅在工作目录之前已为特定后端初始化时使用此标志。

-backend-config=...选项可用于部分后端配置,在后端设置是动态的或敏感的并且不能在配置文件中静态指定的情况下。

子模块安装

在初始化过程中,配置会搜索module块,并从其source参数中给定的位置检索引用模块的源代码。

使用已安装的模块重新运行初始化将安装自上次初始化以来添加到配置中的任何模块的源代码,但不会更改任何已安装的模块。使用-upgrade覆盖此行为,将所有模块更新到最新的可用源代码。

要跳过子模块安装,请使用-get=false。请注意,某些其他初始化步骤只有在模块树完整时才能完成,因此建议仅在工作目录之前已与其子模块一起初始化时使用此标志。

插件安装

大多数OpenTofu提供程序作为插件单独发布,而不是作为OpenTofu的一部分。在初始化过程中,OpenTofu会在配置中搜索对提供程序的直接和间接引用,并尝试安装这些提供程序的插件。

对于在公共OpenTofu注册表或第三方提供程序注册表中发布的提供程序,tofu init将自动查找、下载并安装必要的提供程序插件。如果您无法或不想从其原始注册表安装提供程序,您可以使用CLI配置中的提供程序安装设置自定义OpenTofu如何安装提供程序。

有关为每个模块指定哪些提供程序是必需的更多信息,请参阅提供程序需求

成功安装后,OpenTofu会将有关所选提供程序的信息写入依赖项锁定文件。您应该将此文件提交到您的版本控制系统,以确保当您将来再次运行tofu init时,OpenTofu将选择完全相同的提供程序版本。如果您希望OpenTofu忽略依赖项锁定文件并考虑安装更新的版本,请使用-upgrade选项。

您可以使用以下选项修改tofu init的插件行为

  • -upgrade将所有先前选择的插件升级到符合配置版本约束的最新版本。这将导致OpenTofu忽略依赖项锁定文件中记录的任何选择,并获取与配置的版本约束匹配的最新可用版本。
  • -plugin-dir=PATH — 强制插件安装仅从指定的目录读取插件,就像它在CLI配置中配置为filesystem_mirror一样。如果您打算定期使用特定的文件系统镜像,我们建议全局配置OpenTofu的安装方法。您可以使用-plugin-dir作为一次性覆盖以应对特殊情况,例如,如果您正在测试您当前正在开发的提供程序插件的本地构建。
  • -lockfile=MODE设置依赖项锁定文件模式。

锁定文件模式的有效值为:

  • readonly:抑制锁定文件更改,但针对已记录的信息验证校验和。它与-upgrade标志冲突。如果您使用第三方依赖项管理工具更新锁定文件,则控制它何时显式更改将很有用。

在自动化中运行tofu init

对于将OpenTofu作为变更管理和部署管道的关键部分的团队,可能希望在某种自动化中编排OpenTofu运行,以确保运行之间的一致性,并提供其他有趣的特性,例如与版本控制挂钩的集成。

在这样的环境中运行init时,有一些特殊问题,包括可以选择在本地提供插件以避免重复重新安装。

传递不同的配置目录

如果您的工作流程依赖于覆盖根模块目录,请改用-chdir全局选项,它适用于所有命令,并使OpenTofu始终在给定目录中查找它通常在当前工作目录中读取或写入的所有文件。