Skip to content

Commit 345e93d

Browse files
committed
Added port to masters attribute. Closes #64
1 parent d4de338 commit 345e93d

File tree

4 files changed

+81
-5
lines changed

4 files changed

+81
-5
lines changed

CHANGELOG.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
## 1.5.0 (Unreleased)
1+
## 1.4.1 (Unreleased)
2+
3+
FIXES:
4+
* **Add support for port along with IP in the masters attribute** [GH-64]
5+
26
## 1.4.0 (April 27, 2020)
37

48
FEATURES:

docker-compose.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ services:
1515
environment:
1616
MYSQL_ROOT_PASSWORD: secret
1717
pdns:
18-
image: psitrax/powerdns:4.1.10
18+
image: psitrax/powerdns:v4.3.1
1919
command:
2020
- "--api"
2121
- "--api-key=secret"

powerdns/resource_powerdns_zone.go

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"fmt"
55
"log"
66
"net"
7+
"strconv"
78
"strings"
89

910
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
@@ -67,11 +68,28 @@ func resourcePDNSZoneCreate(d *schema.ResourceData, meta interface{}) error {
6768
}
6869

6970
var masters []string
70-
for _, masterIP := range d.Get("masters").(*schema.Set).List() {
71-
if net.ParseIP(masterIP.(string)) == nil {
71+
for _, masterIPPort := range d.Get("masters").(*schema.Set).List() {
72+
splitIPPort := strings.Split(masterIPPort.(string), ":")
73+
// if there are more elements
74+
if len(splitIPPort) > 2 {
75+
return fmt.Errorf("more than one colon in <ip>:<port> string")
76+
}
77+
// when there are exactly 2 elements in list, assume second is port and check the port range
78+
if len(splitIPPort) == 2 {
79+
port, err := strconv.Atoi(splitIPPort[1])
80+
if err != nil {
81+
return fmt.Errorf("Error converting port value in masters atribute")
82+
}
83+
if port < 1 || port > 65535 {
84+
return fmt.Errorf("Invalid port value in masters atribute")
85+
}
86+
}
87+
// no matter if string contains just IP or IP:port pair, the first element in split list will be IP
88+
masterIP := splitIPPort[0]
89+
if net.ParseIP(masterIP) == nil {
7290
return fmt.Errorf("values in masters list attribute must be valid IPs")
7391
}
74-
masters = append(masters, masterIP.(string))
92+
masters = append(masters, masterIPPort.(string))
7593
}
7694

7795
zoneInfo := ZoneInfo{

powerdns/resource_powerdns_zone_test.go

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,46 @@ func TestAccPDNSZoneSlaveWithMasters(t *testing.T) {
236236
})
237237
}
238238

239+
func TestAccPDNSZoneSlaveWithMastersWithPort(t *testing.T) {
240+
resourceName := "powerdns_zone.test-slave-with-masters-with-port"
241+
242+
resource.ParallelTest(t, resource.TestCase{
243+
PreCheck: func() { testAccPreCheck(t) },
244+
Providers: testAccProviders,
245+
//CheckDestroy: testAccCheckPDNSZoneDestroy,
246+
Steps: []resource.TestStep{
247+
{
248+
Config: testPDNSZoneConfigSlaveWithMastersWithPort,
249+
Check: resource.ComposeTestCheckFunc(
250+
testAccCheckPDNSZoneExists(resourceName),
251+
resource.TestCheckResourceAttr(resourceName, "name", "slave-with-masters-with-port.sysa.abc."),
252+
resource.TestCheckResourceAttr(resourceName, "kind", "Slave"),
253+
resource.TestCheckResourceAttr(resourceName, "masters.1048647934", "2.2.2.2"),
254+
resource.TestCheckResourceAttr(resourceName, "masters.1686215786", "1.1.1.1:1111"),
255+
),
256+
},
257+
{
258+
ResourceName: resourceName,
259+
ImportState: true,
260+
ImportStateVerify: true,
261+
},
262+
},
263+
})
264+
}
265+
266+
func TestAccPDNSZoneSlaveWithMastersWithInvalidPort(t *testing.T) {
267+
268+
resource.ParallelTest(t, resource.TestCase{
269+
PreCheck: func() { testAccPreCheck(t) },
270+
Providers: testAccProviders,
271+
Steps: []resource.TestStep{
272+
{
273+
Config: testPDNSZoneConfigSlaveWithMastersWithInvalidPort,
274+
ExpectError: regexp.MustCompile("Invalid port value in masters atribute"),
275+
},
276+
},
277+
})
278+
}
239279
func TestAccPDNSZoneSlaveWithInvalidMasters(t *testing.T) {
240280

241281
resource.ParallelTest(t, resource.TestCase{
@@ -367,6 +407,20 @@ resource "powerdns_zone" "test-slave-with-masters" {
367407
masters = ["1.1.1.1", "2.2.2.2"]
368408
}`
369409

410+
const testPDNSZoneConfigSlaveWithMastersWithPort = `
411+
resource "powerdns_zone" "test-slave-with-masters-with-port" {
412+
name = "slave-with-masters-with-port.sysa.abc."
413+
kind = "Slave"
414+
masters = ["1.1.1.1:1111", "2.2.2.2"]
415+
}`
416+
417+
const testPDNSZoneConfigSlaveWithMastersWithInvalidPort = `
418+
resource "powerdns_zone" "test-slave-with-masters-with-invalid-port" {
419+
name = "slave-with-masters-with-invalid-port.sysa.abc."
420+
kind = "Slave"
421+
masters = ["1.1.1.1:111111", "2.2.2.2"]
422+
}`
423+
370424
const testPDNSZoneConfigSlaveWithInvalidMasters = `
371425
resource "powerdns_zone" "test-slave-with-invalid-masters" {
372426
name = "slave-with-invalid-masters.sysa.abc."

0 commit comments

Comments
 (0)