github.com/1and1/oneandone-cloudserver-sdk-go@v1.4.1/loadbalancers.go (about) 1 package oneandone 2 3 import ( 4 "net/http" 5 ) 6 7 type LoadBalancer struct { 8 ApiPtr 9 idField 10 Name string `json:"name,omitempty"` 11 Description string `json:"description,omitempty"` 12 State string `json:"state,omitempty"` 13 CreationDate string `json:"creation_date,omitempty"` 14 Ip string `json:"ip,omitempty"` 15 HealthCheckTest string `json:"health_check_test,omitempty"` 16 HealthCheckInterval int `json:"health_check_interval"` 17 HealthCheckPath string `json:"health_check_path,omitempty"` 18 HealthCheckPathParser string `json:"health_check_path_parser,omitempty"` 19 Persistence bool `json:"persistence"` 20 PersistenceTime int `json:"persistence_time"` 21 Method string `json:"method,omitempty"` 22 Rules []LoadBalancerRule `json:"rules,omitempty"` 23 ServerIps []ServerIpInfo `json:"server_ips,omitempty"` 24 Datacenter *Datacenter `json:"datacenter,omitempty"` 25 } 26 27 type LoadBalancerRule struct { 28 idField 29 Protocol string `json:"protocol,omitempty"` 30 PortBalancer uint16 `json:"port_balancer"` 31 PortServer uint16 `json:"port_server"` 32 Source string `json:"source,omitempty"` 33 } 34 35 type LoadBalancerRequest struct { 36 Name string `json:"name,omitempty"` 37 Description string `json:"description,omitempty"` 38 DatacenterId string `json:"datacenter_id,omitempty"` 39 HealthCheckTest string `json:"health_check_test,omitempty"` 40 HealthCheckInterval *int `json:"health_check_interval"` 41 HealthCheckPath string `json:"health_check_path,omitempty"` 42 HealthCheckPathParser string `json:"health_check_path_parser,omitempty"` 43 Persistence *bool `json:"persistence"` 44 PersistenceTime *int `json:"persistence_time"` 45 Method string `json:"method,omitempty"` 46 Rules []LoadBalancerRule `json:"rules,omitempty"` 47 } 48 49 // GET /load_balancers 50 func (api *API) ListLoadBalancers(args ...interface{}) ([]LoadBalancer, error) { 51 url, err := processQueryParams(createUrl(api, loadBalancerPathSegment), args...) 52 if err != nil { 53 return nil, err 54 } 55 result := []LoadBalancer{} 56 err = api.Client.Get(url, &result, http.StatusOK) 57 if err != nil { 58 return nil, err 59 } 60 for index, _ := range result { 61 result[index].api = api 62 } 63 return result, nil 64 } 65 66 // POST /load_balancers 67 func (api *API) CreateLoadBalancer(request *LoadBalancerRequest) (string, *LoadBalancer, error) { 68 url := createUrl(api, loadBalancerPathSegment) 69 result := new(LoadBalancer) 70 err := api.Client.Post(url, &request, &result, http.StatusAccepted) 71 if err != nil { 72 return "", nil, err 73 } 74 result.api = api 75 return result.Id, result, nil 76 } 77 78 // GET /load_balancers/{id} 79 func (api *API) GetLoadBalancer(lb_id string) (*LoadBalancer, error) { 80 url := createUrl(api, loadBalancerPathSegment, lb_id) 81 result := new(LoadBalancer) 82 err := api.Client.Get(url, &result, http.StatusOK) 83 if err != nil { 84 return nil, err 85 } 86 result.api = api 87 return result, nil 88 } 89 90 // DELETE /load_balancers/{id} 91 func (api *API) DeleteLoadBalancer(lb_id string) (*LoadBalancer, error) { 92 url := createUrl(api, loadBalancerPathSegment, lb_id) 93 result := new(LoadBalancer) 94 err := api.Client.Delete(url, nil, &result, http.StatusAccepted) 95 if err != nil { 96 return nil, err 97 } 98 result.api = api 99 return result, nil 100 } 101 102 // PUT /load_balancers/{id} 103 func (api *API) UpdateLoadBalancer(lb_id string, request *LoadBalancerRequest) (*LoadBalancer, error) { 104 url := createUrl(api, loadBalancerPathSegment, lb_id) 105 result := new(LoadBalancer) 106 err := api.Client.Put(url, &request, &result, http.StatusAccepted) 107 if err != nil { 108 return nil, err 109 } 110 result.api = api 111 return result, nil 112 } 113 114 // GET /load_balancers/{id}/server_ips 115 func (api *API) ListLoadBalancerServerIps(lb_id string) ([]ServerIpInfo, error) { 116 result := []ServerIpInfo{} 117 url := createUrl(api, loadBalancerPathSegment, lb_id, "server_ips") 118 err := api.Client.Get(url, &result, http.StatusOK) 119 if err != nil { 120 return nil, err 121 } 122 return result, nil 123 } 124 125 // GET /load_balancers/{id}/server_ips/{id} 126 func (api *API) GetLoadBalancerServerIp(lb_id string, ip_id string) (*ServerIpInfo, error) { 127 result := new(ServerIpInfo) 128 url := createUrl(api, loadBalancerPathSegment, lb_id, "server_ips", ip_id) 129 err := api.Client.Get(url, &result, http.StatusOK) 130 if err != nil { 131 return nil, err 132 } 133 return result, nil 134 } 135 136 // POST /load_balancers/{id}/server_ips 137 func (api *API) AddLoadBalancerServerIps(lb_id string, ip_ids []string) (*LoadBalancer, error) { 138 result := new(LoadBalancer) 139 request := serverIps{ 140 ServerIps: ip_ids, 141 } 142 url := createUrl(api, loadBalancerPathSegment, lb_id, "server_ips") 143 err := api.Client.Post(url, &request, &result, http.StatusAccepted) 144 if err != nil { 145 return nil, err 146 } 147 result.api = api 148 return result, nil 149 } 150 151 // DELETE /load_balancers/{id}/server_ips/{id} 152 func (api *API) DeleteLoadBalancerServerIp(lb_id string, ip_id string) (*LoadBalancer, error) { 153 result := new(LoadBalancer) 154 url := createUrl(api, loadBalancerPathSegment, lb_id, "server_ips", ip_id) 155 err := api.Client.Delete(url, nil, &result, http.StatusAccepted) 156 if err != nil { 157 return nil, err 158 } 159 result.api = api 160 return result, nil 161 } 162 163 // GET /load_balancers/{load_balancer_id}/rules 164 func (api *API) ListLoadBalancerRules(lb_id string) ([]LoadBalancerRule, error) { 165 result := []LoadBalancerRule{} 166 url := createUrl(api, loadBalancerPathSegment, lb_id, "rules") 167 err := api.Client.Get(url, &result, http.StatusOK) 168 if err != nil { 169 return nil, err 170 } 171 return result, nil 172 } 173 174 // POST /load_balancers/{load_balancer_id}/rules 175 func (api *API) AddLoadBalancerRules(lb_id string, lb_rules []LoadBalancerRule) (*LoadBalancer, error) { 176 result := new(LoadBalancer) 177 data := struct { 178 Rules []LoadBalancerRule `json:"rules"` 179 }{lb_rules} 180 url := createUrl(api, loadBalancerPathSegment, lb_id, "rules") 181 err := api.Client.Post(url, &data, &result, http.StatusAccepted) 182 if err != nil { 183 return nil, err 184 } 185 result.api = api 186 return result, nil 187 } 188 189 // GET /load_balancers/{load_balancer_id}/rules/{rule_id} 190 func (api *API) GetLoadBalancerRule(lb_id string, rule_id string) (*LoadBalancerRule, error) { 191 result := new(LoadBalancerRule) 192 url := createUrl(api, loadBalancerPathSegment, lb_id, "rules", rule_id) 193 err := api.Client.Get(url, &result, http.StatusOK) 194 if err != nil { 195 return nil, err 196 } 197 return result, nil 198 } 199 200 // DELETE /load_balancers/{load_balancer_id}/rules/{rule_id} 201 func (api *API) DeleteLoadBalancerRule(lb_id string, rule_id string) (*LoadBalancer, error) { 202 result := new(LoadBalancer) 203 url := createUrl(api, loadBalancerPathSegment, lb_id, "rules", rule_id) 204 err := api.Client.Delete(url, nil, &result, http.StatusAccepted) 205 if err != nil { 206 return nil, err 207 } 208 result.api = api 209 return result, nil 210 } 211 212 func (lb *LoadBalancer) GetState() (string, error) { 213 in, err := lb.api.GetLoadBalancer(lb.Id) 214 if in == nil { 215 return "", err 216 } 217 return in.State, err 218 }