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) }