Terraform 无法初始化用 Go 编写的自定义提供程序

我正在尝试完成本教程以使用插件框架创建自定义 terraform 模块。


一切都很好,直到我需要使用 terraform 来安装和验证提供者。它失败了:


➜  examples git:(main) ✗ terraform init


Initializing the backend...


Initializing provider plugins...

- Finding latest version of example.com/vladmiller/example...


│ Warning: Provider development overrides are in effect

│ The following provider development overrides are set in the CLI configuration:

│  - example.com/vladmiller/example in /Users/vladi/go/bin

│ Skip terraform init when using provider development overrides. It is not necessary and may

│ error unexpectedly.


│ Error: Invalid provider registry host

│ The host "example.com" given in in provider source address "example.com/vladmiller/example"

│ does not offer a Terraform provider registry.

我也试过:

  • 从教程中克隆 repo,但它也失败了

  • 使用本地安装的 Go 而不是 GoLand

  • go1.18.8 而不是 go1.19.x

  • 将 .terraformrc 中的文件夹指向我开发代码的文件夹(我认为可能terraform-registry-manifest.json需要与二进制文件位于同一文件夹中)

  • 克隆并尝试这个 repo——运气不好

  • 我目前正在尝试理解关于他们如何加载插件的地形代码......

想知道是否有人对如何排除故障有任何想法。先感谢您。


查看日志很明显,terraform 正试图通过向 example.com 发出请求来获取注册表详细信息。我希望它不应该这样做,因为有dev_overrides.

...
Service discovery for example.com at  
...

以下是更多日志和我的设置示例。


一只名叫tom的猫
浏览 112回答 1
1回答

倚天杖

您提到的参数dev_overrides告诉其他 Terraform 命令,例如terraform apply忽略由其填充的依赖项锁定文件和提供程序缓存目录terraform init,而是使用您指定的路径。它不会影响terraform init自身的行为;安装程序总是会尝试找到一个合理的包下载并记录在依赖锁文件中,以避免创建一个不完整的锁文件。terraform init正如警告消息所提到的,如果您的目标只是测试被覆盖的提供程序,则实际上不需要运行。如果您只是直接运行terraform apply,那么您配置的覆盖将阻止 Terraform 查看依赖项锁定文件以找到该提供程序,而是直接使用您指定的目录。在这种情况下不需要自动安装,因为该程序包已在您计算机上的指定位置可用。使用提供者开发覆盖时跳过 terraform init。这不是必需的,可能会意外出错。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go