Skip to content

Commit b77c566

Browse files
committed
Introduce ignore_errors argument to all data sources
Signed-off-by: Sergei Ivanov <[email protected]>
1 parent fdfbe50 commit b77c566

22 files changed

+229
-24
lines changed

dns/data_dns_a_record_set.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@ func dataSourceDnsARecordSet() *schema.Resource {
1515
Type: schema.TypeString,
1616
Required: true,
1717
},
18+
"ignore_errors": {
19+
Type: schema.TypeBool,
20+
Optional: true,
21+
Default: false,
22+
},
1823
"addrs": {
1924
Type: schema.TypeList,
2025
Elem: &schema.Schema{Type: schema.TypeString},
@@ -26,11 +31,15 @@ func dataSourceDnsARecordSet() *schema.Resource {
2631

2732
func dataSourceDnsARecordSetRead(d *schema.ResourceData, meta interface{}) error {
2833
host := d.Get("host").(string)
34+
ignore := d.Get("ignore_errors").(bool)
2935

3036
a, _, err := lookupIP(host)
31-
if err != nil {
37+
if err != nil && !ignore {
3238
return fmt.Errorf("error looking up A records for %q: %s", host, err)
3339
}
40+
if a == nil {
41+
a = []string{}
42+
}
3443
sort.Strings(a)
3544

3645
d.Set("addrs", a)

dns/data_dns_a_record_set_test.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,17 @@ func TestAccDataDnsARecordSet_Basic(t *testing.T) {
3838
},
3939
"time-c.nist.gov",
4040
},
41+
{
42+
`
43+
data "dns_a_record_set" "non-existent" {
44+
host = "jolly.roger"
45+
ignore_errors = true
46+
}
47+
`,
48+
"non-existent",
49+
[]string{},
50+
"jolly.roger",
51+
},
4152
}
4253

4354
for _, test := range tests {
@@ -61,5 +72,4 @@ func TestAccDataDnsARecordSet_Basic(t *testing.T) {
6172
},
6273
})
6374
}
64-
6575
}

dns/data_dns_aaaa_record_set.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@ func dataSourceDnsAAAARecordSet() *schema.Resource {
1515
Type: schema.TypeString,
1616
Required: true,
1717
},
18+
"ignore_errors": {
19+
Type: schema.TypeBool,
20+
Optional: true,
21+
Default: false,
22+
},
1823
"addrs": {
1924
Type: schema.TypeList,
2025
Elem: &schema.Schema{Type: schema.TypeString},
@@ -26,11 +31,15 @@ func dataSourceDnsAAAARecordSet() *schema.Resource {
2631

2732
func dataSourceDnsAAAARecordSetRead(d *schema.ResourceData, meta interface{}) error {
2833
host := d.Get("host").(string)
34+
ignore := d.Get("ignore_errors").(bool)
2935

3036
_, aaaa, err := lookupIP(host)
31-
if err != nil {
37+
if err != nil && !ignore {
3238
return fmt.Errorf("error looking up AAAA records for %q: %s", host, err)
3339
}
40+
if aaaa == nil {
41+
aaaa = []string{}
42+
}
3443
sort.Strings(aaaa)
3544

3645
d.Set("addrs", aaaa)

dns/data_dns_aaaa_record_set_test.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,17 @@ func TestAccDataDnsAAAARecordSet_Basic(t *testing.T) {
2626
},
2727
"example.com",
2828
},
29+
{
30+
`
31+
data "dns_aaaa_record_set" "non-existent" {
32+
host = "jolly.roger"
33+
ignore_errors = true
34+
}
35+
`,
36+
"non-existent",
37+
[]string{},
38+
"jolly.roger",
39+
},
2940
}
3041

3142
for _, test := range tests {
@@ -49,5 +60,4 @@ func TestAccDataDnsAAAARecordSet_Basic(t *testing.T) {
4960
},
5061
})
5162
}
52-
5363
}

