packer-cn/vendor/github.com/1and1/oneandone-cloudserver-sdk-go/loadbalancers.go

220 lines
7.2 KiB
Go

package oneandone
import (
"net/http"
)
type LoadBalancer struct {
ApiPtr
idField
Name string `json:"name,omitempty"`
Description string `json:"description,omitempty"`
State string `json:"state,omitempty"`
CreationDate string `json:"creation_date,omitempty"`
Ip string `json:"ip,omitempty"`
HealthCheckTest string `json:"health_check_test,omitempty"`
HealthCheckInterval int `json:"health_check_interval"`
HealthCheckPath string `json:"health_check_path,omitempty"`
HealthCheckPathParser string `json:"health_check_path_parser,omitempty"`
Persistence bool `json:"persistence"`
PersistenceTime int `json:"persistence_time"`
Method string `json:"method,omitempty"`
Rules []LoadBalancerRule `json:"rules,omitempty"`
ServerIps []ServerIpInfo `json:"server_ips,omitempty"`
Datacenter *Datacenter `json:"datacenter,omitempty"`
CloudPanelId string `json:"cloudpanel_id,omitempty"`
}
type LoadBalancerRule struct {
idField
Protocol string `json:"protocol,omitempty"`
PortBalancer uint16 `json:"port_balancer"`
PortServer uint16 `json:"port_server"`
Source string `json:"source,omitempty"`
}
type LoadBalancerRequest struct {
Name string `json:"name,omitempty"`
Description string `json:"description,omitempty"`
DatacenterId string `json:"datacenter_id,omitempty"`
HealthCheckTest string `json:"health_check_test,omitempty"`
HealthCheckInterval *int `json:"health_check_interval"`
HealthCheckPath string `json:"health_check_path,omitempty"`
HealthCheckPathParser string `json:"health_check_path_parser,omitempty"`
Persistence *bool `json:"persistence"`
PersistenceTime *int `json:"persistence_time"`
Method string `json:"method,omitempty"`
Rules []LoadBalancerRule `json:"rules,omitempty"`
}
// GET /load_balancers
func (api *API) ListLoadBalancers(args ...interface{}) ([]LoadBalancer, error) {
url, err := processQueryParams(createUrl(api, loadBalancerPathSegment), args...)
if err != nil {
return nil, err
}
result := []LoadBalancer{}
err = api.Client.Get(url, &result, http.StatusOK)
if err != nil {
return nil, err
}
for index, _ := range result {
result[index].api = api
}
return result, nil
}
// POST /load_balancers
func (api *API) CreateLoadBalancer(request *LoadBalancerRequest) (string, *LoadBalancer, error) {
url := createUrl(api, loadBalancerPathSegment)
result := new(LoadBalancer)
err := api.Client.Post(url, &request, &result, http.StatusAccepted)
if err != nil {
return "", nil, err
}
result.api = api
return result.Id, result, nil
}
// GET /load_balancers/{id}
func (api *API) GetLoadBalancer(lb_id string) (*LoadBalancer, error) {
url := createUrl(api, loadBalancerPathSegment, lb_id)
result := new(LoadBalancer)
err := api.Client.Get(url, &result, http.StatusOK)
if err != nil {
return nil, err
}
result.api = api
return result, nil
}
// DELETE /load_balancers/{id}
func (api *API) DeleteLoadBalancer(lb_id string) (*LoadBalancer, error) {
url := createUrl(api, loadBalancerPathSegment, lb_id)
result := new(LoadBalancer)
err := api.Client.Delete(url, nil, &result, http.StatusAccepted)
if err != nil {
return nil, err
}
result.api = api
return result, nil
}
// PUT /load_balancers/{id}
func (api *API) UpdateLoadBalancer(lb_id string, request *LoadBalancerRequest) (*LoadBalancer, error) {
url := createUrl(api, loadBalancerPathSegment, lb_id)
result := new(LoadBalancer)
err := api.Client.Put(url, &request, &result, http.StatusAccepted)
if err != nil {
return nil, err
}
result.api = api
return result, nil
}
// GET /load_balancers/{id}/server_ips
func (api *API) ListLoadBalancerServerIps(lb_id string) ([]ServerIpInfo, error) {
result := []ServerIpInfo{}
url := createUrl(api, loadBalancerPathSegment, lb_id, "server_ips")
err := api.Client.Get(url, &result, http.StatusOK)
if err != nil {
return nil, err
}
return result, nil
}
// GET /load_balancers/{id}/server_ips/{id}
func (api *API) GetLoadBalancerServerIp(lb_id string, ip_id string) (*ServerIpInfo, error) {
result := new(ServerIpInfo)
url := createUrl(api, loadBalancerPathSegment, lb_id, "server_ips", ip_id)
err := api.Client.Get(url, &result, http.StatusOK)
if err != nil {
return nil, err
}
return result, nil
}
// POST /load_balancers/{id}/server_ips
func (api *API) AddLoadBalancerServerIps(lb_id string, ip_ids []string) (*LoadBalancer, error) {
result := new(LoadBalancer)
request := serverIps{
ServerIps: ip_ids,
}
url := createUrl(api, loadBalancerPathSegment, lb_id, "server_ips")
err := api.Client.Post(url, &request, &result, http.StatusAccepted)
if err != nil {
return nil, err
}
result.api = api
return result, nil
}
// DELETE /load_balancers/{id}/server_ips/{id}
func (api *API) DeleteLoadBalancerServerIp(lb_id string, ip_id string) (*LoadBalancer, error) {
result := new(LoadBalancer)
url := createUrl(api, loadBalancerPathSegment, lb_id, "server_ips", ip_id)
err := api.Client.Delete(url, nil, &result, http.StatusAccepted)
if err != nil {
return nil, err
}
result.api = api
return result, nil
}
// GET /load_balancers/{load_balancer_id}/rules
func (api *API) ListLoadBalancerRules(lb_id string) ([]LoadBalancerRule, error) {
result := []LoadBalancerRule{}
url := createUrl(api, loadBalancerPathSegment, lb_id, "rules")
err := api.Client.Get(url, &result, http.StatusOK)
if err != nil {
return nil, err
}
return result, nil
}
// POST /load_balancers/{load_balancer_id}/rules
func (api *API) AddLoadBalancerRules(lb_id string, lb_rules []LoadBalancerRule) (*LoadBalancer, error) {
result := new(LoadBalancer)
data := struct {
Rules []LoadBalancerRule `json:"rules"`
}{lb_rules}
url := createUrl(api, loadBalancerPathSegment, lb_id, "rules")
err := api.Client.Post(url, &data, &result, http.StatusAccepted)
if err != nil {
return nil, err
}
result.api = api
return result, nil
}
// GET /load_balancers/{load_balancer_id}/rules/{rule_id}
func (api *API) GetLoadBalancerRule(lb_id string, rule_id string) (*LoadBalancerRule, error) {
result := new(LoadBalancerRule)
url := createUrl(api, loadBalancerPathSegment, lb_id, "rules", rule_id)
err := api.Client.Get(url, &result, http.StatusOK)
if err != nil {
return nil, err
}
return result, nil
}
// DELETE /load_balancers/{load_balancer_id}/rules/{rule_id}
func (api *API) DeleteLoadBalancerRule(lb_id string, rule_id string) (*LoadBalancer, error) {
result := new(LoadBalancer)
url := createUrl(api, loadBalancerPathSegment, lb_id, "rules", rule_id)
err := api.Client.Delete(url, nil, &result, http.StatusAccepted)
if err != nil {
return nil, err
}
result.api = api
return result, nil
}
func (lb *LoadBalancer) GetState() (string, error) {
in, err := lb.api.GetLoadBalancer(lb.Id)
if in == nil {
return "", err
}
return in.State, err
}