50 lines
1.1 KiB
Go
50 lines
1.1 KiB
Go
package api
|
|
|
|
import (
|
|
"fmt"
|
|
"net"
|
|
)
|
|
|
|
func (client *Client) ipamOp(ID string, op string) (*net.IPNet, error) {
|
|
ip, err := client.httpVerb(op, fmt.Sprintf("/ip/%s", ID), nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return parseIP(ip)
|
|
}
|
|
|
|
// returns an IP for the ID given, allocating a fresh one if necessary
|
|
func (client *Client) AllocateIP(ID string) (*net.IPNet, error) {
|
|
return client.ipamOp(ID, "POST")
|
|
}
|
|
|
|
// returns an IP for the ID given, or nil if one has not been
|
|
// allocated
|
|
func (client *Client) LookupIP(ID string) (*net.IPNet, error) {
|
|
return client.ipamOp(ID, "GET")
|
|
}
|
|
|
|
// release an IP which is no longer needed
|
|
func (client *Client) ReleaseIP(ID string) error {
|
|
_, err := client.ipamOp(ID, "DELETE")
|
|
return err
|
|
}
|
|
|
|
func (client *Client) DefaultSubnet() (*net.IPNet, error) {
|
|
cidr, err := client.httpVerb("GET", fmt.Sprintf("/ipinfo/defaultsubnet"), nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
_, ipnet, err := net.ParseCIDR(cidr)
|
|
return ipnet, err
|
|
}
|
|
|
|
func parseIP(body string) (*net.IPNet, error) {
|
|
ip, ipnet, err := net.ParseCIDR(string(body))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
ipnet.IP = ip
|
|
return ipnet, nil
|
|
}
|