github.com/1and1/oneandone-cloudserver-sdk-go@v1.4.1/publicips.go (about) 1 package oneandone 2 3 import "net/http" 4 5 type PublicIp struct { 6 idField 7 typeField 8 IpAddress string `json:"ip,omitempty"` 9 AssignedTo *assignedTo `json:"assigned_to,omitempty"` 10 ReverseDns string `json:"reverse_dns,omitempty"` 11 IsDhcp *bool `json:"is_dhcp,omitempty"` 12 State string `json:"state,omitempty"` 13 SiteId string `json:"site_id,omitempty"` 14 CreationDate string `json:"creation_date,omitempty"` 15 Datacenter *Datacenter `json:"datacenter,omitempty"` 16 ApiPtr 17 } 18 19 type assignedTo struct { 20 Identity 21 typeField 22 } 23 24 const ( 25 IpTypeV4 = "IPV4" 26 IpTypeV6 = "IPV6" 27 ) 28 29 // GET /public_ips 30 func (api *API) ListPublicIps(args ...interface{}) ([]PublicIp, error) { 31 url, err := processQueryParams(createUrl(api, publicIpPathSegment), args...) 32 if err != nil { 33 return nil, err 34 } 35 result := []PublicIp{} 36 err = api.Client.Get(url, &result, http.StatusOK) 37 if err != nil { 38 return nil, err 39 } 40 for index, _ := range result { 41 result[index].api = api 42 } 43 return result, nil 44 } 45 46 // POST /public_ips 47 func (api *API) CreatePublicIp(ip_type string, reverse_dns string, datacenter_id string) (string, *PublicIp, error) { 48 res := new(PublicIp) 49 url := createUrl(api, publicIpPathSegment) 50 req := struct { 51 DatacenterId string `json:"datacenter_id,omitempty"` 52 ReverseDns string `json:"reverse_dns,omitempty"` 53 Type string `json:"type,omitempty"` 54 }{DatacenterId: datacenter_id, ReverseDns: reverse_dns, Type: ip_type} 55 err := api.Client.Post(url, &req, &res, http.StatusCreated) 56 if err != nil { 57 return "", nil, err 58 } 59 res.api = api 60 return res.Id, res, nil 61 } 62 63 // GET /public_ips/{id} 64 func (api *API) GetPublicIp(ip_id string) (*PublicIp, error) { 65 result := new(PublicIp) 66 url := createUrl(api, publicIpPathSegment, ip_id) 67 err := api.Client.Get(url, &result, http.StatusOK) 68 if err != nil { 69 return nil, err 70 } 71 result.api = api 72 return result, nil 73 } 74 75 // DELETE /public_ips/{id} 76 func (api *API) DeletePublicIp(ip_id string) (*PublicIp, error) { 77 result := new(PublicIp) 78 url := createUrl(api, publicIpPathSegment, ip_id) 79 err := api.Client.Delete(url, nil, &result, http.StatusOK) 80 if err != nil { 81 return nil, err 82 } 83 result.api = api 84 return result, nil 85 } 86 87 // PUT /public_ips/{id} 88 func (api *API) UpdatePublicIp(ip_id string, reverse_dns string) (*PublicIp, error) { 89 result := new(PublicIp) 90 url := createUrl(api, publicIpPathSegment, ip_id) 91 req := struct { 92 ReverseDns string `json:"reverse_dns,omitempty"` 93 }{reverse_dns} 94 err := api.Client.Put(url, &req, &result, http.StatusOK) 95 if err != nil { 96 return nil, err 97 } 98 result.api = api 99 return result, nil 100 } 101 102 func (ip *PublicIp) GetState() (string, error) { 103 in, err := ip.api.GetPublicIp(ip.Id) 104 if in == nil { 105 return "", err 106 } 107 return in.State, err 108 }