From 10638a16bb0c515997527ddcbb2caea0ecbccb0e Mon Sep 17 00:00:00 2001 From: kt <kt@katbyte.me> Date: Wed, 22 Jan 2020 10:12:08 -0800 Subject: [PATCH] =?UTF-8?q?azurerm=5Ftraffic=5Fmanager=5Fprofile=20-=20add?= =?UTF-8?q?=20expected=5Fstatus=5Fcode=5Frang=E2=80=A6=20(#5471)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit also changes some TypeSets -> TypeLists as the API ignores all but the first element --- ...e_traffic_manager_geographical_location.go | 6 +- .../resource_arm_traffic_manager_endpoint.go | 14 +- .../resource_arm_traffic_manager_profile.go | 242 +++++----- ...ource_arm_traffic_manager_endpoint_test.go | 78 ++-- ...source_arm_traffic_manager_profile_test.go | 419 +++--------------- .../r/traffic_manager_profile.html.markdown | 5 +- 6 files changed, 248 insertions(+), 516 deletions(-) diff --git a/azurerm/internal/services/trafficmanager/data_source_traffic_manager_geographical_location.go b/azurerm/internal/services/trafficmanager/data_source_traffic_manager_geographical_location.go index 3786c1104d9b..da62dcad745f 100644 --- a/azurerm/internal/services/trafficmanager/data_source_traffic_manager_geographical_location.go +++ b/azurerm/internal/services/trafficmanager/data_source_traffic_manager_geographical_location.go @@ -7,6 +7,7 @@ import ( "github.com/Azure/azure-sdk-for-go/services/trafficmanager/mgmt/2018-04-01/trafficmanager" "github.com/hashicorp/terraform-plugin-sdk/helper/schema" + "github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/validate" "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/clients" "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/timeouts" ) @@ -21,8 +22,9 @@ func dataSourceArmTrafficManagerGeographicalLocation() *schema.Resource { Schema: map[string]*schema.Schema{ "name": { - Type: schema.TypeString, - Required: true, + Type: schema.TypeString, + Required: true, + ValidateFunc: validate.NoEmptyStrings, }, }, } diff --git a/azurerm/internal/services/trafficmanager/resource_arm_traffic_manager_endpoint.go b/azurerm/internal/services/trafficmanager/resource_arm_traffic_manager_endpoint.go index d1fd7f8badb6..2adc9a8ecc47 100644 --- a/azurerm/internal/services/trafficmanager/resource_arm_traffic_manager_endpoint.go +++ b/azurerm/internal/services/trafficmanager/resource_arm_traffic_manager_endpoint.go @@ -38,15 +38,17 @@ func resourceArmTrafficManagerEndpoint() *schema.Resource { Schema: map[string]*schema.Schema{ "name": { - Type: schema.TypeString, - Required: true, - ForceNew: true, + Type: schema.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: validate.NoEmptyStrings, }, "profile_name": { - Type: schema.TypeString, - Required: true, - ForceNew: true, + Type: schema.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: validate.NoEmptyStrings, }, "resource_group_name": azure.SchemaResourceGroupNameDiffSuppress(), diff --git a/azurerm/internal/services/trafficmanager/resource_arm_traffic_manager_profile.go b/azurerm/internal/services/trafficmanager/resource_arm_traffic_manager_profile.go index 39991b3ab057..446df59aebae 100644 --- a/azurerm/internal/services/trafficmanager/resource_arm_traffic_manager_profile.go +++ b/azurerm/internal/services/trafficmanager/resource_arm_traffic_manager_profile.go @@ -1,19 +1,19 @@ package trafficmanager import ( - "bytes" "fmt" "log" + "strconv" "strings" "time" "github.com/Azure/azure-sdk-for-go/services/trafficmanager/mgmt/2018-04-01/trafficmanager" - "github.com/hashicorp/terraform-plugin-sdk/helper/hashcode" "github.com/hashicorp/terraform-plugin-sdk/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/helper/validation" "github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/azure" "github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/suppress" "github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/tf" + "github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/validate" "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/clients" "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/features" "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/tags" @@ -40,9 +40,10 @@ func resourceArmTrafficManagerProfile() *schema.Resource { Schema: map[string]*schema.Schema{ "name": { - Type: schema.TypeString, - Required: true, - ForceNew: true, + Type: schema.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: validate.NoEmptyStrings, }, "resource_group_name": azure.SchemaResourceGroupNameDiffSuppress(), @@ -72,8 +73,9 @@ func resourceArmTrafficManagerProfile() *schema.Resource { }, "dns_config": { - Type: schema.TypeSet, + Type: schema.TypeList, Required: true, + MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "relative_name": { @@ -88,20 +90,23 @@ func resourceArmTrafficManagerProfile() *schema.Resource { }, }, }, - Set: resourceAzureRMTrafficManagerDNSConfigHash, - }, - - // inlined from dns_config for ease of use - "fqdn": { - Type: schema.TypeString, - Computed: true, }, "monitor_config": { - Type: schema.TypeSet, + Type: schema.TypeList, Required: true, + MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ + "expected_status_code_ranges": { + Type: schema.TypeList, + Optional: true, + Elem: &schema.Schema{ + Type: schema.TypeString, + ValidateFunc: validateTrafficManagerProfileStatusCodeRange, + }, + }, + "protocol": { Type: schema.TypeString, Required: true, @@ -112,27 +117,32 @@ func resourceArmTrafficManagerProfile() *schema.Resource { }, true), DiffSuppressFunc: suppress.CaseDifference, }, + "port": { Type: schema.TypeInt, Required: true, ValidateFunc: validation.IntBetween(1, 65535), }, + "path": { Type: schema.TypeString, Optional: true, }, + "interval_in_seconds": { Type: schema.TypeInt, Optional: true, ValidateFunc: validation.IntInSlice([]int{10, 30}), Default: 30, }, + "timeout_in_seconds": { Type: schema.TypeInt, Optional: true, ValidateFunc: validation.IntBetween(5, 10), Default: 10, }, + "tolerated_number_of_failures": { Type: schema.TypeInt, Optional: true, @@ -141,7 +151,11 @@ func resourceArmTrafficManagerProfile() *schema.Resource { }, }, }, - Set: resourceAzureRMTrafficManagerMonitorConfigHash, + }, + + "fqdn": { + Type: schema.TypeString, + Computed: true, }, "tags": tags.Schema(), @@ -157,16 +171,13 @@ func resourceArmTrafficManagerProfileCreateUpdate(d *schema.ResourceData, meta i log.Printf("[INFO] preparing arguments for TrafficManager Profile creation.") name := d.Get("name").(string) - // must be provided in request - location := "global" - resGroup := d.Get("resource_group_name").(string) - t := d.Get("tags").(map[string]interface{}) + resourceGroup := d.Get("resource_group_name").(string) if features.ShouldResourcesBeImported() && d.IsNewResource() { - existing, err := client.Get(ctx, resGroup, name) + existing, err := client.Get(ctx, resourceGroup, name) if err != nil { if !utils.ResponseWasNotFound(existing.Response) { - return fmt.Errorf("Error checking for presence of existing TrafficManager profile %s (resource group %s) ID", name, resGroup) + return fmt.Errorf("Error checking for presence of existing TrafficManager profile %s (resource group %s) ID", name, resourceGroup) } } @@ -175,29 +186,36 @@ func resourceArmTrafficManagerProfileCreateUpdate(d *schema.ResourceData, meta i } } - props, err := getArmTrafficManagerProfileProperties(d) - if err != nil { - // There isn't any additional messaging needed for this error - return err + profile := trafficmanager.Profile{ + Name: &name, + Location: utils.String("global"), // must be provided in request + ProfileProperties: &trafficmanager.ProfileProperties{ + TrafficRoutingMethod: trafficmanager.TrafficRoutingMethod(d.Get("traffic_routing_method").(string)), + DNSConfig: expandArmTrafficManagerDNSConfig(d), + MonitorConfig: expandArmTrafficManagerMonitorConfig(d), + }, + Tags: tags.Expand(d.Get("tags").(map[string]interface{})), } - profile := trafficmanager.Profile{ - Name: &name, - Location: &location, - ProfileProperties: props, - Tags: tags.Expand(t), + if status, ok := d.GetOk("profile_status"); ok { + profile.ProfileStatus = trafficmanager.ProfileStatus(status.(string)) + } + + if *profile.ProfileProperties.MonitorConfig.IntervalInSeconds == int64(10) && + *profile.ProfileProperties.MonitorConfig.TimeoutInSeconds == int64(10) { + return fmt.Errorf("`timeout_in_seconds` must be between `5` and `9` when `interval_in_seconds` is set to `10`") } - if _, err := client.CreateOrUpdate(ctx, resGroup, name, profile); err != nil { + if _, err := client.CreateOrUpdate(ctx, resourceGroup, name, profile); err != nil { return err } - read, err := client.Get(ctx, resGroup, name) + read, err := client.Get(ctx, resourceGroup, name) if err != nil { - return err + return fmt.Errorf("Error reading TrafficManager profile %s (resource group %s): %v", name, resourceGroup, err) } if read.ID == nil { - return fmt.Errorf("Cannot read TrafficManager profile %s (resource group %s) ID", name, resGroup) + return fmt.Errorf("Cannot read TrafficManager profile %s (resource group %s) ID", name, resourceGroup) } d.SetId(*read.ID) @@ -214,10 +232,10 @@ func resourceArmTrafficManagerProfileRead(d *schema.ResourceData, meta interface if err != nil { return err } - resGroup := id.ResourceGroup + resourceGroup := id.ResourceGroup name := id.Path["trafficManagerProfiles"] - resp, err := client.Get(ctx, resGroup, name) + resp, err := client.Get(ctx, resourceGroup, name) if err != nil { if utils.ResponseWasNotFound(resp.Response) { d.SetId("") @@ -226,23 +244,21 @@ func resourceArmTrafficManagerProfileRead(d *schema.ResourceData, meta interface return fmt.Errorf("Error making Read request on Traffic Manager Profile %s: %+v", name, err) } - profile := *resp.ProfileProperties - - // update appropriate values - d.Set("resource_group_name", resGroup) + d.Set("resource_group_name", resourceGroup) d.Set("name", resp.Name) - d.Set("profile_status", profile.ProfileStatus) - d.Set("traffic_routing_method", profile.TrafficRoutingMethod) - - dnsFlat := flattenAzureRMTrafficManagerProfileDNSConfig(profile.DNSConfig) - d.Set("dns_config", schema.NewSet(resourceAzureRMTrafficManagerDNSConfigHash, dnsFlat)) - // fqdn is actually inside DNSConfig, inlined for simpler reference - d.Set("fqdn", profile.DNSConfig.Fqdn) + if profile := resp.ProfileProperties; profile != nil { + d.Set("profile_status", profile.ProfileStatus) + d.Set("traffic_routing_method", profile.TrafficRoutingMethod) - monitorFlat := flattenAzureRMTrafficManagerProfileMonitorConfig(profile.MonitorConfig) - d.Set("monitor_config", schema.NewSet(resourceAzureRMTrafficManagerMonitorConfigHash, monitorFlat)) + d.Set("dns_config", flattenAzureRMTrafficManagerProfileDNSConfig(profile.DNSConfig)) + d.Set("monitor_config", flattenAzureRMTrafficManagerProfileMonitorConfig(profile.MonitorConfig)) + // fqdn is actually inside DNSConfig, inlined for simpler reference + if dns := profile.DNSConfig; dns != nil { + d.Set("fqdn", dns.Fqdn) + } + } return tags.FlattenAndSet(d, resp.Tags) } @@ -255,10 +271,10 @@ func resourceArmTrafficManagerProfileDelete(d *schema.ResourceData, meta interfa if err != nil { return err } - resGroup := id.ResourceGroup + resourceGroup := id.ResourceGroup name := id.Path["trafficManagerProfiles"] - resp, err := client.Delete(ctx, resGroup, name) + resp, err := client.Delete(ctx, resourceGroup, name) if err != nil { if !utils.ResponseWasNotFound(resp.Response) { return err @@ -268,54 +284,38 @@ func resourceArmTrafficManagerProfileDelete(d *schema.ResourceData, meta interfa return nil } -func getArmTrafficManagerProfileProperties(d *schema.ResourceData) (*trafficmanager.ProfileProperties, error) { - routingMethod := d.Get("traffic_routing_method").(string) - - montiorConfig, err := expandArmTrafficManagerMonitorConfig(d) - if err != nil { - return nil, fmt.Errorf("Error expanding `montior_config`: %+v", err) - } - props := &trafficmanager.ProfileProperties{ - TrafficRoutingMethod: trafficmanager.TrafficRoutingMethod(routingMethod), - DNSConfig: expandArmTrafficManagerDNSConfig(d), - MonitorConfig: montiorConfig, - } - - if status, ok := d.GetOk("profile_status"); ok { - s := status.(string) - props.ProfileStatus = trafficmanager.ProfileStatus(s) - } - - return props, nil -} - -func expandArmTrafficManagerMonitorConfig(d *schema.ResourceData) (*trafficmanager.MonitorConfig, error) { - monitorSets := d.Get("monitor_config").(*schema.Set).List() +func expandArmTrafficManagerMonitorConfig(d *schema.ResourceData) *trafficmanager.MonitorConfig { + monitorSets := d.Get("monitor_config").([]interface{}) monitor := monitorSets[0].(map[string]interface{}) - proto := monitor["protocol"].(string) - port := int64(monitor["port"].(int)) - path := monitor["path"].(string) - interval := int64(monitor["interval_in_seconds"].(int)) - timeout := int64(monitor["timeout_in_seconds"].(int)) - tolerated := int64(monitor["tolerated_number_of_failures"].(int)) + cfg := trafficmanager.MonitorConfig{ + Protocol: trafficmanager.MonitorProtocol(monitor["protocol"].(string)), + Port: utils.Int64(int64(monitor["port"].(int))), + Path: utils.String(monitor["path"].(string)), + IntervalInSeconds: utils.Int64(int64(monitor["interval_in_seconds"].(int))), + TimeoutInSeconds: utils.Int64(int64(monitor["timeout_in_seconds"].(int))), + ToleratedNumberOfFailures: utils.Int64(int64(monitor["tolerated_number_of_failures"].(int))), + } - if interval == int64(10) && timeout == int64(10) { - return nil, fmt.Errorf("`timeout_in_seconds` must be between `5` and `9` when `interval_in_seconds` is set to `10`") + if v, ok := monitor["expected_status_code_ranges"].([]interface{}); ok { + ranges := make([]trafficmanager.MonitorConfigExpectedStatusCodeRangesItem, 0) + for _, r := range v { + parts := strings.Split(r.(string), "-") + min, _ := strconv.Atoi(parts[0]) + max, _ := strconv.Atoi(parts[1]) + ranges = append(ranges, trafficmanager.MonitorConfigExpectedStatusCodeRangesItem{ + Min: utils.Int32(int32(min)), + Max: utils.Int32(int32(max)), + }) + } + cfg.ExpectedStatusCodeRanges = &ranges } - return &trafficmanager.MonitorConfig{ - Protocol: trafficmanager.MonitorProtocol(proto), - Port: &port, - Path: &path, - IntervalInSeconds: &interval, - TimeoutInSeconds: &timeout, - ToleratedNumberOfFailures: &tolerated, - }, nil + return &cfg } func expandArmTrafficManagerDNSConfig(d *schema.ResourceData) *trafficmanager.DNSConfig { - dnsSets := d.Get("dns_config").(*schema.Set).List() + dnsSets := d.Get("dns_config").([]interface{}) dns := dnsSets[0].(map[string]interface{}) name := dns["relative_name"].(string) @@ -350,43 +350,45 @@ func flattenAzureRMTrafficManagerProfileMonitorConfig(cfg *trafficmanager.Monito result["timeout_in_seconds"] = int(*cfg.TimeoutInSeconds) result["tolerated_number_of_failures"] = int(*cfg.ToleratedNumberOfFailures) - return []interface{}{result} -} - -func resourceAzureRMTrafficManagerDNSConfigHash(v interface{}) int { - var buf bytes.Buffer + if v := cfg.ExpectedStatusCodeRanges; v != nil { + ranges := make([]string, 0) + for _, r := range *v { + if r.Min == nil || r.Max == nil { + continue + } - if m, ok := v.(map[string]interface{}); ok { - buf.WriteString(fmt.Sprintf("%s-", m["relative_name"].(string))) - buf.WriteString(fmt.Sprintf("%d-", m["ttl"].(int))) + ranges = append(ranges, fmt.Sprintf("%d-%d", *r.Min, *r.Max)) + } + result["expected_status_code_ranges"] = ranges } - return hashcode.String(buf.String()) + return []interface{}{result} } -func resourceAzureRMTrafficManagerMonitorConfigHash(v interface{}) int { - var buf bytes.Buffer - - if m, ok := v.(map[string]interface{}); ok { - buf.WriteString(fmt.Sprintf("%s-", strings.ToLower(m["protocol"].(string)))) - buf.WriteString(fmt.Sprintf("%d-", m["port"].(int))) - - if v, ok := m["path"]; ok && v != "" { - buf.WriteString(fmt.Sprintf("%s-", m["path"].(string))) - } +func validateTrafficManagerProfileStatusCodeRange(i interface{}, k string) (warnings []string, errors []error) { + v, ok := i.(string) + if !ok { + errors = append(errors, fmt.Errorf("expected type of %s to be string", k)) + return warnings, errors + } - if v, ok := m["interval_in_seconds"]; ok && v != "" { - buf.WriteString(fmt.Sprintf("%d-", m["interval_in_seconds"].(int))) - } + parts := strings.Split(v, "-") + if len(parts) != 2 { + errors = append(errors, fmt.Errorf("expected %s to contain a single '-', got %v", k, i)) + return warnings, errors + } - if v, ok := m["timeout_in_seconds"]; ok && v != "" { - buf.WriteString(fmt.Sprintf("%d-", m["timeout_in_seconds"].(int))) - } + _, err := strconv.Atoi(parts[0]) + if err != nil { + errors = append(errors, fmt.Errorf("expected %s on the left of - to be an integer, got %v: %v", k, i, err)) + return warnings, errors + } - if v, ok := m["tolerated_number_of_failures"]; ok && v != "" { - buf.WriteString(fmt.Sprintf("%d-", m["tolerated_number_of_failures"].(int))) - } + _, err = strconv.Atoi(parts[1]) + if err != nil { + errors = append(errors, fmt.Errorf("expected %s on the right of - to be an integer, got %v: %v", k, i, err)) + return warnings, errors } - return hashcode.String(buf.String()) + return warnings, errors } diff --git a/azurerm/internal/services/trafficmanager/tests/resource_arm_traffic_manager_endpoint_test.go b/azurerm/internal/services/trafficmanager/tests/resource_arm_traffic_manager_endpoint_test.go index 262b9b55fd73..93af256268de 100644 --- a/azurerm/internal/services/trafficmanager/tests/resource_arm_traffic_manager_endpoint_test.go +++ b/azurerm/internal/services/trafficmanager/tests/resource_arm_traffic_manager_endpoint_test.go @@ -419,17 +419,17 @@ func testCheckAzureRMTrafficManagerEndpointDestroy(s *terraform.State) error { func testAccAzureRMTrafficManagerEndpoint_basic(data acceptance.TestData) string { return fmt.Sprintf(` resource "azurerm_resource_group" "test" { - name = "acctestRG-%d" + name = "acctestRG-traffic-%d" location = "%s" } resource "azurerm_traffic_manager_profile" "test" { - name = "acctesttmp%d" + name = "acctest-TMP-%d" resource_group_name = "${azurerm_resource_group.test.name}" traffic_routing_method = "Weighted" dns_config { - relative_name = "acctesttmp%d" + relative_name = "acctest-tmp-%d" ttl = 30 } @@ -487,17 +487,17 @@ resource "azurerm_traffic_manager_endpoint" "import" { func testAccAzureRMTrafficManagerEndpoint_basicDisableExternal(data acceptance.TestData) string { return fmt.Sprintf(` resource "azurerm_resource_group" "test" { - name = "acctestRG-%d" + name = "acctestRG-traffic-%d" location = "%s" } resource "azurerm_traffic_manager_profile" "test" { - name = "acctesttmp%d" + name = "acctest-TMP-%d" resource_group_name = "${azurerm_resource_group.test.name}" traffic_routing_method = "Weighted" dns_config { - relative_name = "acctesttmp%d" + relative_name = "acctest-tmp-%d" ttl = 30 } @@ -540,17 +540,17 @@ resource "azurerm_traffic_manager_endpoint" "testExternal" { func testAccAzureRMTrafficManagerEndpoint_weight(data acceptance.TestData) string { return fmt.Sprintf(` resource "azurerm_resource_group" "test" { - name = "acctestRG-%d" + name = "acctestRG-traffic-%d" location = "%s" } resource "azurerm_traffic_manager_profile" "test" { - name = "acctesttmp%d" + name = "acctest-TMP-%d" resource_group_name = "${azurerm_resource_group.test.name}" traffic_routing_method = "Weighted" dns_config { - relative_name = "acctesttmp%d" + relative_name = "acctest-tmp-%d" ttl = 30 } @@ -584,17 +584,17 @@ resource "azurerm_traffic_manager_endpoint" "testExternalNew" { func testAccAzureRMTrafficManagerEndpoint_updateWeight(data acceptance.TestData) string { return fmt.Sprintf(` resource "azurerm_resource_group" "test" { - name = "acctestRG-%d" + name = "acctestRG-traffic-%d" location = "%s" } resource "azurerm_traffic_manager_profile" "test" { - name = "acctesttmp%d" + name = "acctest-TMP-%d" resource_group_name = "${azurerm_resource_group.test.name}" traffic_routing_method = "Weighted" dns_config { - relative_name = "acctesttmp%d" + relative_name = "acctest-tmp-%d" ttl = 30 } @@ -627,17 +627,17 @@ resource "azurerm_traffic_manager_endpoint" "testExternalNew" { func testAccAzureRMTrafficManagerEndpoint_priority(data acceptance.TestData) string { return fmt.Sprintf(` resource "azurerm_resource_group" "test" { - name = "acctestRG-%d" + name = "acctestRG-traffic-%d" location = "%s" } resource "azurerm_traffic_manager_profile" "test" { - name = "acctesttmp%d" + name = "acctest-TMP-%d" resource_group_name = "${azurerm_resource_group.test.name}" traffic_routing_method = "Priority" dns_config { - relative_name = "acctesttmp%d" + relative_name = "acctest-tmp-%d" ttl = 30 } @@ -671,17 +671,17 @@ resource "azurerm_traffic_manager_endpoint" "testExternalNew" { func testAccAzureRMTrafficManagerEndpoint_updatePriority(data acceptance.TestData) string { return fmt.Sprintf(` resource "azurerm_resource_group" "test" { - name = "acctestRG-%d" + name = "acctestRG-traffic-%d" location = "%s" } resource "azurerm_traffic_manager_profile" "test" { - name = "acctesttmp%d" + name = "acctest-TMP-%d" resource_group_name = "${azurerm_resource_group.test.name}" traffic_routing_method = "Priority" dns_config { - relative_name = "acctesttmp%d" + relative_name = "acctest-tmp-%d" ttl = 30 } @@ -715,17 +715,17 @@ resource "azurerm_traffic_manager_endpoint" "testExternalNew" { func testAccAzureRMTrafficManagerEndpoint_subnets(data acceptance.TestData) string { return fmt.Sprintf(` resource "azurerm_resource_group" "test" { - name = "acctestRG-%d" + name = "acctestRG-traffic-%d" location = "%s" } resource "azurerm_traffic_manager_profile" "test" { - name = "acctesttmp%d" + name = "acctest-TMP-%d" resource_group_name = "${azurerm_resource_group.test.name}" traffic_routing_method = "Subnet" dns_config { - relative_name = "acctesttmp%d" + relative_name = "acctest-tmp-%d" ttl = 30 } @@ -769,17 +769,17 @@ resource "azurerm_traffic_manager_endpoint" "testExternalNew" { func testAccAzureRMTrafficManagerEndpoint_updateSubnets(data acceptance.TestData) string { return fmt.Sprintf(` resource "azurerm_resource_group" "test" { - name = "acctestRG-%d" + name = "acctestRG-traffic-%d" location = "%s" } resource "azurerm_traffic_manager_profile" "test" { - name = "acctesttmp%d" + name = "acctest-TMP-%d" resource_group_name = "${azurerm_resource_group.test.name}" traffic_routing_method = "Subnet" dns_config { - relative_name = "acctesttmp%d" + relative_name = "acctest-tmp-%d" ttl = 30 } @@ -815,17 +815,17 @@ resource "azurerm_traffic_manager_endpoint" "testExternalNew" { func testAccAzureRMTrafficManagerEndpoint_headers(data acceptance.TestData) string { return fmt.Sprintf(` resource "azurerm_resource_group" "test" { - name = "acctestRG-%d" + name = "acctestRG-traffic-%d" location = "%s" } resource "azurerm_traffic_manager_profile" "test" { - name = "acctesttmp%d" + name = "acctest-TMP-%d" resource_group_name = "${azurerm_resource_group.test.name}" traffic_routing_method = "Priority" dns_config { - relative_name = "acctesttmp%d" + relative_name = "acctest-tmp-%d" ttl = 30 } @@ -863,17 +863,17 @@ resource "azurerm_traffic_manager_endpoint" "testExternalNew" { func testAccAzureRMTrafficManagerEndpoint_updateHeaders(data acceptance.TestData) string { return fmt.Sprintf(` resource "azurerm_resource_group" "test" { - name = "acctestRG-%d" + name = "acctestRG-traffic-%d" location = "%s" } resource "azurerm_traffic_manager_profile" "test" { - name = "acctesttmp%d" + name = "acctest-TMP-%d" resource_group_name = "${azurerm_resource_group.test.name}" traffic_routing_method = "Priority" dns_config { - relative_name = "acctesttmp%d" + relative_name = "acctest-tmp-%d" ttl = 30 } @@ -911,7 +911,7 @@ resource "azurerm_traffic_manager_endpoint" "testExternalNew" { func testAccAzureRMTrafficManagerEndpoint_nestedEndpoints(data acceptance.TestData) string { return fmt.Sprintf(` resource "azurerm_resource_group" "test" { - name = "acctestRG-%d" + name = "acctestRG-traffic-%d" location = "%s" } @@ -973,7 +973,7 @@ resource "azurerm_traffic_manager_endpoint" "externalChild" { func testAccAzureRMTrafficManagerEndpoint_location(data acceptance.TestData) string { return fmt.Sprintf(` resource "azurerm_resource_group" "test" { - name = "acctestRG-%d" + name = "acctestRG-traffic-%d" location = "%s" } @@ -1008,7 +1008,7 @@ resource "azurerm_traffic_manager_endpoint" "test" { func testAccAzureRMTrafficManagerEndpoint_locationUpdated(data acceptance.TestData) string { return fmt.Sprintf(` resource "azurerm_resource_group" "test" { - name = "acctestRG-%d" + name = "acctestRG-traffic-%d" location = "%s" } @@ -1043,17 +1043,17 @@ resource "azurerm_traffic_manager_endpoint" "test" { func testAccAzureRMTrafficManagerEndpoint_geoMappings(data acceptance.TestData) string { return fmt.Sprintf(` resource "azurerm_resource_group" "test" { - name = "acctestRG-%d" + name = "acctestRG-traffic-%d" location = "%s" } resource "azurerm_traffic_manager_profile" "test" { - name = "acctesttmp%d" + name = "acctest-TMP-%d" resource_group_name = "${azurerm_resource_group.test.name}" traffic_routing_method = "Geographic" dns_config { - relative_name = "acctesttmp%d" + relative_name = "acctest-tmp-%d" ttl = 100 } @@ -1082,17 +1082,17 @@ resource "azurerm_traffic_manager_endpoint" "test" { func testAccAzureRMTrafficManagerEndpoint_geoMappingsUpdated(data acceptance.TestData) string { return fmt.Sprintf(` resource "azurerm_resource_group" "test" { - name = "acctestRG-%d" + name = "acctestRG-traffic-%d" location = "%s" } resource "azurerm_traffic_manager_profile" "test" { - name = "acctesttmp%d" + name = "acctest-TMP-%d" resource_group_name = "${azurerm_resource_group.test.name}" traffic_routing_method = "Geographic" dns_config { - relative_name = "acctesttmp%d" + relative_name = "acctest-tmp-%d" ttl = 100 } diff --git a/azurerm/internal/services/trafficmanager/tests/resource_arm_traffic_manager_profile_test.go b/azurerm/internal/services/trafficmanager/tests/resource_arm_traffic_manager_profile_test.go index 14f3f327aea1..3c50dc098bc3 100644 --- a/azurerm/internal/services/trafficmanager/tests/resource_arm_traffic_manager_profile_test.go +++ b/azurerm/internal/services/trafficmanager/tests/resource_arm_traffic_manager_profile_test.go @@ -14,16 +14,7 @@ import ( "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/features" ) -func getTrafficManagerFQDN(hostname string) (string, error) { - environment, err := acceptance.Environment() - if err != nil { - return "", err - } - dnsSuffix := environment.TrafficManagerDNSSuffix - return fmt.Sprintf("%s.%s", hostname, dnsSuffix), nil -} - -func TestAccAzureRMTrafficManagerProfile_geographic(t *testing.T) { +func TestAccAzureRMTrafficManagerProfile_basic(t *testing.T) { data := acceptance.BuildTestData(t, "azurerm_traffic_manager_profile", "test") resource.ParallelTest(t, resource.TestCase{ @@ -32,59 +23,30 @@ func TestAccAzureRMTrafficManagerProfile_geographic(t *testing.T) { CheckDestroy: testCheckAzureRMTrafficManagerProfileDestroy, Steps: []resource.TestStep{ { - Config: testAccAzureRMTrafficManagerProfile_geographic(data), + Config: testAccAzureRMTrafficManagerProfile_basic(data, "Geographic"), Check: resource.ComposeTestCheckFunc( testCheckAzureRMTrafficManagerProfileExists(data.ResourceName), resource.TestCheckResourceAttr(data.ResourceName, "traffic_routing_method", "Geographic"), + resource.TestCheckResourceAttr(data.ResourceName, "fqdn", fmt.Sprintf("acctest-tmp-%d.trafficmanager.net", data.RandomInteger)), ), }, data.ImportStep(), }, }) } -func TestAccAzureRMTrafficManagerProfile_requiresImport(t *testing.T) { - if !features.ShouldResourcesBeImported() { - t.Skip("Skipping since resources aren't required to be imported") - return - } - data := acceptance.BuildTestData(t, "azurerm_traffic_manager_profile", "test") - resource.ParallelTest(t, resource.TestCase{ - PreCheck: func() { acceptance.PreCheck(t) }, - Providers: acceptance.SupportedProviders, - CheckDestroy: testCheckAzureRMTrafficManagerProfileDestroy, - Steps: []resource.TestStep{ - { - Config: testAccAzureRMTrafficManagerProfile_geographic(data), - Check: resource.ComposeTestCheckFunc( - testCheckAzureRMTrafficManagerProfileExists(data.ResourceName), - resource.TestCheckResourceAttr(data.ResourceName, "traffic_routing_method", "Geographic"), - ), - }, - data.RequiresImportErrorStep(testAccAzureRMTrafficManagerProfile_requiresImport), - }, - }) -} - -func TestAccAzureRMTrafficManagerProfile_weighted(t *testing.T) { +func TestAccAzureRMTrafficManagerProfile_complete(t *testing.T) { data := acceptance.BuildTestData(t, "azurerm_traffic_manager_profile", "test") - fqdn, err := getTrafficManagerFQDN(fmt.Sprintf("acctesttmp%d", data.RandomInteger)) - if err != nil { - t.Fatalf("Error obtaining Azure Region: %+v", err) - } - resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acceptance.PreCheck(t) }, Providers: acceptance.SupportedProviders, CheckDestroy: testCheckAzureRMTrafficManagerProfileDestroy, Steps: []resource.TestStep{ { - Config: testAccAzureRMTrafficManagerProfile_weighted(data), + Config: testAccAzureRMTrafficManagerProfile_complete(data), Check: resource.ComposeTestCheckFunc( testCheckAzureRMTrafficManagerProfileExists(data.ResourceName), - resource.TestCheckResourceAttr(data.ResourceName, "traffic_routing_method", "Weighted"), - resource.TestCheckResourceAttr(data.ResourceName, "fqdn", fqdn), ), }, data.ImportStep(), @@ -92,51 +54,25 @@ func TestAccAzureRMTrafficManagerProfile_weighted(t *testing.T) { }) } -func TestAccAzureRMTrafficManagerProfile_weightedTCP(t *testing.T) { +func TestAccAzureRMTrafficManagerProfile_update(t *testing.T) { data := acceptance.BuildTestData(t, "azurerm_traffic_manager_profile", "test") - fqdn, err := getTrafficManagerFQDN(fmt.Sprintf("acctesttmp%d", data.RandomInteger)) - if err != nil { - t.Fatalf("Error obtaining Azure Region: %+v", err) - } - resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acceptance.PreCheck(t) }, Providers: acceptance.SupportedProviders, CheckDestroy: testCheckAzureRMTrafficManagerProfileDestroy, Steps: []resource.TestStep{ { - Config: testAccAzureRMTrafficManagerProfile_weightedTCP(data), + Config: testAccAzureRMTrafficManagerProfile_complete(data), Check: resource.ComposeTestCheckFunc( testCheckAzureRMTrafficManagerProfileExists(data.ResourceName), - resource.TestCheckResourceAttr(data.ResourceName, "traffic_routing_method", "Weighted"), - resource.TestCheckResourceAttr(data.ResourceName, "fqdn", fqdn), ), }, data.ImportStep(), - }, - }) -} - -func TestAccAzureRMTrafficManagerProfile_performance(t *testing.T) { - data := acceptance.BuildTestData(t, "azurerm_traffic_manager_profile", "test") - - fqdn, err := getTrafficManagerFQDN(fmt.Sprintf("acctesttmp%d", data.RandomInteger)) - if err != nil { - t.Fatalf("Error obtaining Azure Region: %+v", err) - } - - resource.ParallelTest(t, resource.TestCase{ - PreCheck: func() { acceptance.PreCheck(t) }, - Providers: acceptance.SupportedProviders, - CheckDestroy: testCheckAzureRMTrafficManagerProfileDestroy, - Steps: []resource.TestStep{ { - Config: testAccAzureRMTrafficManagerProfile_performance(data), + Config: testAccAzureRMTrafficManagerProfile_completeUpdated(data), Check: resource.ComposeTestCheckFunc( testCheckAzureRMTrafficManagerProfileExists(data.ResourceName), - resource.TestCheckResourceAttr(data.ResourceName, "traffic_routing_method", "Performance"), - resource.TestCheckResourceAttr(data.ResourceName, "fqdn", fqdn), ), }, data.ImportStep(), @@ -144,147 +80,80 @@ func TestAccAzureRMTrafficManagerProfile_performance(t *testing.T) { }) } -func TestAccAzureRMTrafficManagerProfile_priority(t *testing.T) { - data := acceptance.BuildTestData(t, "azurerm_traffic_manager_profile", "test") - - fqdn, err := getTrafficManagerFQDN(fmt.Sprintf("acctesttmp%d", data.RandomInteger)) - if err != nil { - t.Fatalf("Error obtaining Azure Region: %+v", err) +func TestAccAzureRMTrafficManagerProfile_requiresImport(t *testing.T) { + if !features.ShouldResourcesBeImported() { + t.Skip("Skipping since resources aren't required to be imported") + return } - resource.ParallelTest(t, resource.TestCase{ - PreCheck: func() { acceptance.PreCheck(t) }, - Providers: acceptance.SupportedProviders, - CheckDestroy: testCheckAzureRMTrafficManagerProfileDestroy, - Steps: []resource.TestStep{ - { - Config: testAccAzureRMTrafficManagerProfile_priority(data), - Check: resource.ComposeTestCheckFunc( - testCheckAzureRMTrafficManagerProfileExists(data.ResourceName), - resource.TestCheckResourceAttr(data.ResourceName, "traffic_routing_method", "Priority"), - resource.TestCheckResourceAttr(data.ResourceName, "fqdn", fqdn), - ), - }, - data.ImportStep(), - }, - }) -} - -func TestAccAzureRMTrafficManagerProfile_withTags(t *testing.T) { data := acceptance.BuildTestData(t, "azurerm_traffic_manager_profile", "test") - resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acceptance.PreCheck(t) }, Providers: acceptance.SupportedProviders, CheckDestroy: testCheckAzureRMTrafficManagerProfileDestroy, Steps: []resource.TestStep{ { - Config: testAccAzureRMTrafficManagerProfile_withTags(data), + Config: testAccAzureRMTrafficManagerProfile_basic(data, "Geographic"), Check: resource.ComposeTestCheckFunc( testCheckAzureRMTrafficManagerProfileExists(data.ResourceName), - resource.TestCheckResourceAttr(data.ResourceName, "tags.%", "2"), - resource.TestCheckResourceAttr(data.ResourceName, "tags.environment", "Production"), - resource.TestCheckResourceAttr(data.ResourceName, "tags.cost_center", "MSFT"), - ), - }, - { - Config: testAccAzureRMTrafficManagerProfile_withTagsUpdated(data), - Check: resource.ComposeTestCheckFunc( - testCheckAzureRMTrafficManagerProfileExists(data.ResourceName), - resource.TestCheckResourceAttr(data.ResourceName, "tags.%", "1"), - resource.TestCheckResourceAttr(data.ResourceName, "tags.environment", "staging"), + resource.TestCheckResourceAttr(data.ResourceName, "traffic_routing_method", "Geographic"), ), }, - data.ImportStep(), + data.RequiresImportErrorStep(testAccAzureRMTrafficManagerProfile_requiresImport), }, }) } -func TestAccAzureRMTrafficManagerProfile_performanceToGeographic(t *testing.T) { +func TestAccAzureRMTrafficManagerProfile_cycleMethod(t *testing.T) { data := acceptance.BuildTestData(t, "azurerm_traffic_manager_profile", "test") - fqdn, err := getTrafficManagerFQDN(fmt.Sprintf("acctesttmp%d", data.RandomInteger)) - if err != nil { - t.Fatalf("Error obtaining Azure Region: %+v", err) - } - resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acceptance.PreCheck(t) }, Providers: acceptance.SupportedProviders, CheckDestroy: testCheckAzureRMTrafficManagerProfileDestroy, Steps: []resource.TestStep{ { - Config: testAccAzureRMTrafficManagerProfile_performance(data), - Check: resource.ComposeTestCheckFunc( - testCheckAzureRMTrafficManagerProfileExists(data.ResourceName), - resource.TestCheckResourceAttr(data.ResourceName, "traffic_routing_method", "Performance"), - resource.TestCheckResourceAttr(data.ResourceName, "fqdn", fqdn), - ), - }, - { - Config: testAccAzureRMTrafficManagerProfile_geographic(data), + Config: testAccAzureRMTrafficManagerProfile_basic(data, "Geographic"), Check: resource.ComposeTestCheckFunc( testCheckAzureRMTrafficManagerProfileExists(data.ResourceName), resource.TestCheckResourceAttr(data.ResourceName, "traffic_routing_method", "Geographic"), - resource.TestCheckResourceAttr(data.ResourceName, "fqdn", fqdn), + resource.TestCheckResourceAttr(data.ResourceName, "fqdn", fmt.Sprintf("acctest-tmp-%d.trafficmanager.net", data.RandomInteger)), ), }, - }, - }) -} - -func TestAccAzureRMTrafficManagerProfile_priorityToWeighted(t *testing.T) { - data := acceptance.BuildTestData(t, "azurerm_traffic_manager_profile", "test") - - fqdn, err := getTrafficManagerFQDN(fmt.Sprintf("acctesttmp%d", data.RandomInteger)) - if err != nil { - t.Fatalf("Error obtaining Azure Region: %+v", err) - } - - resource.ParallelTest(t, resource.TestCase{ - PreCheck: func() { acceptance.PreCheck(t) }, - Providers: acceptance.SupportedProviders, - CheckDestroy: testCheckAzureRMTrafficManagerProfileDestroy, - Steps: []resource.TestStep{ + data.ImportStep(), { - Config: testAccAzureRMTrafficManagerProfile_priority(data), + Config: testAccAzureRMTrafficManagerProfile_basic(data, "Weighted"), Check: resource.ComposeTestCheckFunc( testCheckAzureRMTrafficManagerProfileExists(data.ResourceName), - resource.TestCheckResourceAttr(data.ResourceName, "traffic_routing_method", "Priority"), - resource.TestCheckResourceAttr(data.ResourceName, "fqdn", fqdn), + resource.TestCheckResourceAttr(data.ResourceName, "traffic_routing_method", "Weighted"), + resource.TestCheckResourceAttr(data.ResourceName, "fqdn", fmt.Sprintf("acctest-tmp-%d.trafficmanager.net", data.RandomInteger)), ), }, + data.ImportStep(), { - Config: testAccAzureRMTrafficManagerProfile_weighted(data), + Config: testAccAzureRMTrafficManagerProfile_basic(data, "Subnet"), Check: resource.ComposeTestCheckFunc( testCheckAzureRMTrafficManagerProfileExists(data.ResourceName), - resource.TestCheckResourceAttr(data.ResourceName, "traffic_routing_method", "Weighted"), - resource.TestCheckResourceAttr(data.ResourceName, "fqdn", fqdn), + resource.TestCheckResourceAttr(data.ResourceName, "traffic_routing_method", "Subnet"), + resource.TestCheckResourceAttr(data.ResourceName, "fqdn", fmt.Sprintf("acctest-tmp-%d.trafficmanager.net", data.RandomInteger)), ), }, - }, - }) -} - -func TestAccAzureRMTrafficManagerProfile_fastEndpointFailoverSettings(t *testing.T) { - data := acceptance.BuildTestData(t, "azurerm_traffic_manager_profile", "test") - - resource.ParallelTest(t, resource.TestCase{ - PreCheck: func() { acceptance.PreCheck(t) }, - Providers: acceptance.SupportedProviders, - CheckDestroy: testCheckAzureRMTrafficManagerProfileDestroy, - Steps: []resource.TestStep{ + data.ImportStep(), { - Config: testAccAzureRMTrafficManagerProfile_failover(data), + Config: testAccAzureRMTrafficManagerProfile_basic(data, "Priority"), Check: resource.ComposeTestCheckFunc( testCheckAzureRMTrafficManagerProfileExists(data.ResourceName), + resource.TestCheckResourceAttr(data.ResourceName, "traffic_routing_method", "Priority"), + resource.TestCheckResourceAttr(data.ResourceName, "fqdn", fmt.Sprintf("acctest-tmp-%d.trafficmanager.net", data.RandomInteger)), ), }, data.ImportStep(), { - Config: testAccAzureRMTrafficManagerProfile_failoverUpdate(data), + Config: testAccAzureRMTrafficManagerProfile_basic(data, "Performance"), Check: resource.ComposeTestCheckFunc( testCheckAzureRMTrafficManagerProfileExists(data.ResourceName), + resource.TestCheckResourceAttr(data.ResourceName, "traffic_routing_method", "Performance"), + resource.TestCheckResourceAttr(data.ResourceName, "fqdn", fmt.Sprintf("acctest-tmp-%d.trafficmanager.net", data.RandomInteger)), ), }, data.ImportStep(), @@ -365,20 +234,20 @@ func testCheckAzureRMTrafficManagerProfileDestroy(s *terraform.State) error { return nil } -func testAccAzureRMTrafficManagerProfile_geographic(data acceptance.TestData) string { +func testAccAzureRMTrafficManagerProfile_basic(data acceptance.TestData, method string) string { return fmt.Sprintf(` resource "azurerm_resource_group" "test" { - name = "acctestRG-%d" - location = "%s" + name = "acctestRG-traffic-%[1]d" + location = "%[2]s" } resource "azurerm_traffic_manager_profile" "test" { - name = "acctesttmp%d" + name = "acctest-TMP-%[1]d" resource_group_name = "${azurerm_resource_group.test.name}" - traffic_routing_method = "Geographic" + traffic_routing_method = "%[3]s" dns_config { - relative_name = "acctesttmp%d" + relative_name = "acctest-tmp-%[1]d" ttl = 30 } @@ -388,10 +257,11 @@ resource "azurerm_traffic_manager_profile" "test" { path = "/" } } -`, data.RandomInteger, data.Locations.Primary, data.RandomInteger, data.RandomInteger) +`, data.RandomInteger, data.Locations.Primary, method) } + func testAccAzureRMTrafficManagerProfile_requiresImport(data acceptance.TestData) string { - template := testAccAzureRMTrafficManagerProfile_geographic(data) + template := testAccAzureRMTrafficManagerProfile_basic(data, "Geographic") return fmt.Sprintf(` %s @@ -401,7 +271,7 @@ resource "azurerm_traffic_manager_profile" "import" { traffic_routing_method = "${azurerm_traffic_manager_profile.test.traffic_routing_method}" dns_config { - relative_name = "acctesttmp%d" + relative_name = "acctest-tmp-%d" ttl = 30 } @@ -414,223 +284,78 @@ resource "azurerm_traffic_manager_profile" "import" { `, template, data.RandomInteger) } -func testAccAzureRMTrafficManagerProfile_weighted(data acceptance.TestData) string { +func testAccAzureRMTrafficManagerProfile_complete(data acceptance.TestData) string { return fmt.Sprintf(` resource "azurerm_resource_group" "test" { - name = "acctestRG-%d" + name = "acctestRG-traffic-%d" location = "%s" } resource "azurerm_traffic_manager_profile" "test" { - name = "acctesttmp%d" - resource_group_name = "${azurerm_resource_group.test.name}" - traffic_routing_method = "Weighted" - - dns_config { - relative_name = "acctesttmp%d" - ttl = 30 - } - - monitor_config { - protocol = "https" - port = 443 - path = "/" - } -} -`, data.RandomInteger, data.Locations.Primary, data.RandomInteger, data.RandomInteger) -} - -func testAccAzureRMTrafficManagerProfile_weightedTCP(data acceptance.TestData) string { - return fmt.Sprintf(` -resource "azurerm_resource_group" "test" { - name = "acctestRG-%d" - location = "%s" -} - -resource "azurerm_traffic_manager_profile" "test" { - name = "acctesttmp%d" - resource_group_name = "${azurerm_resource_group.test.name}" - traffic_routing_method = "Weighted" - - dns_config { - relative_name = "acctesttmp%d" - ttl = 30 - } - - monitor_config { - protocol = "tcp" - port = 443 - } -} -`, data.RandomInteger, data.Locations.Primary, data.RandomInteger, data.RandomInteger) -} - -func testAccAzureRMTrafficManagerProfile_performance(data acceptance.TestData) string { - return fmt.Sprintf(` -resource "azurerm_resource_group" "test" { - name = "acctestRG-%d" - location = "%s" -} - -resource "azurerm_traffic_manager_profile" "test" { - name = "acctesttmp%d" + name = "acctest-TMP-%d" resource_group_name = "${azurerm_resource_group.test.name}" traffic_routing_method = "Performance" dns_config { - relative_name = "acctesttmp%d" + relative_name = "acctest-tmp-%d" ttl = 30 } monitor_config { - protocol = "https" - port = 443 - path = "/" - } -} -`, data.RandomInteger, data.Locations.Primary, data.RandomInteger, data.RandomInteger) -} - -func testAccAzureRMTrafficManagerProfile_priority(data acceptance.TestData) string { - return fmt.Sprintf(` -resource "azurerm_resource_group" "test" { - name = "acctestRG-%d" - location = "%s" -} - -resource "azurerm_traffic_manager_profile" "test" { - name = "acctesttmp%d" - resource_group_name = "${azurerm_resource_group.test.name}" - traffic_routing_method = "Priority" - - dns_config { - relative_name = "acctesttmp%d" - ttl = 30 - } - - monitor_config { - protocol = "https" - port = 443 - path = "/" - } -} -`, data.RandomInteger, data.Locations.Primary, data.RandomInteger, data.RandomInteger) -} - -func testAccAzureRMTrafficManagerProfile_withTags(data acceptance.TestData) string { - return fmt.Sprintf(` -resource "azurerm_resource_group" "test" { - name = "acctestRG-%d" - location = "%s" -} + expected_status_code_ranges = [ + "100-101", + "301-303", + ] -resource "azurerm_traffic_manager_profile" "test" { - name = "acctesttmp%d" - resource_group_name = "${azurerm_resource_group.test.name}" - traffic_routing_method = "Priority" - - dns_config { - relative_name = "acctesttmp%d" - ttl = 30 - } + protocol = "tcp" + port = 777 - monitor_config { - protocol = "https" - port = 443 - path = "/" + interval_in_seconds = 30 + timeout_in_seconds = 9 + tolerated_number_of_failures = 6 } tags = { - environment = "Production" - cost_center = "MSFT" + Environment = "Production" + cost_center = "acctest" } } `, data.RandomInteger, data.Locations.Primary, data.RandomInteger, data.RandomInteger) } -func testAccAzureRMTrafficManagerProfile_withTagsUpdated(data acceptance.TestData) string { +func testAccAzureRMTrafficManagerProfile_completeUpdated(data acceptance.TestData) string { return fmt.Sprintf(` resource "azurerm_resource_group" "test" { - name = "acctestRG-%d" + name = "acctestRG-traffic-%d" location = "%s" } resource "azurerm_traffic_manager_profile" "test" { - name = "acctesttmp%d" + name = "acctest-TMP-%d" resource_group_name = "${azurerm_resource_group.test.name}" traffic_routing_method = "Priority" dns_config { - relative_name = "acctesttmp%d" + relative_name = "acctest-tmp-rename-%d" ttl = 30 } monitor_config { + expected_status_code_ranges = [ + "302-304", + ] + protocol = "https" - port = 443 + port = 442 path = "/" - } - - tags = { - environment = "staging" - } -} -`, data.RandomInteger, data.Locations.Primary, data.RandomInteger, data.RandomInteger) -} - -func testAccAzureRMTrafficManagerProfile_failover(data acceptance.TestData) string { - return fmt.Sprintf(` -resource "azurerm_resource_group" "test" { - name = "acctestRG-%d" - location = "%s" -} - -resource "azurerm_traffic_manager_profile" "test" { - name = "acctesttmp%d" - resource_group_name = "${azurerm_resource_group.test.name}" - traffic_routing_method = "Performance" - dns_config { - relative_name = "acctesttmp%d" - ttl = 30 - } - - monitor_config { - protocol = "https" - port = 443 - path = "/" interval_in_seconds = 30 timeout_in_seconds = 6 tolerated_number_of_failures = 3 } -} -`, data.RandomInteger, data.Locations.Primary, data.RandomInteger, data.RandomInteger) -} - -func testAccAzureRMTrafficManagerProfile_failoverUpdate(data acceptance.TestData) string { - return fmt.Sprintf(` -resource "azurerm_resource_group" "test" { - name = "acctestRG-%d" - location = "%s" -} - -resource "azurerm_traffic_manager_profile" "test" { - name = "acctesttmp%d" - resource_group_name = "${azurerm_resource_group.test.name}" - traffic_routing_method = "Performance" - - dns_config { - relative_name = "acctesttmp%d" - ttl = 30 - } - monitor_config { - protocol = "https" - port = 443 - path = "/" - interval_in_seconds = 30 - timeout_in_seconds = 9 - tolerated_number_of_failures = 6 + tags = { + Environment = "staging" } } `, data.RandomInteger, data.Locations.Primary, data.RandomInteger, data.RandomInteger) @@ -639,17 +364,17 @@ resource "azurerm_traffic_manager_profile" "test" { func testAccAzureRMTrafficManagerProfile_failoverError(data acceptance.TestData) string { return fmt.Sprintf(` resource "azurerm_resource_group" "test" { - name = "acctestRG-%d" + name = "acctestRG-traffic-%d" location = "%s" } resource "azurerm_traffic_manager_profile" "test" { - name = "acctesttmp%d" + name = "acctest-TMP-%d" resource_group_name = "${azurerm_resource_group.test.name}" traffic_routing_method = "Performance" dns_config { - relative_name = "acctesttmp%d" + relative_name = "acctest-tmp-%d" ttl = 30 } diff --git a/website/docs/r/traffic_manager_profile.html.markdown b/website/docs/r/traffic_manager_profile.html.markdown index 43e9bad2a51d..fa218546addb 100644 --- a/website/docs/r/traffic_manager_profile.html.markdown +++ b/website/docs/r/traffic_manager_profile.html.markdown @@ -93,13 +93,14 @@ The `dns_config` block supports: The `monitor_config` block supports: -* `protocol` - (Required) The protocol used by the monitoring checks, supported - values are `HTTP`, `HTTPS` and `TCP`. +* `protocol` - (Required) The protocol used by the monitoring checks, supported values are `HTTP`, `HTTPS` and `TCP`. * `port` - (Required) The port number used by the monitoring checks. * `path` - (Optional) The path used by the monitoring checks. Required when `protocol` is set to `HTTP` or `HTTPS` - cannot be set when `protocol` is set to `TCP`. +* `expected_status_code_ranges` - (Optional) A list of status code ranges in the format of `100-101`. + * `interval_in_seconds` - (Optional) The interval used to check the endpoint health from a Traffic Manager probing agent. You can specify two values here: `30` (normal probing) and `10` (fast probing). The default value is `30`. * `timeout_in_seconds` - (Optional) The amount of time the Traffic Manager probing agent should wait before considering that check a failure when a health check probe is sent to the endpoint. If `interval_in_seconds` is set to `30`, then `timeout_in_seconds` can be between `5` and `10`. The default value is `10`. If `interval_in_seconds` is set to `10`, then valid values are between `5` and `9` and `timeout_in_seconds` is required.