【问题标题】:Terraform not finding third party plugin in directory specified for pluginsTerraform 在为插件指定的目录中找不到第三方插件
【发布时间】:2022-02-13 17:26:44
【问题描述】:

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

  • 尝试将 terraform.d 复制到本地,而不是为 %APPData% 漫游。
  • 在 terraform 可执行文件所在的根目录下尝试过
  • 仅在两个 %APPData% 位置尝试了 virtualbox 文件夹,而不是整个插件
  • 在 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)
}

【问题讨论】:

  • 您的插件二进制文件应该是.terraform/plugins/windows_amd64/terraform-provider-virtualbox_v0.2.0_x4.exe 请验证。例如,在我的 Linux 机器上我有它:.terraform/plugins/linux_amd64/terraform-provider-google_v2.13.0_x4
  • @Andor 我在上面链接的插件中没有看到 exe,安装说明似乎只是希望将插件的文件夹放在提供的目录中,而不创建 exe。也可以。参考用户目录?如果是这样,那么是的,它在用户目录/%APPDATA%terraform.d/plugins/windows_amd64
  • 就我而言,.terraform 只是我的 terraform 配置源树中的一个子目录。就像我在与.terraform 目录相同的目录中有variables.tf 文件。您可以添加任何官方提供程序并检查它的安装位置。

标签: windows-10 virtualbox terraform


【解决方案1】:

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


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

.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,即使 Terraform 发现了它,像 ~> 2.0.0 这样的版本约束也会将其排除在考虑之外。

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

【讨论】:

    猜你喜欢
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-10
    • 2018-04-13
    • 1970-01-01
    相关资源
    最近更新 更多