terraform/vendor/github.com/CenturyLinkCloud/clc-sdk/lb/lb.go

136 lines
4.0 KiB
Go

package lb
import (
"fmt"
"github.com/CenturyLinkCloud/clc-sdk/api"
)
func New(client api.HTTP) *Service {
return &Service{
client: client,
config: client.Config(),
}
}
type Service struct {
client api.HTTP
config *api.Config
}
func (s *Service) Get(dc, id string) (*LoadBalancer, error) {
url := fmt.Sprintf("%s/sharedLoadBalancers/%s/%s/%s", s.config.BaseURL, s.config.Alias, dc, id)
resp := &LoadBalancer{}
err := s.client.Get(url, resp)
return resp, err
}
func (s *Service) GetAll(dc string) ([]*LoadBalancer, error) {
url := fmt.Sprintf("%s/sharedLoadBalancers/%s/%s", s.config.BaseURL, s.config.Alias, dc)
resp := make([]*LoadBalancer, 0)
err := s.client.Get(url, &resp)
return resp, err
}
func (s *Service) Create(dc string, lb LoadBalancer) (*LoadBalancer, error) {
url := fmt.Sprintf("%s/sharedLoadBalancers/%s/%s", s.config.BaseURL, s.config.Alias, dc)
resp := &LoadBalancer{}
err := s.client.Post(url, lb, resp)
return resp, err
}
func (s *Service) Update(dc, id string, lb LoadBalancer) error {
url := fmt.Sprintf("%s/sharedLoadBalancers/%s/%s/%s", s.config.BaseURL, s.config.Alias, dc, id)
err := s.client.Put(url, lb, nil)
return err
}
func (s *Service) Delete(dc, id string) error {
url := fmt.Sprintf("%s/sharedLoadBalancers/%s/%s/%s", s.config.BaseURL, s.config.Alias, dc, id)
return s.client.Delete(url, nil)
}
func (s *Service) GetPool(dc, lb, pool string) (*Pool, error) {
url := fmt.Sprintf("%s/sharedLoadBalancers/%s/%s/%s/pools/%s", s.config.BaseURL, s.config.Alias, dc, lb, pool)
resp := &Pool{}
err := s.client.Get(url, resp)
return resp, err
}
func (s *Service) GetAllPools(dc, lb string) ([]*Pool, error) {
url := fmt.Sprintf("%s/sharedLoadBalancers/%s/%s/%s/pools", s.config.BaseURL, s.config.Alias, dc, lb)
resp := make([]*Pool, 0)
err := s.client.Get(url, &resp)
return resp, err
}
func (s *Service) CreatePool(dc, lb string, pool Pool) (*Pool, error) {
url := fmt.Sprintf("%s/sharedLoadBalancers/%s/%s/%s/pools", s.config.BaseURL, s.config.Alias, dc, lb)
resp := &Pool{}
err := s.client.Post(url, pool, resp)
return resp, err
}
func (s *Service) UpdatePool(dc, lb, id string, pool Pool) error {
url := fmt.Sprintf("%s/sharedLoadBalancers/%s/%s/%s/pools/%s", s.config.BaseURL, s.config.Alias, dc, lb, id)
err := s.client.Put(url, pool, nil)
return err
}
func (s *Service) DeletePool(dc, lb, pool string) error {
url := fmt.Sprintf("%s/sharedLoadBalancers/%s/%s/%s/pools/%s", s.config.BaseURL, s.config.Alias, dc, lb, pool)
return s.client.Delete(url, nil)
}
func (s *Service) GetAllNodes(dc, lb, pool string) ([]*Node, error) {
url := fmt.Sprintf("%s/sharedLoadBalancers/%s/%s/%s/pools/%s/nodes", s.config.BaseURL, s.config.Alias, dc, lb, pool)
resp := make([]*Node, 0)
err := s.client.Get(url, &resp)
return resp, err
}
func (s *Service) UpdateNodes(dc, lb, pool string, nodes ...Node) error {
url := fmt.Sprintf("%s/sharedLoadBalancers/%s/%s/%s/pools/%s/nodes", s.config.BaseURL, s.config.Alias, dc, lb, pool)
err := s.client.Put(url, nodes, nil)
return err
}
type LoadBalancer struct {
ID string `json:"id,omitempty"`
Name string `json:"name,omitempty"`
Description string `json:"description,omitempty"`
IPaddress string `json:"ipAddress,omitempty"`
Status string `json:"status,omitempty"`
Pools []Pool `json:"pools,omitempty"`
Links api.Links `json:"links,omitempty"`
}
type Pool struct {
ID string `json:"id,omitempty"`
Port int `json:"port,omitempty"`
Method Method `json:"method"`
Persistence Persistence `json:"persistence"`
Nodes []Node `json:"nodes,omitempty"`
Links api.Links `json:"links,omitempty"`
}
type Node struct {
Status string `json:"status,omitempty"`
IPaddress string `json:"ipAddress"`
PrivatePort int `json:"privatePort"`
}
type Persistence string
const (
Standard Persistence = "standard"
Sticky Persistence = "sticky"
)
type Method string
const (
LeastConn Method = "leastConnection"
RoundRobin Method = "roundRobin"
)