From 6c2e99b392612fa74c4462882057a7c110be3631 Mon Sep 17 00:00:00 2001 From: Andy McGrath Date: Mon, 27 Sep 2021 13:18:20 +0100 Subject: [PATCH 1/5] data_factory, flattenDataFactoryGlobalParameters set to convert Array and Object types to json encoded strings --- .../datafactory/data_factory_resource.go | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/internal/services/datafactory/data_factory_resource.go b/internal/services/datafactory/data_factory_resource.go index a423c8b333a5..f714574f327d 100644 --- a/internal/services/datafactory/data_factory_resource.go +++ b/internal/services/datafactory/data_factory_resource.go @@ -2,7 +2,10 @@ package datafactory import ( "context" + "encoding/json" "fmt" + "reflect" + "strings" "time" "github.com/Azure/azure-sdk-for-go/services/datafactory/mgmt/2018-06-01/datafactory" @@ -18,6 +21,7 @@ import ( msiValidate "github.com/hashicorp/terraform-provider-azurerm/internal/services/msi/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/tags" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" + "github.com/hashicorp/terraform-provider-azurerm/internal/tf/suppress" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/validation" "github.com/hashicorp/terraform-provider-azurerm/internal/timeouts" "github.com/hashicorp/terraform-provider-azurerm/utils" @@ -198,6 +202,7 @@ func resourceDataFactory() *pluginsdk.Resource { "Object", "String", }, false), + DiffSuppressFunc: suppress.CaseDifference, }, "value": { @@ -509,7 +514,7 @@ func expandDataFactoryGlobalParameters(input []interface{}) (map[string]*datafac result[name] = &datafactory.GlobalParameterSpecification{ Type: datafactory.GlobalParameterType(v["type"].(string)), - Value: v["value"].(string), + Value: fmt.Sprintf("%v", v["value"]), } } return result, nil @@ -606,10 +611,17 @@ func flattenDataFactoryGlobalParameters(input map[string]*datafactory.GlobalPara } result := make([]interface{}, 0) for name, item := range input { + var valueResult string + if (strings.ToLower(string(item.Type)) == "array" || strings.ToLower(string(item.Type)) == "object") && reflect.TypeOf(item.Value).Name() != "string" { + result, _ := json.Marshal(item.Value) + valueResult = string(result) + } else { + valueResult = fmt.Sprintf("%v", item.Value) + } result = append(result, map[string]interface{}{ "name": name, "type": string(item.Type), - "value": item.Value, + "value": valueResult, }) } return result From ba13abb6c5589fc7eba12947c62aac5aec97a04d Mon Sep 17 00:00:00 2001 From: Andy McGrath Date: Tue, 28 Sep 2021 18:21:10 +0100 Subject: [PATCH 2/5] Update docs with NOTE, set tests to use jsonencode() in tf, revert changes under expandDataFactoryGlobalParameters --- internal/services/datafactory/data_factory_resource.go | 6 +++--- internal/services/datafactory/data_factory_resource_test.go | 4 ++-- website/docs/r/data_factory.html.markdown | 2 ++ 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/internal/services/datafactory/data_factory_resource.go b/internal/services/datafactory/data_factory_resource.go index f714574f327d..00c7e153692e 100644 --- a/internal/services/datafactory/data_factory_resource.go +++ b/internal/services/datafactory/data_factory_resource.go @@ -514,7 +514,7 @@ func expandDataFactoryGlobalParameters(input []interface{}) (map[string]*datafac result[name] = &datafactory.GlobalParameterSpecification{ Type: datafactory.GlobalParameterType(v["type"].(string)), - Value: fmt.Sprintf("%v", v["value"]), + Value: v["value"].(string), } } return result, nil @@ -613,8 +613,8 @@ func flattenDataFactoryGlobalParameters(input map[string]*datafactory.GlobalPara for name, item := range input { var valueResult string if (strings.ToLower(string(item.Type)) == "array" || strings.ToLower(string(item.Type)) == "object") && reflect.TypeOf(item.Value).Name() != "string" { - result, _ := json.Marshal(item.Value) - valueResult = string(result) + j, _ := json.Marshal(item.Value) + valueResult = string(j) } else { valueResult = fmt.Sprintf("%v", item.Value) } diff --git a/internal/services/datafactory/data_factory_resource_test.go b/internal/services/datafactory/data_factory_resource_test.go index 9e1d0be62a52..802acf08c72f 100644 --- a/internal/services/datafactory/data_factory_resource_test.go +++ b/internal/services/datafactory/data_factory_resource_test.go @@ -675,13 +675,13 @@ resource "azurerm_data_factory" "test" { global_parameter { name = "arrayVal" type = "Array" - value = "[\"a\", \"b\", \"c\"]" + value = jsonencode(["a", "b", "c"]) } global_parameter { name = "objectVal" type = "Object" - value = "{'name': 'value'}" + value = jsonencode({name: "value"}) } } `, data.RandomInteger, data.Locations.Primary, data.RandomInteger) diff --git a/website/docs/r/data_factory.html.markdown b/website/docs/r/data_factory.html.markdown index 23d2e6bc4356..5c07052bbae4 100644 --- a/website/docs/r/data_factory.html.markdown +++ b/website/docs/r/data_factory.html.markdown @@ -77,6 +77,8 @@ A `global_parameter` block supports the following: * `value` - (Required) Specifies the global parameter value. +-> **Note:** For type `Array` and `Object` it is recommended to use `jsonencode()` for the value + --- A `identity` block supports the following: From b260b37e1a5a1d065063a7bf8149f68a3d185779 Mon Sep 17 00:00:00 2001 From: Andy McGrath Date: Wed, 29 Sep 2021 07:24:12 +0100 Subject: [PATCH 3/5] tflint fix --- internal/services/datafactory/data_factory_resource_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/services/datafactory/data_factory_resource_test.go b/internal/services/datafactory/data_factory_resource_test.go index 802acf08c72f..fcbe6f95ef14 100644 --- a/internal/services/datafactory/data_factory_resource_test.go +++ b/internal/services/datafactory/data_factory_resource_test.go @@ -681,7 +681,7 @@ resource "azurerm_data_factory" "test" { global_parameter { name = "objectVal" type = "Object" - value = jsonencode({name: "value"}) + value = jsonencode({ name : "value" }) } } `, data.RandomInteger, data.Locations.Primary, data.RandomInteger) From 850c2be1cb3542fa625bb7e1da30681cf06958bd Mon Sep 17 00:00:00 2001 From: Andy McGrath Date: Thu, 14 Oct 2021 17:21:18 +0100 Subject: [PATCH 4/5] Set global_parameter type to strings.Title() on read --- internal/services/datafactory/data_factory_resource.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/internal/services/datafactory/data_factory_resource.go b/internal/services/datafactory/data_factory_resource.go index e07edcd7d9db..aeb3a711a739 100644 --- a/internal/services/datafactory/data_factory_resource.go +++ b/internal/services/datafactory/data_factory_resource.go @@ -21,7 +21,6 @@ import ( msiValidate "github.com/hashicorp/terraform-provider-azurerm/internal/services/msi/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/tags" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" - "github.com/hashicorp/terraform-provider-azurerm/internal/tf/suppress" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/validation" "github.com/hashicorp/terraform-provider-azurerm/internal/timeouts" "github.com/hashicorp/terraform-provider-azurerm/utils" @@ -204,7 +203,6 @@ func resourceDataFactory() *pluginsdk.Resource { "Object", "String", }, false), - DiffSuppressFunc: suppress.CaseDifference, }, "value": { @@ -622,7 +620,7 @@ func flattenDataFactoryGlobalParameters(input map[string]*datafactory.GlobalPara } result = append(result, map[string]interface{}{ "name": name, - "type": string(item.Type), + "type": strings.Title(string(item.Type)), "value": valueResult, }) } From ec3d1ab54db934956c7aa3df0ef4e1eb476e1483 Mon Sep 17 00:00:00 2001 From: Andy McGrath Date: Thu, 14 Oct 2021 18:30:44 +0100 Subject: [PATCH 5/5] flattenDataFactoryGlobalParameters typeResult clean-up --- internal/services/datafactory/data_factory_resource.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/internal/services/datafactory/data_factory_resource.go b/internal/services/datafactory/data_factory_resource.go index aeb3a711a739..9ffe35ca9a61 100644 --- a/internal/services/datafactory/data_factory_resource.go +++ b/internal/services/datafactory/data_factory_resource.go @@ -609,18 +609,22 @@ func flattenDataFactoryGlobalParameters(input map[string]*datafactory.GlobalPara if len(input) == 0 { return []interface{}{} } + result := make([]interface{}, 0) for name, item := range input { var valueResult string - if (strings.ToLower(string(item.Type)) == "array" || strings.ToLower(string(item.Type)) == "object") && reflect.TypeOf(item.Value).Name() != "string" { + typeResult := strings.Title(string(item.Type)) + + if (typeResult == "Array" || typeResult == "Object") && reflect.TypeOf(item.Value).Name() != "string" { j, _ := json.Marshal(item.Value) valueResult = string(j) } else { valueResult = fmt.Sprintf("%v", item.Value) } + result = append(result, map[string]interface{}{ "name": name, - "type": strings.Title(string(item.Type)), + "type": typeResult, "value": valueResult, }) }