diff --git a/azurerm/data_source_app_service.go b/azurerm/data_source_app_service.go index b9e6de2247ee..d029eafdc3e5 100644 --- a/azurerm/data_source_app_service.go +++ b/azurerm/data_source_app_service.go @@ -60,8 +60,9 @@ func dataSourceArmAppService() *schema.Resource { Computed: true, }, "value": { - Type: schema.TypeString, - Computed: true, + Type: schema.TypeString, + Sensitive: true, + Computed: true, }, "type": { Type: schema.TypeString, diff --git a/azurerm/data_source_app_service_test.go b/azurerm/data_source_app_service_test.go index 9cd0a5de9dee..c74ce99dddbb 100644 --- a/azurerm/data_source_app_service_test.go +++ b/azurerm/data_source_app_service_test.go @@ -119,9 +119,12 @@ func TestAccDataSourceAzureRMAppService_connectionString(t *testing.T) { { Config: testAccDataSourceAppService_connectionStrings(rInt, location), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr(dataSourceName, "connection_string.0.name", "Example"), - resource.TestCheckResourceAttr(dataSourceName, "connection_string.0.value", "some-postgresql-connection-string"), - resource.TestCheckResourceAttr(dataSourceName, "connection_string.0.type", "PostgreSQL"), + resource.TestCheckResourceAttr(dataSourceName, "connection_string.0.name", "First"), + resource.TestCheckResourceAttr(dataSourceName, "connection_string.0.value", "first-connection-string"), + resource.TestCheckResourceAttr(dataSourceName, "connection_string.0.type", "Custom"), + resource.TestCheckResourceAttr(dataSourceName, "connection_string.1.name", "Second"), + resource.TestCheckResourceAttr(dataSourceName, "connection_string.1.value", "some-postgresql-connection-string"), + resource.TestCheckResourceAttr(dataSourceName, "connection_string.1.type", "PostgreSQL"), ), }, }, diff --git a/azurerm/resource_arm_app_service.go b/azurerm/resource_arm_app_service.go index a07d67546ff4..2faae84d47e8 100644 --- a/azurerm/resource_arm_app_service.go +++ b/azurerm/resource_arm_app_service.go @@ -95,7 +95,7 @@ func resourceArmAppService() *schema.Resource { }, "connection_string": { - Type: schema.TypeList, + Type: schema.TypeSet, Optional: true, Computed: true, Elem: &schema.Resource{ @@ -549,7 +549,7 @@ func expandAppServiceAppSettings(d *schema.ResourceData) map[string]*string { } func expandAppServiceConnectionStrings(d *schema.ResourceData) map[string]*web.ConnStringValueTypePair { - input := d.Get("connection_string").([]interface{}) + input := d.Get("connection_string").(*schema.Set).List() output := make(map[string]*web.ConnStringValueTypePair, len(input)) for _, v := range input { @@ -568,14 +568,16 @@ func expandAppServiceConnectionStrings(d *schema.ResourceData) map[string]*web.C return output } -func flattenAppServiceConnectionStrings(input map[string]*web.ConnStringValueTypePair) interface{} { +func flattenAppServiceConnectionStrings(input map[string]*web.ConnStringValueTypePair) []interface{} { results := make([]interface{}, 0) for k, v := range input { result := make(map[string]interface{}) result["name"] = k result["type"] = string(v.Type) - result["value"] = *v.Value + if v.Value != nil { + result["value"] = *v.Value + } results = append(results, result) } diff --git a/azurerm/resource_arm_app_service_slot.go b/azurerm/resource_arm_app_service_slot.go index 33e53edaba63..803400bd56de 100644 --- a/azurerm/resource_arm_app_service_slot.go +++ b/azurerm/resource_arm_app_service_slot.go @@ -100,7 +100,7 @@ func resourceArmAppServiceSlot() *schema.Resource { }, "connection_string": { - Type: schema.TypeList, + Type: schema.TypeSet, Optional: true, Computed: true, Elem: &schema.Resource{ diff --git a/azurerm/resource_arm_app_service_slot_test.go b/azurerm/resource_arm_app_service_slot_test.go index b7ddb4faf418..12f7653e61e1 100644 --- a/azurerm/resource_arm_app_service_slot_test.go +++ b/azurerm/resource_arm_app_service_slot_test.go @@ -223,7 +223,7 @@ func TestAccAzureRMAppServiceSlot_clientAffinityEnabledUpdate(t *testing.T) { func TestAccAzureRMAppServiceSlot_connectionStrings(t *testing.T) { resourceName := "azurerm_app_service_slot.test" ri := acctest.RandInt() - config := testAccAzureRMAppServiceSlot_connectionStrings(ri, testLocation()) + location := testLocation() resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -231,12 +231,27 @@ func TestAccAzureRMAppServiceSlot_connectionStrings(t *testing.T) { CheckDestroy: testCheckAzureRMAppServiceSlotDestroy, Steps: []resource.TestStep{ { - Config: config, + Config: testAccAzureRMAppServiceSlot_connectionStrings(ri, location), + Check: resource.ComposeTestCheckFunc( + testCheckAzureRMAppServiceSlotExists(resourceName), + resource.TestCheckResourceAttr(resourceName, "connection_string.3173438943.name", "First"), + resource.TestCheckResourceAttr(resourceName, "connection_string.3173438943.value", "first-connection-string"), + resource.TestCheckResourceAttr(resourceName, "connection_string.3173438943.type", "Custom"), + resource.TestCheckResourceAttr(resourceName, "connection_string.2442860602.name", "Second"), + resource.TestCheckResourceAttr(resourceName, "connection_string.2442860602.value", "some-postgresql-connection-string"), + resource.TestCheckResourceAttr(resourceName, "connection_string.2442860602.type", "PostgreSQL"), + ), + }, + { + Config: testAccAzureRMAppServiceSlot_connectionStringsUpdated(ri, location), Check: resource.ComposeTestCheckFunc( testCheckAzureRMAppServiceSlotExists(resourceName), - resource.TestCheckResourceAttr(resourceName, "connection_string.0.name", "Example"), - resource.TestCheckResourceAttr(resourceName, "connection_string.0.value", "some-postgresql-connection-string"), - resource.TestCheckResourceAttr(resourceName, "connection_string.0.type", "PostgreSQL"), + resource.TestCheckResourceAttr(resourceName, "connection_string.3173438943.name", "First"), + resource.TestCheckResourceAttr(resourceName, "connection_string.3173438943.value", "first-connection-string"), + resource.TestCheckResourceAttr(resourceName, "connection_string.3173438943.type", "Custom"), + resource.TestCheckResourceAttr(resourceName, "connection_string.2442860602.name", "Second"), + resource.TestCheckResourceAttr(resourceName, "connection_string.2442860602.value", "some-postgresql-connection-string"), + resource.TestCheckResourceAttr(resourceName, "connection_string.2442860602.type", "PostgreSQL"), ), }, }, @@ -1175,10 +1190,63 @@ resource "azurerm_app_service_slot" "test" { app_service_name = "${azurerm_app_service.test.name}" connection_string { - name = "Example" + name = "First" + value = "first-connection-string" + type = "Custom" + } + + connection_string { + name = "Second" + value = "some-postgresql-connection-string" + type = "PostgreSQL" + } +} +`, rInt, location, rInt, rInt, rInt) +} + +func testAccAzureRMAppServiceSlot_connectionStringsUpdated(rInt int, location string) string { + return fmt.Sprintf(` +resource "azurerm_resource_group" "test" { + name = "acctestRG-%d" + location = "%s" +} + +resource "azurerm_app_service_plan" "test" { + name = "acctestASP-%d" + location = "${azurerm_resource_group.test.location}" + resource_group_name = "${azurerm_resource_group.test.name}" + + sku { + tier = "Standard" + size = "S1" + } +} + +resource "azurerm_app_service" "test" { + name = "acctestAS-%d" + location = "${azurerm_resource_group.test.location}" + resource_group_name = "${azurerm_resource_group.test.name}" + app_service_plan_id = "${azurerm_app_service_plan.test.id}" +} + +resource "azurerm_app_service_slot" "test" { + name = "acctestASSlot-%d" + location = "${azurerm_resource_group.test.location}" + resource_group_name = "${azurerm_resource_group.test.name}" + app_service_plan_id = "${azurerm_app_service_plan.test.id}" + app_service_name = "${azurerm_app_service.test.name}" + + connection_string { + name = "Second" value = "some-postgresql-connection-string" type = "PostgreSQL" } + + connection_string { + name = "First" + value = "first-connection-string" + type = "Custom" + } } `, rInt, location, rInt, rInt, rInt) } diff --git a/azurerm/resource_arm_app_service_test.go b/azurerm/resource_arm_app_service_test.go index b8ff2d2e580a..792b195d61f4 100644 --- a/azurerm/resource_arm_app_service_test.go +++ b/azurerm/resource_arm_app_service_test.go @@ -498,7 +498,7 @@ func TestAccAzureRMAppService_clientAffinityUpdate(t *testing.T) { func TestAccAzureRMAppService_connectionStrings(t *testing.T) { resourceName := "azurerm_app_service.test" ri := acctest.RandInt() - config := testAccAzureRMAppService_connectionStrings(ri, testLocation()) + location := testLocation() resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -506,12 +506,27 @@ func TestAccAzureRMAppService_connectionStrings(t *testing.T) { CheckDestroy: testCheckAzureRMAppServiceDestroy, Steps: []resource.TestStep{ { - Config: config, + Config: testAccAzureRMAppService_connectionStrings(ri, location), Check: resource.ComposeTestCheckFunc( testCheckAzureRMAppServiceExists(resourceName), - resource.TestCheckResourceAttr(resourceName, "connection_string.0.name", "Example"), - resource.TestCheckResourceAttr(resourceName, "connection_string.0.value", "some-postgresql-connection-string"), - resource.TestCheckResourceAttr(resourceName, "connection_string.0.type", "PostgreSQL"), + resource.TestCheckResourceAttr(resourceName, "connection_string.3173438943.name", "First"), + resource.TestCheckResourceAttr(resourceName, "connection_string.3173438943.value", "first-connection-string"), + resource.TestCheckResourceAttr(resourceName, "connection_string.3173438943.type", "Custom"), + resource.TestCheckResourceAttr(resourceName, "connection_string.2442860602.name", "Second"), + resource.TestCheckResourceAttr(resourceName, "connection_string.2442860602.value", "some-postgresql-connection-string"), + resource.TestCheckResourceAttr(resourceName, "connection_string.2442860602.type", "PostgreSQL"), + ), + }, + { + Config: testAccAzureRMAppService_connectionStringsUpdated(ri, location), + Check: resource.ComposeTestCheckFunc( + testCheckAzureRMAppServiceExists(resourceName), + resource.TestCheckResourceAttr(resourceName, "connection_string.3173438943.name", "First"), + resource.TestCheckResourceAttr(resourceName, "connection_string.3173438943.value", "first-connection-string"), + resource.TestCheckResourceAttr(resourceName, "connection_string.3173438943.type", "Custom"), + resource.TestCheckResourceAttr(resourceName, "connection_string.2442860602.name", "Second"), + resource.TestCheckResourceAttr(resourceName, "connection_string.2442860602.value", "some-postgresql-connection-string"), + resource.TestCheckResourceAttr(resourceName, "connection_string.2442860602.type", "PostgreSQL"), ), }, { @@ -1665,10 +1680,55 @@ resource "azurerm_app_service" "test" { app_service_plan_id = "${azurerm_app_service_plan.test.id}" connection_string { - name = "Example" + name = "First" + value = "first-connection-string" + type = "Custom" + } + + connection_string { + name = "Second" + value = "some-postgresql-connection-string" + type = "PostgreSQL" + } +} +`, rInt, location, rInt, rInt) +} + +func testAccAzureRMAppService_connectionStringsUpdated(rInt int, location string) string { + return fmt.Sprintf(` +resource "azurerm_resource_group" "test" { + name = "acctestRG-%d" + location = "%s" +} + +resource "azurerm_app_service_plan" "test" { + name = "acctestASP-%d" + location = "${azurerm_resource_group.test.location}" + resource_group_name = "${azurerm_resource_group.test.name}" + + sku { + tier = "Standard" + size = "S1" + } +} + +resource "azurerm_app_service" "test" { + name = "acctestAS-%d" + location = "${azurerm_resource_group.test.location}" + resource_group_name = "${azurerm_resource_group.test.name}" + app_service_plan_id = "${azurerm_app_service_plan.test.id}" + + connection_string { + name = "Second" value = "some-postgresql-connection-string" type = "PostgreSQL" } + + connection_string { + name = "First" + value = "first-connection-string" + type = "Custom" + } } `, rInt, location, rInt, rInt) }