Skip to content

Commit c820f14

Browse files
authored
feat: Add PowerDNS Zone Account support (#71)
* feat: Add PowerDNS Zone Account support * upd: vendor modules
1 parent a7cd108 commit c820f14

34 files changed

+635
-6638
lines changed

powerdns/client.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ type ZoneInfo struct {
160160
Serial int64 `json:"serial"`
161161
Records []Record `json:"records,omitempty"`
162162
ResourceRecordSets []ResourceRecordSet `json:"rrsets,omitempty"`
163+
Account string `json:"account"`
163164
Nameservers []string `json:"nameservers,omitempty"`
164165
Masters []string `json:"masters,omitempty"`
165166
SoaEditAPI string `json:"soa_edit_api"`

powerdns/resource_powerdns_zone.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"strings"
99

1010
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
11+
"github.com/hashicorp/terraform-plugin-sdk/helper/validation"
1112
)
1213

1314
func resourcePDNSZone() *schema.Resource {
@@ -36,6 +37,14 @@ func resourcePDNSZone() *schema.Resource {
3637
},
3738
},
3839

40+
"account": {
41+
Type: schema.TypeString,
42+
Optional: true,
43+
Default: "admin",
44+
ForceNew: false,
45+
ValidateFunc: validation.StringLenBetween(0, 40),
46+
},
47+
3948
"nameservers": {
4049
Type: schema.TypeSet,
4150
Elem: &schema.Schema{Type: schema.TypeString},
@@ -95,6 +104,7 @@ func resourcePDNSZoneCreate(d *schema.ResourceData, meta interface{}) error {
95104
zoneInfo := ZoneInfo{
96105
Name: d.Get("name").(string),
97106
Kind: d.Get("kind").(string),
107+
Account: d.Get("account").(string),
98108
Nameservers: nameservers,
99109
SoaEditAPI: d.Get("soa_edit_api").(string),
100110
}
@@ -128,6 +138,7 @@ func resourcePDNSZoneRead(d *schema.ResourceData, meta interface{}) error {
128138

129139
d.Set("name", zoneInfo.Name)
130140
d.Set("kind", zoneInfo.Kind)
141+
d.Set("account", zoneInfo.Account)
131142
d.Set("soa_edit_api", zoneInfo.SoaEditAPI)
132143

133144
if zoneInfo.Kind != "Slave" {

powerdns/resource_powerdns_zone_test.go

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,87 @@ func TestAccPDNSZoneMasterSOAAPIEDITUndefined(t *testing.T) {
184184
})
185185
}
186186

187+
func TestAccPDNSZoneAccount(t *testing.T) {
188+
resourceName := "powerdns_zone.test-account"
189+
resourceAccount := `test`
190+
191+
resource.ParallelTest(t, resource.TestCase{
192+
PreCheck: func() { testAccPreCheck(t) },
193+
Providers: testAccProviders,
194+
CheckDestroy: testAccCheckPDNSZoneDestroy,
195+
Steps: []resource.TestStep{
196+
{
197+
Config: testPDNSZoneConfigAccount,
198+
Check: resource.ComposeTestCheckFunc(
199+
testAccCheckPDNSZoneExists(resourceName),
200+
resource.TestCheckResourceAttr(resourceName, "name", "account.sysa.abc."),
201+
resource.TestCheckResourceAttr(resourceName, "kind", "Master"),
202+
resource.TestCheckResourceAttr(resourceName, "account", resourceAccount),
203+
),
204+
},
205+
{
206+
ResourceName: resourceName,
207+
ImportState: true,
208+
ImportStateVerify: true,
209+
},
210+
},
211+
})
212+
}
213+
214+
func TestAccPDNSZoneAccountEmpty(t *testing.T) {
215+
resourceName := "powerdns_zone.test-account-empty"
216+
resourceAccount := ``
217+
218+
resource.ParallelTest(t, resource.TestCase{
219+
PreCheck: func() { testAccPreCheck(t) },
220+
Providers: testAccProviders,
221+
CheckDestroy: testAccCheckPDNSZoneDestroy,
222+
Steps: []resource.TestStep{
223+
{
224+
Config: testPDNSZoneConfigAccountEmpty,
225+
Check: resource.ComposeTestCheckFunc(
226+
testAccCheckPDNSZoneExists(resourceName),
227+
resource.TestCheckResourceAttr(resourceName, "name", "account-empty.sysa.abc."),
228+
resource.TestCheckResourceAttr(resourceName, "kind", "Master"),
229+
resource.TestCheckResourceAttr(resourceName, "account", resourceAccount),
230+
),
231+
},
232+
{
233+
ResourceName: resourceName,
234+
ImportState: true,
235+
ImportStateVerify: true,
236+
},
237+
},
238+
})
239+
}
240+
241+
func TestAccPDNSZoneAccountUndefined(t *testing.T) {
242+
resourceName := "powerdns_zone.test-account-undefined"
243+
resourceAccount := `admin`
244+
245+
resource.ParallelTest(t, resource.TestCase{
246+
PreCheck: func() { testAccPreCheck(t) },
247+
Providers: testAccProviders,
248+
CheckDestroy: testAccCheckPDNSZoneDestroy,
249+
Steps: []resource.TestStep{
250+
{
251+
Config: testPDNSZoneConfigAccountUndefined,
252+
Check: resource.ComposeTestCheckFunc(
253+
testAccCheckPDNSZoneExists(resourceName),
254+
resource.TestCheckResourceAttr(resourceName, "name", "account-undefined.sysa.abc."),
255+
resource.TestCheckResourceAttr(resourceName, "kind", "Master"),
256+
resource.TestCheckResourceAttr(resourceName, "account", resourceAccount),
257+
),
258+
},
259+
{
260+
ResourceName: resourceName,
261+
ImportState: true,
262+
ImportStateVerify: true,
263+
},
264+
},
265+
})
266+
}
267+
187268
func TestAccPDNSZoneSlave(t *testing.T) {
188269
resourceName := "powerdns_zone.test-slave"
189270

@@ -393,6 +474,30 @@ resource "powerdns_zone" "test-master-soa-edit-api-undefined" {
393474
nameservers = ["ns1.sysa.abc.", "ns2.sysa.abc."]
394475
}`
395476

477+
const testPDNSZoneConfigAccount = `
478+
resource "powerdns_zone" "test-account" {
479+
name = "account.sysa.abc."
480+
kind = "Master"
481+
nameservers = ["ns1.sysa.abc.", "ns2.sysa.abc."]
482+
account = "test"
483+
}`
484+
485+
const testPDNSZoneConfigAccountEmpty = `
486+
resource "powerdns_zone" "test-account-empty" {
487+
name = "account-empty.sysa.abc."
488+
kind = "Master"
489+
nameservers = ["ns1.sysa.abc.", "ns2.sysa.abc."]
490+
account = ""
491+
}`
492+
493+
const testPDNSZoneConfigAccountUndefined = `
494+
resource "powerdns_zone" "test-account-undefined" {
495+
name = "account-undefined.sysa.abc."
496+
kind = "Master"
497+
nameservers = ["ns1.sysa.abc.", "ns2.sysa.abc."]
498+
soa_edit_api = "DEFAULT"
499+
}`
500+
396501
const testPDNSZoneConfigSlave = `
397502
resource "powerdns_zone" "test-slave" {
398503
name = "slave.sysa.abc."

0 commit comments

Comments
 (0)