haproxy-lb/pkg/haproxy/config.go
2021-04-10 16:16:45 +02:00

53 lines
1.1 KiB
Go

package haproxy
import (
"encoding/json"
"sort"
)
type Config struct {
LoadBalancers []*LoadBalancer
}
func NewConfig(m map[string][]byte) (c Config, err error) {
for _, v := range m {
lb := new(LoadBalancer)
err = json.Unmarshal(v, lb)
if err != nil {
return
}
c.LoadBalancers = append(c.LoadBalancers, lb)
}
if len(c.LoadBalancers) > 1 {
sort.SliceStable(c.LoadBalancers, func(i, j int) bool {
return c.LoadBalancers[i].Name < c.LoadBalancers[j].Name
})
}
return
}
type LoadBalancer struct {
Name string `json:"name"`
IP string `json:"ip"`
Options Options `json:"options"`
Ports []Port `json:"ports"`
}
type Options struct {
Frontend []string `json:"frontend"`
Backend []string `json:"backend"`
ProxyProtocol string `json:"proxyProtocol"`
CheckProxyProtocol bool `json:"checkProxyProtocol"`
DefaultServer string `json:"defaultServer"`
}
type Port struct {
Port int `json:"port"`
Servers []Server `json:"servers"`
}
type Server struct {
Name string `json:"name"`
IP string `json:"ip"`
Port int `json:"port"`
}