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

时间:2019-11-04 20:42:05

标签: 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

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

1 个答案:

答案 0 :(得分:2)

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第二主要版本指定的Go Modules方法,而github.com/hashicorp/hcl是第一主要版本。

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