HAProxy Native Client is a client that exposes methods for reading and changing HAProxy configuration files, and executing commands and parsing the output of the HAProxy Runtime API (via unix socket, AKA stats socket in HAProxy).
This project contains structs and validation methods that are autogenerated using go-swagger from the swagger specification found here.These structs are also used in the DataPlaneAPI
go-swagger v0.23.0. Note that at the moment you need to use version 0.23.0
models can be generated with make models. It automatically combines specification parts into a single file, and then use that to generate models.
// Initialize HAProxy native client
confClient := &configuration.Client{}
confParams := configuration.ClientParams{
ConfigurationFile: "/etc/haproxy/haproxy.cfg",
Haproxy: "/usr/sbin/haproxy",
UseValidation: true,
PersistentTransactions: true,
TransactionDir: "/tmp/haproxy",
}
err := confClient.Init(confParams)
if err != nil {
fmt.Println("Error setting up configuration client, using default one")
confClient, err = configuration.DefaultClient()
if err != nil {
fmt.Println("Error setting up default configuration client, exiting...")
api.ServerShutdown()
}
}
runtimeClient := &runtime_api.Client{}
globalConf, err := confClient.GetGlobalConfiguration("")
if err == nil {
socketList := make([]string, 0, 1)
runtimeAPIs := globalConf.Data.RuntimeApis
if len(runtimeAPIs) != 0 {
for _, r := range runtimeAPIs {
socketList = append(socketList, *r.Address)
}
if err := runtimeClient.Init(socketList, "", 0); err != nil {
fmt.Println("Error setting up runtime client, not using one")
return nil
}
} else {
fmt.Println("Runtime API not configured, not using it")
runtimeClient = nil
}
} else {
fmt.Println("Cannot read runtime API configuration, not using it")
runtimeClient = nil
}
client := &client_native.HAProxyClient{}
client.Init(confClient, runtimeClient)
bcks, err := h.Client.Configuration.GetBackends(t)
if err != nil {
fmt.Println(err.Error())
}
//...
backendsJSON, err := bcks.MarshallBinary()
if err != nil {
fmt.Println(err.Error())
}
fmt.Println(string(backendsJSON))
//...
For commit messages and general style please follow the haproxy project's CONTRIBUTING guide and use that where applicable.