尝试创建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
因此,我陷入困境,无法建立这些提供程序。我已经寻找了一段时间,试图找到一些描述如何设置用于创建提供程序的环境的文件,但到目前为止还没有成功。谁能帮助我前进?
答案 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
中的依赖性,而不是用于安装现有的依赖性。