我们为Terraform开发了几个提供商插件,我们在没有指定版本的情况下这样做。然后,对于我们自己的控制,我们开始在构建时间使用LDFLAG进行版本:
go build -ldflags '-X "main.VersionString=#{VERSION} (#{REVISION})"' -o '#{WS}/#{PROJECT_NAME}' main.go"
和代码:
package main
import(
"github.com/hashicorp/terraform/plugin"
...
)
var VersionString = "unversioned"
func main(){
if len(os.Args) == 2 && os.Args[1] == "--version" {
fmt.Printf("Version %sn", VersionString)
os.Exit(0)
}
plugin.Serve(&plugin.ServeOpts{
ProviderFunc: myprovider.Provider})
}
问题是Terraform不知道该版本,因此我们无法为插件冻结版本。
Terraform版本自定义插件的正确方法是什么?
Terraform插件通常不知道其在二进制本身中的版本号,而是将其声明为文件名的一部分。
例如,Q提供商插件称为" foo"可能具有文件名terraform-provider-foo_v1.2.0
,然后告诉Terraform Core时,当它找到该插件时,将其视为1.2.0。