Terraform 在为插件指定的目录中找不到第三方插件

Terraform not finding third party plugin in directory specified for plugins

正在尝试让 Terraform 在 windows 10 64 位上工作,使用此处列出的 Virtualbox 提供程序插件 (https://github.com/terra-farm/terraform-provider-virtualbox)。我已经验证该插件存在于 %APPData%/terraform.d/plugins/windows_amd64 但它说它不存在。尝试了以下但没有成功

None 成功了。它的作用就好像它所说的放置插件的文件夹和它看起来的位置不匹配,但我怀疑类似的东西会让它发布,所以我不知道为什么它没有看到插件。

Terraform 是最新版本。在我的 example.tf 中使用以下内容(我执行 terraform form 的目录中唯一的 tf 文件)

resource "virtualbox_vm" "node" {
  count     = 2
  name      = format("node-%02d", count.index + 1)
  image     = "https://app.vagrantup.com/ubuntu/boxes/bionic64/versions/20180903.0.0/providers/virtualbox.box"
  cpus      = 2
  memory    = "512 mib"
  user_data = file("user_data")

  network_adapter {
    type           = "hostonly"
    host_interface = "vboxnet1"
  }
}

output "IPAddr" {
  value = element(virtualbox_vm.node.*.network_adapter.0.ipv4_address, 1)
}

output "IPAddr_2" {
  value = element(virtualbox_vm.node.*.network_adapter.0.ipv4_address, 2)
}

注意:这个答案在我写的时候是正确的,但是 Terraform v0.13 和更高版本的提供程序插件有不同的目录布局,以及一些不同的配置选项他们。有关详细信息,请参阅 the Provider Installation section of the CLI Configuration documentation. (and note that the CLI configuration 与用于描述基础架构的 .tf 文件不同;当 运行 在您的特定计算机上运行时,它包含 Terraform CLI 的全局设置。)


Terraform 在 a number of locations 中查找插件,但手动安装插件的主要位置是在“用户插件目录”中,在 Unix 系统上是 ~/.terraform.d/plugins%APPDATA%\terraform.d\plugins 在 Windows.

.terraform/plugins 目录不是 放置您手动安装的插件的地方。该目录由 Terraform 本身管理,是自动安装插件的位置。如果您手动将插件放入该目录,terraform init 可能会在插件安装过程中删除它们。

Terraform 还要求提供者可执行文件遵循特定的命名方案:terraform-provider-providername_vX.Y.Z,其中 _vX.Y.Z 部分在技术上是可选的,但强烈建议 version 约束正确运行.特别是在 Windows 上,该文件还必须具有后缀 .exe,因为 Terraform 插件是 Terraform 将启动的独立程序。


要调试 Terraform 的插件发现过程,您可以在 运行 terraform init 之前设置环境变量 TF_LOG=debug。在那个输出中会有这样的行:

2019/09/03 10:36:26 [DEBUG] checking for provider in "/home/username/.terraform.d/plugins"

如果它在各种搜索路径中找到任何插件,它会另外生成如下行:

2019/09/03 10:36:26 [DEBUG] found valid plugin: "example", "1.2.0", "/home/username/.terraform.d/plugins/terraform-provider-test_v1.2.0"

如果配置中存在任何提供程序版本限制,则它们必须包括您已安装的任何提供程序版本。例如,对于上面发现的 example v1.2.0 提供者,像 ~> 2.0.0 这样的版本约束会将其排除在考虑范围之外,即使 Terraform 发现了它。

要查看您的配置如何限制提供程序版本,运行 terraform providers。如果没有约束,那么它只会列出提供者名称,但如果存在任何约束,那么它们将包含在输出中。