diff --git a/CHANGELOG.md b/CHANGELOG.md index 562db82..27ca8f7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,8 @@ ## 1.5.0 (Unreleased) FEATURES: - * **Added option to cache PowerDNS API response ** ([#81](https://github.com/pan-net/terraform-provider-powerdns/pull/81), @menai34) + * **Added option to cache PowerDNS API response** ([#81](https://github.com/pan-net/terraform-provider-powerdns/pull/81), @menai34) + * **Fixed resources with upper case names not destroyed** ([#88](https://github.com/pan-net/terraform-provider-powerdns/pull/88), @PetrusHahol) ## 1.4.1 (January 21, 2021) diff --git a/powerdns/client.go b/powerdns/client.go index db3b16f..ad25835 100644 --- a/powerdns/client.go +++ b/powerdns/client.go @@ -522,7 +522,7 @@ func (client *Client) ListRecordsInRRSet(zone string, name string, tpe string) ( records := make([]Record, 0, 10) for _, r := range allRecords { - if r.Name == name && r.Type == tpe { + if strings.EqualFold(r.Name, name) && r.Type == tpe { records = append(records, r) } } @@ -547,7 +547,7 @@ func (client *Client) RecordExists(zone string, name string, tpe string) (bool, } for _, record := range allRecords { - if record.Name == name && record.Type == tpe { + if strings.EqualFold(record.Name, name) && record.Type == tpe { return true, nil } } diff --git a/powerdns/resource_powerdns_record.go b/powerdns/resource_powerdns_record.go index d2be002..bb29c1a 100644 --- a/powerdns/resource_powerdns_record.go +++ b/powerdns/resource_powerdns_record.go @@ -24,12 +24,18 @@ func resourcePDNSRecord() *schema.Resource { Type: schema.TypeString, Required: true, ForceNew: true, + DiffSuppressFunc: func(k, old, new string, d *schema.ResourceData) bool { + return strings.EqualFold(old, new) + }, }, "name": { Type: schema.TypeString, Required: true, ForceNew: true, + DiffSuppressFunc: func(k, old, new string, d *schema.ResourceData) bool { + return strings.EqualFold(old, new) + }, }, "type": { diff --git a/powerdns/resource_powerdns_record_test.go b/powerdns/resource_powerdns_record_test.go index 4641387..ac2e5a4 100644 --- a/powerdns/resource_powerdns_record_test.go +++ b/powerdns/resource_powerdns_record_test.go @@ -444,6 +444,52 @@ func TestAccPDNSRecord_SOA(t *testing.T) { }) } +func TestAccPDNSRecord_A_ZoneMixedCaps(t *testing.T) { + resourceName := "powerdns_record.test-a" + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckPDNSRecordDestroy, + Steps: []resource.TestStep{ + { + // using mixed caps for zone property to create resource with A type + Config: testPDNSRecordConfigZoneMixedCaps, + }, + { + // using A type record config to confirm plan doesn't generate diff + ResourceName: resourceName, + Config: testPDNSRecordConfigA, + ExpectNonEmptyPlan: false, + PlanOnly: true, + }, + }, + }) +} + +func TestAccPDNSRecord_A_NameMixedCaps(t *testing.T) { + resourceName := "powerdns_record.test-a" + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckPDNSRecordDestroy, + Steps: []resource.TestStep{ + { + // using mixed caps for name property to create resource with A type + Config: testPDNSRecordConfigNameMixedCaps, + }, + { + // using A type record config to confirm plan doesn't generate diff + ResourceName: resourceName, + Config: testPDNSRecordConfigA, + ExpectNonEmptyPlan: false, + PlanOnly: true, + }, + }, + }) +} + func testAccCheckPDNSRecordDestroy(s *terraform.State) error { for _, rs := range s.RootModule().Resources { if rs.Type != "powerdns_record" { @@ -654,3 +700,21 @@ resource "powerdns_record" "test-soa" { ttl = 3600 records = [ "something.something. hostmaster.sysa.xyz. 2019090301 10800 3600 604800 3600" ] }` + +const testPDNSRecordConfigZoneMixedCaps = ` +resource "powerdns_record" "test-a" { + zone = "sySa.xyz." + name = "testpdnsrecordconfiga.sysa.xyz." + type = "A" + ttl = 60 + records = [ "1.1.1.1", "2.2.2.2" ] +}` + +const testPDNSRecordConfigNameMixedCaps = ` +resource "powerdns_record" "test-a" { + zone = "sysa.xyz." + name = "TestPDNSRecordConfigA.sysa.xyz." + type = "A" + ttl = 60 + records = [ "1.1.1.1", "2.2.2.2" ] +}` diff --git a/powerdns/resource_powerdns_zone.go b/powerdns/resource_powerdns_zone.go index 88705c8..95746ef 100644 --- a/powerdns/resource_powerdns_zone.go +++ b/powerdns/resource_powerdns_zone.go @@ -27,6 +27,9 @@ func resourcePDNSZone() *schema.Resource { Type: schema.TypeString, Required: true, ForceNew: true, + DiffSuppressFunc: func(k, old, new string, d *schema.ResourceData) bool { + return strings.EqualFold(old, new) + }, }, "kind": { diff --git a/powerdns/resource_powerdns_zone_test.go b/powerdns/resource_powerdns_zone_test.go index 0e2b4e9..40c7be1 100644 --- a/powerdns/resource_powerdns_zone_test.go +++ b/powerdns/resource_powerdns_zone_test.go @@ -66,7 +66,7 @@ func TestAccPDNSZoneNativeSmallCaps(t *testing.T) { CheckDestroy: testAccCheckPDNSZoneDestroy, Steps: []resource.TestStep{ { - // using small caps config to create resource with test-native name + // using small caps config to create resource with test-native kind Config: testPDNSZoneConfigNativeSmallCaps, }, { @@ -80,6 +80,29 @@ func TestAccPDNSZoneNativeSmallCaps(t *testing.T) { }) } +func TestAccPDNSZoneNativeNameMixedCaps(t *testing.T) { + resourceName := "powerdns_zone.test-native" + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckPDNSZoneDestroy, + Steps: []resource.TestStep{ + { + // using mixed caps config to create resource with test-native name + Config: testPDNSZoneConfigNativeNameMixedCaps, + }, + { + // using test-native config with Native to confirm plan doesn't generate diff + ResourceName: resourceName, + Config: testPDNSZoneConfigNative, + ExpectNonEmptyPlan: false, + PlanOnly: true, + }, + }, + }) +} + func TestAccPDNSZoneMaster(t *testing.T) { resourceName := "powerdns_zone.test-master" @@ -444,6 +467,13 @@ resource "powerdns_zone" "test-native" { nameservers = ["ns1.sysa.abc.", "ns2.sysa.abc."] }` +const testPDNSZoneConfigNativeNameMixedCaps = ` +resource "powerdns_zone" "test-native" { + name = "sySa.abc." + kind = "native" + nameservers = ["ns1.sysa.abc.", "ns2.sysa.abc."] +}` + const testPDNSZoneConfigMaster = ` resource "powerdns_zone" "test-master" { name = "master.sysa.abc."