Merge pull request #57 from cloudskiff/fix/route-53
Rely on the FQDN to compare two route53 recordsmain
commit
32addbb0e0
|
@ -16,19 +16,21 @@ func TestDefaultRoute53RecordShouldBeIgnored(t *testing.T) {
|
|||
&aws.AwsRoute53Zone{},
|
||||
&aws.AwsRoute53Record{
|
||||
Type: awssdk.String("NS"),
|
||||
Id: "foobar",
|
||||
Fqdn: awssdk.String("foobar"),
|
||||
},
|
||||
&aws.AwsRoute53Record{
|
||||
Type: awssdk.String("SOA"),
|
||||
Fqdn: awssdk.String(""),
|
||||
},
|
||||
&aws.AwsRoute53Record{
|
||||
Type: awssdk.String("A"),
|
||||
Fqdn: awssdk.String(""),
|
||||
},
|
||||
}
|
||||
stateResources := []resource.Resource{
|
||||
&aws.AwsRoute53Record{
|
||||
Type: awssdk.String("NS"),
|
||||
Id: "barfoo",
|
||||
Fqdn: awssdk.String("barfoo"),
|
||||
},
|
||||
}
|
||||
err := middleware.Execute(&remoteResources, &stateResources)
|
||||
|
@ -52,19 +54,21 @@ func TestDefaultRoute53RecordShouldNotBeIgnoredWhenManaged(t *testing.T) {
|
|||
&aws.AwsRoute53Zone{},
|
||||
&aws.AwsRoute53Record{
|
||||
Type: awssdk.String("NS"),
|
||||
Id: "foobar",
|
||||
Fqdn: awssdk.String("foobar"),
|
||||
},
|
||||
&aws.AwsRoute53Record{
|
||||
Type: awssdk.String("SOA"),
|
||||
Fqdn: awssdk.String(""),
|
||||
},
|
||||
&aws.AwsRoute53Record{
|
||||
Type: awssdk.String("A"),
|
||||
Fqdn: awssdk.String(""),
|
||||
},
|
||||
}
|
||||
stateResources := []resource.Resource{
|
||||
&aws.AwsRoute53Record{
|
||||
Type: awssdk.String("NS"),
|
||||
Id: "foobar",
|
||||
Fqdn: awssdk.String("foobar"),
|
||||
},
|
||||
}
|
||||
err := middleware.Execute(&remoteResources, &stateResources)
|
||||
|
|
|
@ -80,11 +80,7 @@ func (s Route53RecordSupplier) listRecordsForZone(zoneId string, zoneName string
|
|||
s.runner.Run(func() (cty.Value, error) {
|
||||
vars := []string{
|
||||
zoneId,
|
||||
// aws api is appending zone name in record names
|
||||
// we need to remove zone name and avoid fqdn to match terraform id's
|
||||
// e.g. : aws api response Name: foobar.example.com. should be converted to `foobar`
|
||||
// Also remove trailing dot ID_example.com._NS should be ID_example.com_NS
|
||||
strings.ToLower(strings.TrimSuffix(strings.TrimSuffix(rawName, "."+zoneName), ".")),
|
||||
strings.ToLower(strings.TrimSuffix(rawName, ".")),
|
||||
rawType,
|
||||
}
|
||||
if rawSetIdentifier != nil {
|
||||
|
|
|
@ -125,6 +125,46 @@ func TestRoute53RecordSupplier_Resources(t *testing.T) {
|
|||
},
|
||||
err: nil,
|
||||
},
|
||||
{
|
||||
test: "explicit subdomain records",
|
||||
dirName: "route53_record_explicit_subdomain",
|
||||
zonesPages: mocks.ListHostedZonesPagesOutput{
|
||||
{
|
||||
true,
|
||||
&route53.ListHostedZonesOutput{
|
||||
HostedZones: []*route53.HostedZone{
|
||||
{
|
||||
Id: awssdk.String("Z06486383UC8WYSBZTWFM"),
|
||||
Name: awssdk.String("foo-2.com"),
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
recordsPages: mocks.ListResourceRecordSetsPagesOutput{
|
||||
{
|
||||
true,
|
||||
&route53.ListResourceRecordSetsOutput{
|
||||
ResourceRecordSets: []*route53.ResourceRecordSet{
|
||||
{
|
||||
Name: awssdk.String("test0"),
|
||||
Type: awssdk.String("TXT"),
|
||||
},
|
||||
{
|
||||
Name: awssdk.String("test1.foo-2.com"),
|
||||
Type: awssdk.String("TXT"),
|
||||
},
|
||||
{
|
||||
Name: awssdk.String("_test2.foo-2.com"),
|
||||
Type: awssdk.String("TXT"),
|
||||
},
|
||||
},
|
||||
},
|
||||
"Z06486383UC8WYSBZTWFM",
|
||||
},
|
||||
},
|
||||
err: nil,
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.test, func(t *testing.T) {
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"Typ": "WyJvYmplY3QiLHsiYWxpYXMiOlsic2V0IixbIm9iamVjdCIseyJldmFsdWF0ZV90YXJnZXRfaGVhbHRoIjoiYm9vbCIsIm5hbWUiOiJzdHJpbmciLCJ6b25lX2lkIjoic3RyaW5nIn1dXSwiYWxsb3dfb3ZlcndyaXRlIjoiYm9vbCIsImZhaWxvdmVyX3JvdXRpbmdfcG9saWN5IjpbImxpc3QiLFsib2JqZWN0Iix7InR5cGUiOiJzdHJpbmcifV1dLCJmcWRuIjoic3RyaW5nIiwiZ2VvbG9jYXRpb25fcm91dGluZ19wb2xpY3kiOlsibGlzdCIsWyJvYmplY3QiLHsiY29udGluZW50Ijoic3RyaW5nIiwiY291bnRyeSI6InN0cmluZyIsInN1YmRpdmlzaW9uIjoic3RyaW5nIn1dXSwiaGVhbHRoX2NoZWNrX2lkIjoic3RyaW5nIiwiaWQiOiJzdHJpbmciLCJsYXRlbmN5X3JvdXRpbmdfcG9saWN5IjpbImxpc3QiLFsib2JqZWN0Iix7InJlZ2lvbiI6InN0cmluZyJ9XV0sIm11bHRpdmFsdWVfYW5zd2VyX3JvdXRpbmdfcG9saWN5IjoiYm9vbCIsIm5hbWUiOiJzdHJpbmciLCJyZWNvcmRzIjpbInNldCIsInN0cmluZyJdLCJzZXRfaWRlbnRpZmllciI6InN0cmluZyIsInR0bCI6Im51bWJlciIsInR5cGUiOiJzdHJpbmciLCJ3ZWlnaHRlZF9yb3V0aW5nX3BvbGljeSI6WyJsaXN0IixbIm9iamVjdCIseyJ3ZWlnaHQiOiJudW1iZXIifV1dLCJ6b25lX2lkIjoic3RyaW5nIn1d",
|
||||
"Val": "eyJhbGlhcyI6bnVsbCwiYWxsb3dfb3ZlcndyaXRlIjpudWxsLCJmYWlsb3Zlcl9yb3V0aW5nX3BvbGljeSI6bnVsbCwiZnFkbiI6Il90ZXN0Mi5mb28tMi5jb20iLCJnZW9sb2NhdGlvbl9yb3V0aW5nX3BvbGljeSI6bnVsbCwiaGVhbHRoX2NoZWNrX2lkIjoiIiwiaWQiOiJaMDY0ODYzODNVQzhXWVNCWlRXRk1fX3Rlc3QyLmZvby0yLmNvbV9UWFQiLCJsYXRlbmN5X3JvdXRpbmdfcG9saWN5IjpudWxsLCJtdWx0aXZhbHVlX2Fuc3dlcl9yb3V0aW5nX3BvbGljeSI6bnVsbCwibmFtZSI6Il90ZXN0Mi5mb28tMi5jb20iLCJyZWNvcmRzIjpbIl90ZXN0Mi5mb28tMi5jb20iXSwic2V0X2lkZW50aWZpZXIiOiIiLCJ0dGwiOjMwMCwidHlwZSI6IlRYVCIsIndlaWdodGVkX3JvdXRpbmdfcG9saWN5IjpudWxsLCJ6b25lX2lkIjoiWjA2NDg2MzgzVUM4V1lTQlpUV0ZNIn0=",
|
||||
"Err": null
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"Typ": "WyJvYmplY3QiLHsiYWxpYXMiOlsic2V0IixbIm9iamVjdCIseyJldmFsdWF0ZV90YXJnZXRfaGVhbHRoIjoiYm9vbCIsIm5hbWUiOiJzdHJpbmciLCJ6b25lX2lkIjoic3RyaW5nIn1dXSwiYWxsb3dfb3ZlcndyaXRlIjoiYm9vbCIsImZhaWxvdmVyX3JvdXRpbmdfcG9saWN5IjpbImxpc3QiLFsib2JqZWN0Iix7InR5cGUiOiJzdHJpbmcifV1dLCJmcWRuIjoic3RyaW5nIiwiZ2VvbG9jYXRpb25fcm91dGluZ19wb2xpY3kiOlsibGlzdCIsWyJvYmplY3QiLHsiY29udGluZW50Ijoic3RyaW5nIiwiY291bnRyeSI6InN0cmluZyIsInN1YmRpdmlzaW9uIjoic3RyaW5nIn1dXSwiaGVhbHRoX2NoZWNrX2lkIjoic3RyaW5nIiwiaWQiOiJzdHJpbmciLCJsYXRlbmN5X3JvdXRpbmdfcG9saWN5IjpbImxpc3QiLFsib2JqZWN0Iix7InJlZ2lvbiI6InN0cmluZyJ9XV0sIm11bHRpdmFsdWVfYW5zd2VyX3JvdXRpbmdfcG9saWN5IjoiYm9vbCIsIm5hbWUiOiJzdHJpbmciLCJyZWNvcmRzIjpbInNldCIsInN0cmluZyJdLCJzZXRfaWRlbnRpZmllciI6InN0cmluZyIsInR0bCI6Im51bWJlciIsInR5cGUiOiJzdHJpbmciLCJ3ZWlnaHRlZF9yb3V0aW5nX3BvbGljeSI6WyJsaXN0IixbIm9iamVjdCIseyJ3ZWlnaHQiOiJudW1iZXIifV1dLCJ6b25lX2lkIjoic3RyaW5nIn1d",
|
||||
"Val": "eyJhbGlhcyI6bnVsbCwiYWxsb3dfb3ZlcndyaXRlIjpudWxsLCJmYWlsb3Zlcl9yb3V0aW5nX3BvbGljeSI6bnVsbCwiZnFkbiI6InRlc3QwLmZvby0yLmNvbSIsImdlb2xvY2F0aW9uX3JvdXRpbmdfcG9saWN5IjpudWxsLCJoZWFsdGhfY2hlY2tfaWQiOiIiLCJpZCI6IlowNjQ4NjM4M1VDOFdZU0JaVFdGTV90ZXN0MF9UWFQiLCJsYXRlbmN5X3JvdXRpbmdfcG9saWN5IjpudWxsLCJtdWx0aXZhbHVlX2Fuc3dlcl9yb3V0aW5nX3BvbGljeSI6bnVsbCwibmFtZSI6InRlc3QwIiwicmVjb3JkcyI6WyJ0ZXN0MCJdLCJzZXRfaWRlbnRpZmllciI6IiIsInR0bCI6MzAwLCJ0eXBlIjoiVFhUIiwid2VpZ2h0ZWRfcm91dGluZ19wb2xpY3kiOm51bGwsInpvbmVfaWQiOiJaMDY0ODYzODNVQzhXWVNCWlRXRk0ifQ==",
|
||||
"Err": null
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"Typ": "WyJvYmplY3QiLHsiYWxpYXMiOlsic2V0IixbIm9iamVjdCIseyJldmFsdWF0ZV90YXJnZXRfaGVhbHRoIjoiYm9vbCIsIm5hbWUiOiJzdHJpbmciLCJ6b25lX2lkIjoic3RyaW5nIn1dXSwiYWxsb3dfb3ZlcndyaXRlIjoiYm9vbCIsImZhaWxvdmVyX3JvdXRpbmdfcG9saWN5IjpbImxpc3QiLFsib2JqZWN0Iix7InR5cGUiOiJzdHJpbmcifV1dLCJmcWRuIjoic3RyaW5nIiwiZ2VvbG9jYXRpb25fcm91dGluZ19wb2xpY3kiOlsibGlzdCIsWyJvYmplY3QiLHsiY29udGluZW50Ijoic3RyaW5nIiwiY291bnRyeSI6InN0cmluZyIsInN1YmRpdmlzaW9uIjoic3RyaW5nIn1dXSwiaGVhbHRoX2NoZWNrX2lkIjoic3RyaW5nIiwiaWQiOiJzdHJpbmciLCJsYXRlbmN5X3JvdXRpbmdfcG9saWN5IjpbImxpc3QiLFsib2JqZWN0Iix7InJlZ2lvbiI6InN0cmluZyJ9XV0sIm11bHRpdmFsdWVfYW5zd2VyX3JvdXRpbmdfcG9saWN5IjoiYm9vbCIsIm5hbWUiOiJzdHJpbmciLCJyZWNvcmRzIjpbInNldCIsInN0cmluZyJdLCJzZXRfaWRlbnRpZmllciI6InN0cmluZyIsInR0bCI6Im51bWJlciIsInR5cGUiOiJzdHJpbmciLCJ3ZWlnaHRlZF9yb3V0aW5nX3BvbGljeSI6WyJsaXN0IixbIm9iamVjdCIseyJ3ZWlnaHQiOiJudW1iZXIifV1dLCJ6b25lX2lkIjoic3RyaW5nIn1d",
|
||||
"Val": "eyJhbGlhcyI6bnVsbCwiYWxsb3dfb3ZlcndyaXRlIjpudWxsLCJmYWlsb3Zlcl9yb3V0aW5nX3BvbGljeSI6bnVsbCwiZnFkbiI6InRlc3QxLmZvby0yLmNvbSIsImdlb2xvY2F0aW9uX3JvdXRpbmdfcG9saWN5IjpudWxsLCJoZWFsdGhfY2hlY2tfaWQiOiIiLCJpZCI6IlowNjQ4NjM4M1VDOFdZU0JaVFdGTV90ZXN0MS5mb28tMi5jb21fVFhUIiwibGF0ZW5jeV9yb3V0aW5nX3BvbGljeSI6bnVsbCwibXVsdGl2YWx1ZV9hbnN3ZXJfcm91dGluZ19wb2xpY3kiOm51bGwsIm5hbWUiOiJ0ZXN0MS5mb28tMi5jb20iLCJyZWNvcmRzIjpbInRlc3QxLmZvby0yLmNvbSJdLCJzZXRfaWRlbnRpZmllciI6IiIsInR0bCI6MzAwLCJ0eXBlIjoiVFhUIiwid2VpZ2h0ZWRfcm91dGluZ19wb2xpY3kiOm51bGwsInpvbmVfaWQiOiJaMDY0ODYzODNVQzhXWVNCWlRXRk0ifQ==",
|
||||
"Err": null
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
provider "aws" {
|
||||
region = "eu-west-3"
|
||||
version = "3.19.0"
|
||||
}
|
||||
|
||||
resource "aws_route53_zone" "foo-zone" {
|
||||
name = "foo-2.com"
|
||||
}
|
||||
|
||||
resource "aws_route53_record" "foo-record" {
|
||||
zone_id = aws_route53_zone.foo-zone.zone_id
|
||||
name = "test0"
|
||||
type = "TXT"
|
||||
ttl = 300
|
||||
records = ["test0"]
|
||||
}
|
||||
|
||||
resource "aws_route53_record" "foo-record-bis" {
|
||||
zone_id = aws_route53_zone.foo-zone.zone_id
|
||||
name = "test1.foo-2.com"
|
||||
type = "TXT"
|
||||
ttl = 300
|
||||
records = ["test1.foo-2.com"]
|
||||
}
|
||||
|
||||
resource "aws_route53_record" "foo-record-bis-bis" {
|
||||
zone_id = aws_route53_zone.foo-zone.zone_id
|
||||
name = "_test2.foo-2.com"
|
||||
type = "TXT"
|
||||
ttl = 300
|
||||
records = ["_test2.foo-2.com"]
|
||||
}
|
|
@ -0,0 +1,62 @@
|
|||
[
|
||||
{
|
||||
"alias": null,
|
||||
"allow_overwrite": null,
|
||||
"failover_routing_policy": null,
|
||||
"fqdn": "test1.foo-2.com",
|
||||
"geolocation_routing_policy": null,
|
||||
"health_check_id": "",
|
||||
"id": "Z06486383UC8WYSBZTWFM_test1.foo-2.com_TXT",
|
||||
"latency_routing_policy": null,
|
||||
"multivalue_answer_routing_policy": null,
|
||||
"name": "test1.foo-2.com",
|
||||
"records": [
|
||||
"test1.foo-2.com"
|
||||
],
|
||||
"set_identifier": "",
|
||||
"ttl": 300,
|
||||
"type": "TXT",
|
||||
"weighted_routing_policy": null,
|
||||
"zone_id": "Z06486383UC8WYSBZTWFM"
|
||||
},
|
||||
{
|
||||
"alias": null,
|
||||
"allow_overwrite": null,
|
||||
"failover_routing_policy": null,
|
||||
"fqdn": "test0.foo-2.com",
|
||||
"geolocation_routing_policy": null,
|
||||
"health_check_id": "",
|
||||
"id": "Z06486383UC8WYSBZTWFM_test0_TXT",
|
||||
"latency_routing_policy": null,
|
||||
"multivalue_answer_routing_policy": null,
|
||||
"name": "test0",
|
||||
"records": [
|
||||
"test0"
|
||||
],
|
||||
"set_identifier": "",
|
||||
"ttl": 300,
|
||||
"type": "TXT",
|
||||
"weighted_routing_policy": null,
|
||||
"zone_id": "Z06486383UC8WYSBZTWFM"
|
||||
},
|
||||
{
|
||||
"alias": null,
|
||||
"allow_overwrite": null,
|
||||
"failover_routing_policy": null,
|
||||
"fqdn": "_test2.foo-2.com",
|
||||
"geolocation_routing_policy": null,
|
||||
"health_check_id": "",
|
||||
"id": "Z06486383UC8WYSBZTWFM__test2.foo-2.com_TXT",
|
||||
"latency_routing_policy": null,
|
||||
"multivalue_answer_routing_policy": null,
|
||||
"name": "_test2.foo-2.com",
|
||||
"records": [
|
||||
"_test2.foo-2.com"
|
||||
],
|
||||
"set_identifier": "",
|
||||
"ttl": 300,
|
||||
"type": "TXT",
|
||||
"weighted_routing_policy": null,
|
||||
"zone_id": "Z06486383UC8WYSBZTWFM"
|
||||
}
|
||||
]
|
File diff suppressed because it is too large
Load Diff
|
@ -7,9 +7,9 @@ type AwsRoute53Record struct {
|
|||
AllowOverwrite *bool `cty:"allow_overwrite" diff:"-" computed:"true"`
|
||||
Fqdn *string `cty:"fqdn" computed:"true"`
|
||||
HealthCheckId *string `cty:"health_check_id"`
|
||||
Id string `cty:"id" computed:"true"`
|
||||
Id string `cty:"id" diff:"-" computed:"true"`
|
||||
MultivalueAnswerRoutingPolicy *bool `cty:"multivalue_answer_routing_policy"`
|
||||
Name *string `cty:"name"`
|
||||
Name *string `cty:"name" diff:"-"`
|
||||
Records []string `cty:"records"`
|
||||
SetIdentifier *string `cty:"set_identifier"`
|
||||
Ttl *int `cty:"ttl"`
|
||||
|
@ -37,7 +37,7 @@ type AwsRoute53Record struct {
|
|||
}
|
||||
|
||||
func (r *AwsRoute53Record) TerraformId() string {
|
||||
return r.Id
|
||||
return *r.Fqdn
|
||||
}
|
||||
|
||||
func (r *AwsRoute53Record) TerraformType() string {
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
package aws_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/cloudskiff/driftctl/test/acceptance"
|
||||
)
|
||||
|
||||
func TestAcc_AwsRoute53Record_WithFQDNAsId(t *testing.T) {
|
||||
acceptance.Run(t, acceptance.AccTestCase{
|
||||
Path: "./testdata/acc/aws_route53_record",
|
||||
Args: []string{"scan", "--filter", "Type=='aws_route53_record'"},
|
||||
Checks: []acceptance.AccCheck{
|
||||
{
|
||||
Check: func(result *acceptance.ScanResult, stdout string, err error) {
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
result.AssertDriftCountTotal(0)
|
||||
result.Equal(0, result.Summary().TotalDeleted)
|
||||
result.Equal(4, result.Summary().TotalManaged)
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
provider "aws" {
|
||||
region = "eu-west-3"
|
||||
}
|
||||
terraform {
|
||||
required_providers {
|
||||
aws = {
|
||||
version = "~> 3.19.0"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
resource "aws_route53_zone" "foo-zone" {
|
||||
name = "foo-2.com"
|
||||
}
|
||||
|
||||
resource "aws_route53_record" "foo-record" {
|
||||
zone_id = aws_route53_zone.foo-zone.zone_id
|
||||
name = "test0"
|
||||
type = "TXT"
|
||||
ttl = 300
|
||||
records = ["test0"]
|
||||
}
|
||||
|
||||
resource "aws_route53_record" "foo-record-2" {
|
||||
zone_id = aws_route53_zone.foo-zone.zone_id
|
||||
name = "test1.foo-2.com"
|
||||
type = "TXT"
|
||||
ttl = 300
|
||||
records = ["test1.foo-2.com"]
|
||||
}
|
||||
|
||||
resource "aws_route53_record" "foo-record-bis-3" {
|
||||
zone_id = aws_route53_zone.foo-zone.zone_id
|
||||
name = "_test2.foo-2.com"
|
||||
type = "TXT"
|
||||
ttl = 300
|
||||
records = ["_test2.foo-2.com"]
|
||||
}
|
||||
|
||||
resource "aws_route53_record" "foo-record-bis-4" {
|
||||
zone_id = aws_route53_zone.foo-zone.zone_id
|
||||
name = "test3."
|
||||
type = "TXT"
|
||||
ttl = 300
|
||||
records = ["test3."]
|
||||
}
|
Loading…
Reference in New Issue