haproxy-lb/pkg/api/v1/schema/schema.go
2021-04-09 22:38:03 +02:00

72 lines
1.6 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"`
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)
}