provider/aws: Fix aws_route53_record alias perpetual diff (#9704)
Fixes #9628 Fixes #9298 When a route53_record alias is updated in the console, AWS prepends `dualstack.` to the name. This is there incase IPV6 is wanted. It is exactly the same without it as it is with it In order to stop perpetual diffs, I introduced a normalizeFunc that will that tke alias name and strip known issues: * dualstack * trailing dot This normalize fun will continue to grow I'm sure ``` % make testacc TEST=./builtin/providers/aws TESTARGS='-run=TestAccAWSRoute53Record_' ✹ ==> Checking that code complies with gofmt requirements... go generate $(go list ./... | grep -v /terraform/vendor/) 2016/10/29 00:28:12 Generated command/internal_plugin_list.go TF_ACC=1 go test ./builtin/providers/aws -v -run=TestAccAWSRoute53Record_ -timeout 120m === RUN TestAccAWSRoute53Record_basic --- PASS: TestAccAWSRoute53Record_basic (124.64s) === RUN TestAccAWSRoute53Record_basic_fqdn --- PASS: TestAccAWSRoute53Record_basic_fqdn (132.07s) === RUN TestAccAWSRoute53Record_txtSupport --- PASS: TestAccAWSRoute53Record_txtSupport (134.07s) === RUN TestAccAWSRoute53Record_spfSupport --- PASS: TestAccAWSRoute53Record_spfSupport (113.36s) === RUN TestAccAWSRoute53Record_generatesSuffix --- PASS: TestAccAWSRoute53Record_generatesSuffix (112.62s) === RUN TestAccAWSRoute53Record_wildcard --- PASS: TestAccAWSRoute53Record_wildcard (162.84s) === RUN TestAccAWSRoute53Record_failover --- PASS: TestAccAWSRoute53Record_failover (126.18s) === RUN TestAccAWSRoute53Record_weighted_basic --- PASS: TestAccAWSRoute53Record_weighted_basic (121.10s) === RUN TestAccAWSRoute53Record_alias --- PASS: TestAccAWSRoute53Record_alias (118.14s) === RUN TestAccAWSRoute53Record_s3_alias --- PASS: TestAccAWSRoute53Record_s3_alias (155.07s) === RUN TestAccAWSRoute53Record_weighted_alias --- PASS: TestAccAWSRoute53Record_weighted_alias (235.41s) === RUN TestAccAWSRoute53Record_geolocation_basic ^[[C--- PASS: TestAccAWSRoute53Record_geolocation_basic (125.32s) === RUN TestAccAWSRoute53Record_latency_basic --- PASS: TestAccAWSRoute53Record_latency_basic (122.23s) === RUN TestAccAWSRoute53Record_TypeChange --- PASS: TestAccAWSRoute53Record_TypeChange (231.98s) === RUN TestAccAWSRoute53Record_empty --- PASS: TestAccAWSRoute53Record_empty (116.48s) PASS ok github.com/hashicorp/terraform/builtin/providers/aws 2131.526s ``` Before this fix, I was getting the following by recreating the code in ``` ~ aws_route53_record.alias alias.1563903989.evaluate_target_health: "true" => "false" alias.1563903989.name: "9828-recreation-106795730.us-west-2.elb.amazonaws.com." => "" alias.1563903989.zone_id: "Z1H1FL5HABSF5" => "" alias.318754017.evaluate_target_health: "" => "true" alias.318754017.name: "" => "9828-recreation-106795730.us-west-2.elb.amazonaws.com" alias.318754017.zone_id: "" => "Z1H1FL5HABSF5" Plan: 0 to add, 1 to change, 0 to destroy. ``` After this fix: ``` No changes. Infrastructure is up-to-date. This means that Terraform could not detect any differences between your configuration and the real physical resources that exist. As a result, Terraform doesn't need to do anything.
This commit is contained in:
parent
c21610f533
commit
98c385723c
|
@ -95,8 +95,9 @@ func resourceAwsRoute53Record() *schema.Resource {
|
||||||
},
|
},
|
||||||
|
|
||||||
"name": &schema.Schema{
|
"name": &schema.Schema{
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Required: true,
|
Required: true,
|
||||||
|
StateFunc: normalizeAwsAliasName,
|
||||||
},
|
},
|
||||||
|
|
||||||
"evaluate_target_health": &schema.Schema{
|
"evaluate_target_health": &schema.Schema{
|
||||||
|
@ -374,7 +375,7 @@ func resourceAwsRoute53RecordRead(d *schema.ResourceData, meta interface{}) erro
|
||||||
}
|
}
|
||||||
|
|
||||||
if alias := record.AliasTarget; alias != nil {
|
if alias := record.AliasTarget; alias != nil {
|
||||||
name := strings.TrimSuffix(*alias.DNSName, ".")
|
name := normalizeAwsAliasName(*alias.DNSName)
|
||||||
d.Set("alias", []interface{}{
|
d.Set("alias", []interface{}{
|
||||||
map[string]interface{}{
|
map[string]interface{}{
|
||||||
"zone_id": *alias.HostedZoneId,
|
"zone_id": *alias.HostedZoneId,
|
||||||
|
@ -732,7 +733,7 @@ func expandRecordName(name, zone string) string {
|
||||||
func resourceAwsRoute53AliasRecordHash(v interface{}) int {
|
func resourceAwsRoute53AliasRecordHash(v interface{}) int {
|
||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
m := v.(map[string]interface{})
|
m := v.(map[string]interface{})
|
||||||
buf.WriteString(fmt.Sprintf("%s-", m["name"].(string)))
|
buf.WriteString(fmt.Sprintf("%s-", normalizeAwsAliasName(m["name"].(string))))
|
||||||
buf.WriteString(fmt.Sprintf("%s-", m["zone_id"].(string)))
|
buf.WriteString(fmt.Sprintf("%s-", m["zone_id"].(string)))
|
||||||
buf.WriteString(fmt.Sprintf("%t-", m["evaluate_target_health"].(bool)))
|
buf.WriteString(fmt.Sprintf("%t-", m["evaluate_target_health"].(bool)))
|
||||||
|
|
||||||
|
@ -748,3 +749,12 @@ func nilString(s string) *string {
|
||||||
}
|
}
|
||||||
return aws.String(s)
|
return aws.String(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func normalizeAwsAliasName(alias interface{}) string {
|
||||||
|
input := alias.(string)
|
||||||
|
if strings.HasPrefix(input, "dualstack.") {
|
||||||
|
return strings.Replace(input, "dualstack.", "", -1)
|
||||||
|
}
|
||||||
|
|
||||||
|
return strings.TrimRight(input, ".")
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue