From 0a1264c54d9b8ac842c7621c3ad6dc163aac5e2a Mon Sep 17 00:00:00 2001 From: Masayuki Morita Date: Wed, 4 Sep 2019 23:19:30 +0900 Subject: [PATCH] Set a version to attribute value only if the key exists --- tfupdate/provider.go | 11 +++++++++-- tfupdate/provider_test.go | 36 ++++++++++++++++++++++++++++++++++++ tfupdate/terraform.go | 9 ++++++++- tfupdate/terraform_test.go | 34 ++++++++++++++++++++++++++++++++++ 4 files changed, 87 insertions(+), 3 deletions(-) diff --git a/tfupdate/provider.go b/tfupdate/provider.go index e2b9f3f..6f641f7 100644 --- a/tfupdate/provider.go +++ b/tfupdate/provider.go @@ -52,7 +52,11 @@ func (u *ProviderUpdater) updateTerraformBlock(f *hclwrite.File) error { if p == nil { return nil } - p.Body().SetAttributeValue(u.name, cty.StringVal(u.version)) + + // set a version to attribute value only if the key exists + if p.Body().GetAttribute(u.name) != nil { + p.Body().SetAttributeValue(u.name, cty.StringVal(u.version)) + } return nil } @@ -63,7 +67,10 @@ func (u *ProviderUpdater) updateProviderBlock(f *hclwrite.File) error { return nil } - p.Body().SetAttributeValue("version", cty.StringVal(u.version)) + // set a version to attribute value only if the key exists + if p.Body().GetAttribute("version") != nil { + p.Body().SetAttributeValue("version", cty.StringVal(u.version)) + } return nil } diff --git a/tfupdate/provider_test.go b/tfupdate/provider_test.go index aaffb45..34319ce 100644 --- a/tfupdate/provider_test.go +++ b/tfupdate/provider_test.go @@ -97,6 +97,42 @@ provider "aws" { version = "2.23.0" region = "ap-northeast-1" } +`, + ok: true, + }, + { + src: ` +terraform { + required_version = "0.12.4" + required_providers { + null = "2.1.1" + } +} +`, + name: "aws", + version: "2.23.0", + want: ` +terraform { + required_version = "0.12.4" + required_providers { + null = "2.1.1" + } +} +`, + ok: true, + }, + { + src: ` +provider "aws" { + region = "ap-northeast-1" +} +`, + name: "aws", + version: "2.23.0", + want: ` +provider "aws" { + region = "ap-northeast-1" +} `, ok: true, }, diff --git a/tfupdate/terraform.go b/tfupdate/terraform.go index 4b94578..c5dfbe7 100644 --- a/tfupdate/terraform.go +++ b/tfupdate/terraform.go @@ -26,7 +26,14 @@ func NewTerraformUpdater(version string) (Updater, error) { // Note that this method will rewrite the AST passed as an argument. func (u *TerraformUpdater) Update(f *hclwrite.File) error { tf := f.Body().FirstMatchingBlock("terraform", []string{}) - tf.Body().SetAttributeValue("required_version", cty.StringVal(u.version)) + if tf == nil { + return nil + } + + // set a version to attribute value only if the key exists + if tf.Body().GetAttribute("required_version") != nil { + tf.Body().SetAttributeValue("required_version", cty.StringVal(u.version)) + } return nil } diff --git a/tfupdate/terraform_test.go b/tfupdate/terraform_test.go index 3ceebbc..919480a 100644 --- a/tfupdate/terraform_test.go +++ b/tfupdate/terraform_test.go @@ -62,6 +62,40 @@ terraform { terraform { required_version = "0.12.7" } +`, + ok: true, + }, + { + src: ` +terraform { + required_providers { + null = "2.1.1" + } +} +`, + version: "0.12.7", + want: ` +terraform { + required_providers { + null = "2.1.1" + } +} +`, + ok: true, + }, + { + src: ` +provider "aws" { + version = "2.11.0" + region = "ap-northeast-1" +} +`, + version: "0.12.7", + want: ` +provider "aws" { + version = "2.11.0" + region = "ap-northeast-1" +} `, ok: true, },