Разработка плагина Terraform, где указать версию? лучшие практики для управления версиями приложений go?

Мы разработали пару плагинов провайдера для terraform, причем без указания версии. Затем для нашего собственного контроля мы начали использовать ldflags во время сборки:

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 %s\n", VersionString)
    os.Exit(0)
  }

  plugin.Serve(&plugin.ServeOpts{
    ProviderFunc: myprovider.Provider})
}

Проблема в том, что terraform не знает версию, поэтому мы не можем заморозить версию для наших плагинов.

Как правильно создавать версии пользовательских плагинов для terraform?


person Tiago Lopo    schedule 02.12.2017    source источник


Ответы (1)


Плагины Terraform обычно не знают номер своей версии в самом двоичном файле, а объявляют его как часть своего имени файла.

Например, подключаемый модуль провайдера q под названием «foo» может иметь имя файла terraform-provider-foo_v1.2.0, которое затем указывает Terraform Core, когда он находит этот подключаемый модуль, рассматривать его как версию 1.2.0.

person Martin Atkins    schedule 04.12.2017