54 lines
1.1 KiB
Go
54 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"`
|
|
CIDR string `json:"cidr"`
|
|
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"`
|
|
}
|