设置Go环境以创建自定义Terraform提供程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设置Go环境以创建自定义Terraform提供程序相关的知识,希望对你有一定的参考价值。

我在尝试创建Terraform提供程序时遇到了困难。我一直在遵循https://www.terraform.io/docs/extend/writing-custom-providers.html上的建议,但是当我通过Go go build -o terraform-provider-example构建我的二进制文件时,我遇到了一些缺少软件包的错误。

因此,我从丢失的软件包列表中查找并使用go get ...将这些软件包安装在Go库中。

我收到一个错误消息,指示找不到github.com/hashicorp/hcl/v2。我导航到该位置,并确定它不存在。

Package not available at install time screen shot

Package not available with go get

因此,我陷入困境,无法建立这些提供程序。我已经寻找了一段时间,试图找到一些描述如何设置用于创建提供程序的环境的文件,但到目前为止还没有成功。谁能帮助我前进?

答案

Terraform Core和Terraform提供程序开发需要在新的“模块模式”下使用Go工具链,在当前的Go版本中,它不是默认的。

确保您在模块模式下工作的最简单方法是在$GOPATH/src目录的[[outside上克隆要使用的存储库。 GOPATH之外的开发仅在模块模式下受支持,因此Go工具链假定您打算以这种方式使用模块模式。

Terraform开发需要模块模式的原因(尽管不是唯一的一个原因是,它依赖于github.com/hashicorp/hcl/v2,这是旧GOPATH模式不支持的模块路径类型,因为以前是Go工具链只能从Git信息库中特定远程依赖项的master分支安装。模块路径github.com/hashicorp/hcl/v2是使用HCL的第二个主要版本指定的“执行模块”方式,而github.com/hashicorp/hcl是第一个主要版本。

在模块模式下,仅运行go build -o terraform-provider-example(或者,如果愿意,可以选择go install)就足够了,它将自动获取对本地模块缓存的依赖关系并从那里使用它们。在模块模式下,go get用于更改go.mod中记录的依赖性,而不是用于安装现有的依赖性。

以上是关于设置Go环境以创建自定义Terraform提供程序的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Terraform 在自定义 VPC 中创建 Elastic Beanstalk 应用程序

schedult 上的 aws 自定义事件以触发 lambda 使用 Terraform

如何创建通用 cosmos db terraform 模块以添加多个地理位置

Terraform 依赖于模块

Terraform 从空状态刷新?

Terraform 从 Packer 中制作的托管磁盘映像创建 VM