Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion common/types/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ type LdapConfiguration struct {
// StoreURL: URL of the key-value store
//
type KVStoreConfig struct {
StoreURL string `json:"kvstore-url"`
StoreURL []string `json:"kvstore-url"`
StoreDriver string `json:"kvstore-driver"`
}

Expand Down
12 changes: 12 additions & 0 deletions common/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -172,3 +172,15 @@ func GetNetmasterVersion(address string) (string, error) {

return nvr.Version, nil
}


// FilterEmpty filters empty string from string slices
func FilterEmpty(stringSlice []string) []string {
var result []string
for _, str := range stringSlice {
if str != "" {
result = append(result, str)
}
}
return result
}
17 changes: 15 additions & 2 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,15 @@ import (
"os"
"runtime"
"syscall"

"strings"
"github.com/blang/semver"
"github.com/contiv/auth_proxy/auth"
"github.com/contiv/auth_proxy/common"
"github.com/contiv/auth_proxy/proxy"
"github.com/contiv/auth_proxy/state"

log "github.com/Sirupsen/logrus"
"net/url"
)

const (
Expand Down Expand Up @@ -218,8 +219,20 @@ func main() {
log.SetLevel(log.DebugLevel)
}

storeURL := []string{}
for _, endpoint := range common.FilterEmpty(strings.Split(dataStoreAddress, ",")) {
_, err := url.Parse(endpoint)
if err != nil {
log.Println("invalid %s endpoint: %v", dataStoreAddress, endpoint)
return
}
storeURL = append(storeURL,endpoint)
log.Println("Using state db endpoints: %v", storeURL)

}

// Initialize data store
if err := state.InitializeStateDriver(dataStoreDriver, dataStoreAddress); err != nil {
if err := state.InitializeStateDriver(dataStoreDriver, storeURL); err != nil {
log.Fatalln(err)
return
}
Expand Down
28 changes: 17 additions & 11 deletions state/consulstatedriver.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,21 +39,27 @@ func (d *ConsulStateDriver) Init(config *types.KVStoreConfig) error {
var err error
var endpoint *url.URL

if config == nil {
return errors.New("Invalid consul config")
if config == nil || len(config.StoreURL) == 0 {
return errors.New("no etcd config found")
}

endpoint, err = url.Parse(config.StoreURL)
if err != nil {
return err
}
if endpoint.Scheme == "consul" {
endpoint.Scheme = "http"
} else if endpoint.Scheme != "http" && endpoint.Scheme != "https" {
return fmt.Errorf("invalid consul URL scheme %q", endpoint.Scheme)
for _,dburl := range config.StoreURL {

endpoint, err = url.Parse(dburl)
if err != nil {
return err
}

if endpoint.Scheme == "etcd" {
endpoint.Scheme = "http"
} else if endpoint.Scheme != "http" && endpoint.Scheme != "https" {
return fmt.Errorf("invalid etcd URL scheme %q", endpoint.Scheme)
}

}

cfg := api.Config{
Address: endpoint.Host,
Address: config.StoreURL[0],
}

// create a consul client
Expand Down
4 changes: 2 additions & 2 deletions state/driverfactory.go
Original file line number Diff line number Diff line change
Expand Up @@ -98,11 +98,11 @@ func GetStateDriver() (types.StateDriver, error) {
// dataStoreAddress: address of the data store
// return values:
// returns any error as NewStateDriver() + validation errors
func InitializeStateDriver(dataStoreDriver, dataStoreAddress string) error {
func InitializeStateDriver(dataStoreDriver string, dataStoreAddress []string) error {
if dataStoreDriver != EtcdName && dataStoreDriver != ConsulName {
return errors.New("Invalid data store driver, please set --data-store-driver (options: [etcd, consul])")
}
if common.IsEmpty(dataStoreAddress) {
if len(dataStoreAddress) == 0 {
return errors.New("Empty data store address, please set --data-store-address")
}
_, err := NewStateDriver(dataStoreDriver, &types.KVStoreConfig{StoreURL: dataStoreAddress})
Expand Down
27 changes: 16 additions & 11 deletions state/etcdstatedriver.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,22 +51,27 @@ func (d *EtcdStateDriver) Init(config *types.KVStoreConfig) error {
var err error
var endpoint *url.URL

if config == nil {
return errors.New("Invalid etcd config")
if config == nil || len(config.StoreURL) == 0 {
return errors.New("no etcd config found")
}

endpoint, err = url.Parse(config.StoreURL)
if err != nil {
return err
}
if endpoint.Scheme == "etcd" {
endpoint.Scheme = "http"
} else if endpoint.Scheme != "http" && endpoint.Scheme != "https" {
return fmt.Errorf("invalid etcd URL scheme %q", endpoint.Scheme)
for _,dburl := range config.StoreURL {

endpoint, err = url.Parse(dburl)
if err != nil {
return err
}

if endpoint.Scheme == "etcd" {
endpoint.Scheme = "http"
} else if endpoint.Scheme != "http" && endpoint.Scheme != "https" {
return fmt.Errorf("invalid etcd URL scheme %q", endpoint.Scheme)
}

}

etcdConfig := client.Config{
Endpoints: []string{endpoint.String()},
Endpoints: config.StoreURL,
}

// create etcd client
Expand Down