dns/data_dns_cname_record_set.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,11 @@ func dataSourceDnsCnameRecordSet() *schema.Resource {
1717
Required: true,
1818
ForceNew: true,
1919
},
20-
20+
"ignore_errors": {
21+
Type: schema.TypeBool,
22+
Optional: true,
23+
Default: false,
24+
},
2125
"cname": {
2226
Type: schema.TypeString,
2327
Computed: true,
@@ -28,9 +32,10 @@ func dataSourceDnsCnameRecordSet() *schema.Resource {
2832

2933
func dataSourceDnsCnameRecordSetRead(d *schema.ResourceData, meta interface{}) error {
3034
host := d.Get("host").(string)
35+
ignore := d.Get("ignore_errors").(bool)
3136

3237
cname, err := net.LookupCNAME(host)
33-
if err != nil {
38+
if err != nil && !ignore {
3439
return fmt.Errorf("error looking up CNAME records for %q: %s", host, err)
3540
}
3641

dns/data_dns_cname_record_set_test.go

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package dns
22

33
import (
4+
"fmt"
45
"testing"
56

67
"github.com/hashicorp/terraform/helper/resource"
@@ -9,6 +10,7 @@ import (
910
func TestAccDataDnsCnameRecordSet_Basic(t *testing.T) {
1011
tests := []struct {
1112
DataSourceBlock string
13+
DataSourceName string
1214
Expected string
1315
Host string
1416
}{
@@ -18,25 +20,39 @@ func TestAccDataDnsCnameRecordSet_Basic(t *testing.T) {
1820
host = "www.hashicorp.com"
1921
}
2022
`,
23+
"foo",
2124
"hashicorp.netlifyglobalcdn.com.",
2225
"www.hashicorp.com",
2326
},
27+
{
28+
`
29+
data "dns_cname_record_set" "non-existent" {
30+
host = "jolly.roger"
31+
ignore_errors = true
32+
}
33+
`,
34+
"non-existent",
35+
"",
36+
"jolly.roger",
37+
},
2438
}
2539

2640
for _, test := range tests {
41+
recordName := fmt.Sprintf("data.dns_cname_record_set.%s", test.DataSourceName)
42+
2743
resource.Test(t, resource.TestCase{
2844
Providers: testAccProviders,
2945
Steps: []resource.TestStep{
3046
{
3147
Config: test.DataSourceBlock,
3248
Check: resource.ComposeTestCheckFunc(
33-
resource.TestCheckResourceAttr("data.dns_cname_record_set.foo", "cname", test.Expected),
49+
resource.TestCheckResourceAttr(recordName, "cname", test.Expected),
3450
),
3551
},
3652
{
3753
Config: test.DataSourceBlock,
3854
Check: resource.ComposeTestCheckFunc(
39-
resource.TestCheckResourceAttr("data.dns_cname_record_set.foo", "id", test.Host),
55+
resource.TestCheckResourceAttr(recordName, "id", test.Host),
4056
),
4157
},
4258
},

dns/data_dns_mx_record_set.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ func dataSourceDnsMXRecordSet() *schema.Resource {
1616
Type: schema.TypeString,
1717
Required: true,
1818
},
19+
"ignore_errors": {
20+
Type: schema.TypeBool,
21+
Optional: true,
22+
Default: false,
23+
},
1924
"mx": &schema.Schema{
2025
Type: schema.TypeList,
2126
Elem: &schema.Resource{
@@ -38,11 +43,15 @@ func dataSourceDnsMXRecordSet() *schema.Resource {
3843

3944
func dataSourceDnsMXRecordSetRead(d *schema.ResourceData, meta interface{}) error {
4045
domain := d.Get("domain").(string)
46+
ignore := d.Get("ignore_errors").(bool)
4147

4248
records, err := net.LookupMX(domain)
43-
if err != nil {
49+
if err != nil && !ignore {
4450
return fmt.Errorf("error looking up MX records for %q: %s", domain, err)
4551
}
52+
if records == nil {
53+
records = []*net.MX{}
54+
}
4655

4756
// Sort by preference ascending, and host alphabetically
4857
sort.Slice(records, func(i, j int) bool {

dns/data_dns_mx_record_set_test.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,17 @@ func TestAccDataDnsMXRecordSet_Basic(t *testing.T) {
3333
},
3434
"google.com",
3535
},
36+
{
37+
`
38+
data "dns_mx_record_set" "non-existent" {
39+
domain = "jolly.roger"
40+
ignore_errors = true
41+
}
42+
`,
43+
"non-existent",
44+
[]map[string]string{},
45+
"jolly.roger",
46+
},
3647
}
3748

3849
for _, test := range tests {

dns/data_dns_ns_record_set.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ func dataSourceDnsNSRecordSet() *schema.Resource {
1616
Type: schema.TypeString,
1717
Required: true,
1818
},
19+
"ignore_errors": {
20+
Type: schema.TypeBool,
21+
Optional: true,
22+
Default: false,
23+
},
1924
"nameservers": {
2025
Type: schema.TypeList,
2126
Elem: &schema.Schema{Type: schema.TypeString},
@@ -27,11 +32,15 @@ func dataSourceDnsNSRecordSet() *schema.Resource {
2732

2833
func dataSourceDnsNSRecordSetRead(d *schema.ResourceData, meta interface{}) error {
2934
host := d.Get("host").(string)
35+
ignore := d.Get("ignore_errors").(bool)
3036

3137
nsRecords, err := net.LookupNS(host)
32-
if err != nil {
38+
if err != nil && !ignore {
3339
return fmt.Errorf("error looking up NS records for %q: %s", host, err)
3440
}
41+
if nsRecords == nil {
42+
nsRecords = []*net.NS{}
43+
}
3544

3645
nameservers := make([]string, len(nsRecords))
3746
for i, record := range nsRecords {

dns/data_dns_ns_record_set_test.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,23 @@ func TestAccDataDnsNSRecordSet_Basic(t *testing.T) {
2424
[]string{
2525
// These results may change if terraform.io moves to a new DNS host.
2626
// If you suspect the expected results have changed here, confirm
27-
// with e.g. dig terraform.io NS
27+
// with e.g. `dig terraform.io NS`
2828
"sam.ns.cloudflare.com.",
2929
"zara.ns.cloudflare.com.",
3030
},
3131
"terraform.io",
3232
},
33+
{
34+
`
35+
data "dns_ns_record_set" "non-existent" {
36+
host = "jolly.roger"
37+
ignore_errors = true
38+
}
39+
`,
40+
"non-existent",
41+
[]string{},
42+
"jolly.roger",
43+
},
3344
}
3445

3546
for _, test := range tests {
@@ -53,5 +64,4 @@ func TestAccDataDnsNSRecordSet_Basic(t *testing.T) {
5364
},
5465
})
5566
}
56-
5767
}

dns/data_dns_ptr_record_set.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@ func dataSourceDnsPtrRecordSet() *schema.Resource {
1515
Type: schema.TypeString,
1616
Required: true,
1717
},
18+
"ignore_errors": {
19+
Type: schema.TypeBool,
20+
Optional: true,
21+
Default: false,
22+
},
1823
"ptr": {
1924
Type: schema.TypeString,
2025
Computed: true,
@@ -25,15 +30,20 @@ func dataSourceDnsPtrRecordSet() *schema.Resource {
2530

2631
func dataSourceDnsPtrRecordSetRead(d *schema.ResourceData, meta interface{}) error {
2732
ipAddress := d.Get("ip_address").(string)
33+
ignore := d.Get("ignore_errors").(bool)
34+
2835
names, err := net.LookupAddr(ipAddress)
29-
if err != nil {
36+
if err != nil && !ignore {
3037
return fmt.Errorf("error looking up PTR records for %q: %s", ipAddress, err)
3138
}
32-
if len(names) == 0 {
39+
if len(names) > 0 {
40+
d.Set("ptr", names[0])
41+
} else if ignore {
42+
d.Set("ptr", "")
43+
} else {
3344
return fmt.Errorf("error looking up PTR records for %q: no records found", ipAddress)
3445
}
3546

36-
d.Set("ptr", names[0])
3747
d.SetId(ipAddress)
3848

3949
return nil

dns/data_dns_ptr_record_set_test.go

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package dns
22

33
import (
4+
"fmt"
45
"testing"
56

67
"github.com/hashicorp/terraform/helper/resource"
@@ -9,6 +10,7 @@ import (
910
func TestAccDataDnsPtrRecordSet_Basic(t *testing.T) {
1011
tests := []struct {
1112
DataSourceBlock string
13+
DataSourceName string
1214
Expected string
1315
IPAddress string
1416
}{
@@ -18,25 +20,39 @@ func TestAccDataDnsPtrRecordSet_Basic(t *testing.T) {
1820
ip_address = "8.8.8.8"
1921
}
2022
`,
23+
"foo",
2124
"google-public-dns-a.google.com.",
2225
"8.8.8.8",
2326
},
27+
{
28+
`
29+
data "dns_ptr_record_set" "non-existent" {
30+
ip_address = "255.255.255.255"
31+
ignore_errors = true
32+
}
33+
`,
34+
"non-existent",
35+
"",
36+
"255.255.255.255",
37+
},
2438
}
2539

2640
for _, test := range tests {
41+
recordName := fmt.Sprintf("data.dns_ptr_record_set.%s", test.DataSourceName)
42+
2743
resource.Test(t, resource.TestCase{
2844
Providers: testAccProviders,
2945
Steps: []resource.TestStep{
3046
{
3147
Config: test.DataSourceBlock,
3248
Check: resource.ComposeTestCheckFunc(
33-
resource.TestCheckResourceAttr("data.dns_ptr_record_set.foo", "ptr", test.Expected),
49+
resource.TestCheckResourceAttr(recordName, "ptr", test.Expected),
3450
),
3551
},
3652
{
3753
Config: test.DataSourceBlock,
3854
Check: resource.ComposeTestCheckFunc(
39-
resource.TestCheckResourceAttr("data.dns_ptr_record_set.foo", "id", test.IPAddress),
55+
resource.TestCheckResourceAttr(recordName, "id", test.IPAddress),
4056
),
4157
},
4258
},

0 commit comments

Comments
 (0)