Skip to content

Commit 3ae18d8

Browse files
committed
use first_free if ip_address is not defined on CreateAddress
1 parent da4fad4 commit 3ae18d8

File tree

1 file changed

+21
-1
lines changed

1 file changed

+21
-1
lines changed

controllers/addresses/addresses.go

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
package addresses
44

55
import (
6+
"errors"
67
"fmt"
8+
"math/rand"
9+
"time"
710

811
"github.com/paybyphone/phpipam-sdk-go/phpipam"
912
"github.com/paybyphone/phpipam-sdk-go/phpipam/client"
@@ -87,7 +90,24 @@ func NewController(sess *session.Session) *Controller {
8790

8891
// CreateAddress creates an address by sending a POST request.
8992
func (c *Controller) CreateAddress(in Address) (message string, err error) {
90-
err = c.SendRequest("POST", "/addresses/", &in, &message)
93+
if in.IPAddress == "" && in.SubnetID == 0 {
94+
return message, errors.New("ip address or subnet id must be defined")
95+
}
96+
97+
if in.IPAddress == "" {
98+
// Retry
99+
for i := 0; i <= 5; i++ {
100+
err = c.SendRequest("POST", "/addresses/first_free", &in, &message)
101+
if err == nil {
102+
break
103+
}
104+
r := rand.Intn(500)
105+
time.Sleep(time.Duration(r) * time.Microsecond)
106+
}
107+
} else {
108+
err = c.SendRequest("POST", "/addresses/", &in, &message)
109+
}
110+
91111
return
92112
}
93113

0 commit comments

Comments
 (0)