clientnative

package module
v3.0.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 25, 2022 License: Apache-2.0 Imports: 10 Imported by: 1

README

HAProxy

HAProxy Native Golang Client

Contributors License

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).

HAProxy Models

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

Requirements

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.

Usage Example

//import cfg_opt "github.com/haproxytech/client-native/v3/configuration/options"
confClient, err := configuration.New(context.Background(),
    cfg_opt.ConfigurationFile(haproxyOptions.ConfigFile),
    cfg_opt.HAProxyBin(haproxyOptions.HAProxy),
    cfg_opt.Backups(haproxyOptions.BackupsNumber),
    cfg_opt.UsePersistentTransactions,
    cfg_opt.TransactionsDir(haproxyOptions.TransactionDir),
    cfg_opt.ValidateCmd(haproxyOptions.ValidateCmd),
    cfg_opt.MasterWorker,
    cfg_opt.UseMd5Hash,
)
if err != nil {
    return nil, fmt.Errorf("error setting up configuration client: %s", err.Error())
}

// runtime
// import runtime_options "github.com/haproxytech/client-native/v3/runtime/options"
nbproc := 8
ms := runtime_options.MasterSocket(masterSocket, nbproc)
runtimeClient, err = runtime_api.New(ctx, ms)
if err != nil {
    return nil, fmt.Errorf("error setting up runtime client: %s", err.Error())
}
// or if not using master-worker
socketList := map[int]string{
    1: "/var/vur/haproxy.sock"
}
sockets := runtime_options.Sockets(socketList)
runtimeClient, err = runtime_api.New(ctx, mapsDir, sockets)
if err != nil {
    return nil, fmt.Errorf("error setting up runtime client: %s", err.Error())
}
// end runtime

// import "github.com/haproxytech/client-native/v3/options"
opt := []options.Option{
    options.Configuration(confClient),
    options.Runtime(runtimeClient),
}
if haproxyOptions.MapsDir != "" {
    mapStorage, err := storage.New(haproxyOptions.MapsDir, storage.MapsType)
    if err != nil {
        log.Fatalf("error initializing map storage: %v", err)
    }
    opt = append(opt, options.MapStorage(mapStorage))
} else {
    log.Fatalf("error trying to use empty string for managed map directory")
}

if haproxyOptions.SSLCertsDir != "" {
    sslCertStorage, err := storage.New(haproxyOptions.SSLCertsDir, storage.SSLType)
    if err != nil {
        log.Fatalf("error initializing SSL certs storage: %v", err)
    }
    opt = append(opt, options.SSLCertStorage(sslCertStorage))
} else {
    log.Fatalf("error trying to use empty string for managed map directory")
}

if haproxyOptions.GeneralStorage != "" {
    generalStorage, err := storage.New(haproxyOptions.GeneralStorage, storage.GeneralType)
    if err != nil {
        log.Fatalf("error initializing General storage: %v", err)
    }
    opt = append(opt, options.GeneralStorage(generalStorage))
} else {
    log.Fatalf("error trying to use empty string for managed general files directory")
}

if haproxyOptions.SpoeDir != "" {
    prms := spoe.Params{
        SpoeDir:        haproxyOptions.SpoeDir,
        TransactionDir: haproxyOptions.SpoeTransactionDir,
    }
    spoe, err := spoe.NewSpoe(prms)
    if err != nil {
        log.Fatalf("error setting up spoe: %v", err)
    }
    opt = append(opt, options.Spoe(spoe))
} else {
    log.Fatalf("error trying to use empty string for SPOE configuration directory")
}

client, err := client_native.New(cyx, opt...)
if err != nil {
    log.Fatalf("Error initializing configuration client: %v", err)
}

configuration, err := h.Client.Configuration()
if err != nil {
    fmt.Println(err.Error())
}

bcks, err := 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))
//...

Contributing

For commit messages and general style please follow the haproxy project's CONTRIBUTING guide and use that where applicable.

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	LogFunc               = log.Printf //nolint:gochecknoglobals
	ErrOptionNotAvailable = errors.New("option is not available")
)

LogFunc - default log function is from the stdlib

Functions

This section is empty.

Types

type HAProxyClient

type HAProxyClient interface {
	Configuration() (configuration.Configuration, error)
	Runtime() (runtime.Runtime, error)
	ReplaceConfiguration(configurationClient configuration.Configuration)
	ReplaceRuntime(runtimeClient runtime.Runtime)
	MapStorage() (storage.Storage, error)
	SSLCertStorage() (storage.Storage, error)
	GeneralStorage() (storage.Storage, error)
	Spoe() (spoe.Spoe, error)
}

func New

func New(ctx context.Context, opt ...options.Option) (HAProxyClient, error)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL