Terraform插件开发,在哪里指定版本?GO应用程序版本的最佳实践



我们为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。

最新更新