74 lines
1.8 KiB
Go
74 lines
1.8 KiB
Go
package schema
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
)
|
|
|
|
/*
|
|
healthCheckNodePort
|
|
|
|
*/
|
|
|
|
const Version = "v1"
|
|
|
|
type LoadBalancer struct {
|
|
Name string `json:"name,omitempty"`
|
|
IP string `json:"ip,omitempty"`
|
|
Options Options `json:"options,omitempty"`
|
|
Ports []Port `json:"ports,omitempty"`
|
|
}
|
|
|
|
type Options struct {
|
|
Frontend []string `json:"frontend,omitempty"`
|
|
Backend []string `json:"backend,omitempty"`
|
|
ProxyProtocol string `json:"proxyProtocol,omitempty"`
|
|
CheckProxyProtocol bool `json:"checkProxyProtocol,omitempty"`
|
|
DefaultServer string `json:"defaultServer,omitempty`
|
|
}
|
|
|
|
type Port struct {
|
|
Port int `json:"port,omitempty"`
|
|
Servers []Server `json:"servers,omitempty"`
|
|
}
|
|
|
|
type Server struct {
|
|
Name string `json:"name,omitempty"`
|
|
IP string `json:"ip,omitempty"`
|
|
Port int `json:"port,omitempty"`
|
|
}
|
|
|
|
func (lb LoadBalancer) ValidateClient() error {
|
|
for i, p := range lb.Ports {
|
|
if p.Port < 0 || p.Port > 65535 {
|
|
return fmt.Errorf("LoadBalancer.Ports[%d].Port is invalid (range 0-65535", i)
|
|
}
|
|
for j, s := range p.Servers {
|
|
if s.Name == "" {
|
|
return fmt.Errorf("LoadBalancer.Ports[%d].Servers[%d].Name can not be empty", i, j)
|
|
}
|
|
if s.IP == "" {
|
|
return fmt.Errorf("LoadBalancer.Ports[%d].Servers[%d].IP can not be empty", i, j)
|
|
}
|
|
if s.Port < 0 || s.Port > 65535 {
|
|
return fmt.Errorf("LoadBalancer.Ports[%d].Servers[%d].Port is invalid (range 0-65535)", i, j)
|
|
}
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (lb LoadBalancer) ValidateServer() error {
|
|
if lb.Name == "" {
|
|
return errors.New("LoadBalancer.Name can not be empty")
|
|
}
|
|
if lb.IP == "" {
|
|
return errors.New("LoadBalancer.IP can not be empty")
|
|
}
|
|
return lb.ValidateClient()
|
|
}
|
|
|
|
func (lb LoadBalancer) JSON() ([]byte, error) {
|
|
return json.Marshal(lb)
|
|
}
|