跳至主要内容

命令:providers lock

tofu providers lock 命令会查询上游注册表(默认情况下),以将提供程序依赖信息写入 依赖锁定文件

更新依赖锁定文件的常见方法是作为正常提供程序安装期间的副作用 tofu init,但存在几种情况,自动方法可能不足。

  • 如果您在使用 替代提供程序安装方法 的环境中运行 OpenTofu,例如文件系统或网络镜像,则正常的提供程序安装不会访问提供程序的源注册表,因此 OpenTofu 无法填充所有可能的包校验和为所选提供程序版本。

    如果您使用 tofu lock 将提供程序的官方发行版校验和写入依赖锁定文件,那么以后的 tofu init 运行将根据之前记录的官方校验和验证所选镜像中可用的包,从而进一步确保镜像正在提供它声称提供的提供程序包。

  • 如果您的团队在多个平台(例如,在 Windows 和 Linux 上)上运行 OpenTofu,并且提供程序的上游注册表无法使用最新的哈希方案提供签名的校验和,那么 OpenTofu 在其他平台上的后续运行可能会 向锁定文件添加其他校验和。您可以使用 tofu providers lock 命令预先填充您打算使用的所有平台的哈希值来避免这种情况。

用法

用法:tofu providers lock [选项] [提供程序...]

此命令接受以下通用选项

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

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

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

如果没有其他命令行参数,tofu providers lock 将分析当前工作目录中的配置以找到它依赖的所有提供程序,并从其源注册表中获取有关这些提供程序的必要数据,然后更新 依赖锁定文件 以包含每个提供程序的选定版本以及提供程序开发人员的密码签名涵盖的所有包校验和。

如果在命令行中列出一个或多个提供者源地址,那么 tofu providers lock 将仅限于这些提供者,并保持其他提供者的锁定条目(如果有)不变。

您可以使用以下附加选项自定义默认行为

  • -fs-mirror=PATH - 指示 OpenTofu 在给定的本地文件系统镜像目录中查找提供者包,而不是在 upstream 注册表中。给定的目录必须使用通常的文件系统镜像目录布局。

  • -net-mirror=URL - 指示 OpenTofu 在给定的网络镜像服务中查找提供者包,而不是在 upstream 注册表中。给定的 URL 必须实现 OpenTofu 提供者网络镜像协议

  • -platform=OS_ARCH - 指定您打算用于此 OpenTofu 配置的平台。OpenTofu 将确保所有提供者都可用于给定的平台,并将保存足够多的包校验和到锁定文件中,以支持至少指定的平台。

    多次使用此选项以包含多个目标系统的校验和。

    目标平台名称由操作系统和 CPU 架构组成。例如,linux_amd64 选择在 AMD64 或 x86_64 CPU 上运行的 Linux 操作系统。

    本节将详细介绍此选项。

指定目标平台

例如,在您的环境中,您可能同时拥有在 Windows 或 macOS 工作站上使用 OpenTofu 配置的开发人员,以及在 Linux 上运行时应用配置的自动化系统。

在这种情况下,您可以选择通过运行 tofu providers lock 并指定这三种平台来验证所有提供者都支持所有这些平台,并使用必要的校验和预填充锁定文件

代码块
tofu providers lock \
-platform=windows_amd64 \ # 64-bit Windows
-platform=darwin_amd64 \ # 64-bit macOS
-platform=linux_amd64 # 64-bit Linux

(以上示例使用 Unix 风格的 shell 嵌套语法以提高可读性。如果您在 Windows 上运行命令,则需要将所有参数放在一行上,并删除反斜杠和注释。)

内部提供者的锁定条目

内部提供者是指未发布在真实 OpenTofu 提供者注册表上的提供者,因为它仅在一个特定组织内开发和使用,并通过文件系统镜像或网络镜像分发。

默认情况下,tofu providers lock 假设所有提供者都可以在 OpenTofu 提供者注册表中获得,并尝试联系源注册表以获取有关提供者包的最详细的信息。

要为仅在本地镜像中可用的特定提供者创建锁定条目,可以使用 -fs-mirror-net-mirror 命令行选项来覆盖咨询提供者的源注册表的默认行为

代码块
tofu providers lock \
-fs-mirror=/usr/local/tofu/providers
-platform=windows_amd64 \
-platform=darwin_amd64 \
-platform=linux_amd64 \
tf.example.com/ourcompany/ourplatform

(以上示例使用 Unix 风格的 shell 嵌套语法以提高可读性。如果您在 Windows 上运行命令,则需要将所有参数放在一行上,并删除反斜杠。)

由于上面的命令包含提供者源地址 tf.example.com/ourcompany/ourplatformtofu providers lock 仅会尝试访问该特定提供者,并且会保持其他任何提供者的锁定条目不变。如果您有各种来自不同来源的不同提供者,则可以多次运行 tofu providers lock 并每次指定您的提供者的不同子集。

-fs-mirror-net-mirror 选项与 提供者安装方法配置 中的 filesystem_mirrornetwork_mirror 块具有相同的含义,但仅指定单个方法,以明确您打算从中获取包校验和信息的位置。

请注意,只有源注册表可以提供由原始开发者的加密签名涵盖的官方校验和。因此,从文件系统或网络镜像创建的锁定条目将仅覆盖您请求的准确平台,并且记录的校验和将是镜像报告的校验和,而不是源注册表的官方校验和。如果您要确保记录的校验和是原始提供者发布者签名的校验和,请不使用 -fs-mirror-net-mirror 选项运行此命令以从源注册表获取所有信息。

如果您愿意,可以通过内部提供者注册表发布您的内部提供者,这将允许锁定和安装这些提供者,而无需任何特殊选项或额外的 CLI 配置。有关更多信息,请参阅 提供者注册表协议