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

can*_*eed 1 virtualbox windows-10 terraform

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

  • 尝试将 terraform.d 复制到本地而不是漫游 %APPData%。
  • 在 terraform 可执行文件存在的根目录中尝试过
  • 仅尝试了 virtualbox 文件夹,而不是两个 %APPData% 位置中的整个插件
  • 在 terraform 文件所在的文件夹中尝试过

没有一个有效。它的行为就好像它所说的放置插件的文件夹和它所查找的位置不匹配,但我怀疑类似的东西是否会使其发布,所以我不知道为什么它没有看到该插件。

Terraform 是最新版本。在我的 example.tf 中使用以下内容(我执行 terraform 表单的目录中唯一的 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)
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ins 6

注意:这个答案在我编写它时是正确的,但是 Terraform v0.13 及更高版本对于提供程序插件有不同的目录布局,以及用于配置它们的一些不同选项。有关更多信息,请参阅CLI 配置文档的提供程序安装部分。(请注意,CLI 配置.tf与您用来描述基础设施的文件不同;它包含在您的特定计算机上运行时 Terraform CLI 的全局设置。)


Terraform 在多个位置查找插件,但手动安装插件的主要位置是“用户插件目录”,该目录位于~/.terraform.d/pluginsUnix 系统或%APPDATA%\terraform.d\pluginsWindows 上。

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

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


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

2019/09/03 10:36:26 [DEBUG] checking for provider in "/home/username/.terraform.d/plugins"
Run Code Online (Sandbox Code Playgroud)

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

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"
Run Code Online (Sandbox Code Playgroud)

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

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