From f70bd9f5912a1780ca069e302bde4bd92417456c Mon Sep 17 00:00:00 2001 From: Masayuki Morita Date: Thu, 12 Sep 2019 23:36:36 +0900 Subject: [PATCH] Unify version constraints of tfupdate.Option to a target string --- command/provider.go | 11 +++++------ command/terraform.go | 5 ++--- tfupdate/updater.go | 21 +++++++++++++-------- tfupdate/updater_test.go | 12 ++++-------- 4 files changed, 24 insertions(+), 25 deletions(-) diff --git a/command/provider.go b/command/provider.go index 45861e8..d354c00 100644 --- a/command/provider.go +++ b/command/provider.go @@ -22,18 +22,17 @@ func (c *ProviderCommand) Run(args []string) int { return 1 } - if len(cmdFlags.Args()) != 2 { - c.UI.Error("The provider command expects and ") + if len(cmdFlags.Args()) != 1 { + c.UI.Error("The provider command expects @") c.UI.Error(c.Help()) return 1 } updateType := "provider" - name := cmdFlags.Args()[0] - version := cmdFlags.Args()[1] + target := cmdFlags.Args()[0] filename := c.path - option := tfupdate.NewOption(updateType, name, version) + option := tfupdate.NewOption(updateType, target) err := tfupdate.UpdateFile(filename, option) if err != nil { c.UI.Error(err.Error()) @@ -46,7 +45,7 @@ func (c *ProviderCommand) Run(args []string) int { // Help returns long-form help text. func (c *ProviderCommand) Help() string { helpText := ` -Usage: tfupdate provider [options] +Usage: tfupdate provider [options] @ Options: diff --git a/command/terraform.go b/command/terraform.go index a321c7c..8d5279e 100644 --- a/command/terraform.go +++ b/command/terraform.go @@ -29,11 +29,10 @@ func (c *TerraformCommand) Run(args []string) int { } updateType := "terraform" - name := "" - version := cmdFlags.Args()[0] + target := cmdFlags.Args()[0] filename := c.path - option := tfupdate.NewOption(updateType, name, version) + option := tfupdate.NewOption(updateType, target) err := tfupdate.UpdateFile(filename, option) if err != nil { c.UI.Error(err.Error()) diff --git a/tfupdate/updater.go b/tfupdate/updater.go index 8be430a..b5bc4cd 100644 --- a/tfupdate/updater.go +++ b/tfupdate/updater.go @@ -1,6 +1,8 @@ package tfupdate import ( + "strings" + "github.com/hashicorp/hcl2/hclwrite" "github.com/pkg/errors" ) @@ -14,20 +16,24 @@ type Updater interface { // Option is a set of parameters to update. type Option struct { + // A type of updater. Valid value is terraform or provider. updateType string - name string - version string + // A target to be updated. + // If an updateType is terraform, Set a version. + // If an updateType is provider, Set a name@version. + target string } // NewUpdater is a factory method which returns an Updater implementation. func NewUpdater(o Option) (Updater, error) { switch o.updateType { case "terraform": - return NewTerraformUpdater(o.version) + return NewTerraformUpdater(o.target) case "provider": + s := strings.Split(o.target, "@") return &ProviderUpdater{ - name: o.name, - version: o.version, + name: s[0], + version: s[1], }, nil case "module": return nil, errors.Errorf("failed to new updater. module is not currently supported.") @@ -37,10 +43,9 @@ func NewUpdater(o Option) (Updater, error) { } // NewOption returns an option. -func NewOption(updateType string, name string, version string) Option { +func NewOption(updateType string, target string) Option { return Option{ updateType: updateType, - name: name, - version: version, + target: target, } } diff --git a/tfupdate/updater_test.go b/tfupdate/updater_test.go index f88dbef..40774c8 100644 --- a/tfupdate/updater_test.go +++ b/tfupdate/updater_test.go @@ -14,8 +14,7 @@ func TestNewUpdater(t *testing.T) { { o: Option{ updateType: "terraform", - name: "", - version: "0.12.7", + target: "0.12.7", }, want: &TerraformUpdater{ version: "0.12.7", @@ -25,8 +24,7 @@ func TestNewUpdater(t *testing.T) { { o: Option{ updateType: "provider", - name: "aws", - version: "2.23.0", + target: "aws@2.23.0", }, want: &ProviderUpdater{ name: "aws", @@ -37,8 +35,7 @@ func TestNewUpdater(t *testing.T) { { o: Option{ updateType: "module", - name: "terraform-aws-modules/vpc/aws", - version: "2.14.0", + target: "terraform-aws-modules/vpc/aws@2.14.0", }, want: nil, ok: false, @@ -46,8 +43,7 @@ func TestNewUpdater(t *testing.T) { { o: Option{ updateType: "hoge", - name: "", - version: "0.0.1", + target: "0.0.1", }, want: nil, ok: false,