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"` }