Skip to content

Commit

Permalink
Check config values before and after overriding (#13)
Browse files Browse the repository at this point in the history
  • Loading branch information
AlfredBroda authored Jul 24, 2019
1 parent 353110e commit 4d29820
Show file tree
Hide file tree
Showing 5 changed files with 89 additions and 36 deletions.
20 changes: 12 additions & 8 deletions action/deregister.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,17 +54,21 @@ func DeregisterCLI(c *cli.Context) error {
}

// DeregisterK8s configures a VaaS client from K8s data and removes a backend
func DeregisterK8s(podInfo *k8s.PodInfo, config CommonConfig) error {
func DeregisterK8s(podInfo *k8s.PodInfo, config CommonConfig) (err error) {
config.Address = podInfo.GetPodIP()
config.Port = podInfo.GetDefaultPort()
director, err := podInfo.GetDirector()
config.Director, err = overrideValue(config.Director, podInfo.GetDirector(), "Director")
if err != nil {
return fmt.Errorf("could not find VaaS director in Pod info: %s", err)
return
}
config.VaaSURL, err = overrideValue(config.VaaSURL, podInfo.GetVaaSURL(), "VaaS URL")
if err != nil {
return
}
config.VaaSUser, err = overrideValue(config.VaaSUser, podInfo.GetVaaSUser(), "VaaS User")
if err != nil {
return
}
config.Director = director

config.VaaSURL = podInfo.GetVaaSURL()
config.VaaSUser = podInfo.GetVaaSUser()
err = config.GetSecretFromFile(config.VaaSKeyFile)
if err == nil {
return fmt.Errorf("error reading VaaS secret key: %s", err)
Expand All @@ -81,7 +85,7 @@ func DeregisterK8s(podInfo *k8s.PodInfo, config CommonConfig) error {
return fmt.Errorf("could not deregister: %s", err)
}

return errors.New("backend ID not provided")
return nil
}

// GetDeregisterFlags returns a list of flags available for this action
Expand Down
50 changes: 36 additions & 14 deletions action/register.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,17 +62,23 @@ func RegisterCLI(c *cli.Context) error {
}

// RegisterK8s configures a VaaS client from K8s data and runs register()
func RegisterK8s(podInfo *k8s.PodInfo, config CommonConfig) error {
func RegisterK8s(podInfo *k8s.PodInfo, config CommonConfig) (err error) {
config.Address = podInfo.GetPodIP()
config.Port = podInfo.GetDefaultPort()
director, err := podInfo.GetDirector()
if err == nil {
config.Director = director
} else {
return fmt.Errorf("could not find VaaS director in Pod info: %s", err)

config.Director, err = overrideValue(config.Director, podInfo.GetDirector(), "Director")
if err != nil {
return
}
config.VaaSURL, err = overrideValue(config.VaaSURL, podInfo.GetVaaSURL(), "VaaS URL")
if err != nil {
return
}
config.VaaSURL = podInfo.GetVaaSURL()
config.VaaSUser = podInfo.GetVaaSUser()
config.VaaSUser, err = overrideValue(config.VaaSUser, podInfo.GetVaaSUser(), "VaaS User")
if err != nil {
return
}

err = config.GetSecretFromFile(config.VaaSKeyFile)
if err != nil {
return fmt.Errorf("error reading VaaS secret key: %s", err)
Expand All @@ -81,21 +87,34 @@ func RegisterK8s(podInfo *k8s.PodInfo, config CommonConfig) error {
apiClient := vaas.NewClient(config.VaaSURL, config.VaaSUser, config.VaaSKey)
weight, err := podInfo.GetWeight()
if err != nil {
log.Errorf("unusable weight found %q", weight)
log.Errorf("unusable weight %q found: %s", weight, err)
weight = 1
}

dcName := os.Getenv(EnvDC)
if dcName == "" {
dcName, err = podInfo.GetDataCenter()
if err != nil {
log.Errorf("unusable DC name found %q", dcName)
}
podDC, err := podInfo.GetDataCenter()
if err != nil {
log.Errorf("unusable DC name found %q: %s", dcName, err)
}
dcName, err = overrideValue(dcName, podDC, "DC")
if err != nil {
return
}

return register(apiClient, config, weight, dcName)
}

func overrideValue(oldValue, override, name string) (string, error) {
if override != "" {
log.Debugf("Overriding %s (%q) with %q form podInfo", name, oldValue, override)
return override, nil
}
if oldValue == "" {
return oldValue, fmt.Errorf("no value for %s", name)
}
return oldValue, nil
}

// register adds a backend to VaaS
func register(client vaas.Client, cfg CommonConfig, weight int, dcName string) (err error) {
var tags []string
Expand All @@ -109,6 +128,9 @@ func register(client vaas.Client, cfg CommonConfig, weight int, dcName string) (
}

director, err := client.FindDirector(cfg.Director)
if err != nil {
return fmt.Errorf("failed finding Director: %s", err)
}

backend := vaas.Backend{
ID: nil,
Expand Down
35 changes: 35 additions & 0 deletions action/register_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package action

import (
"testing"

"github.com/stretchr/testify/require"
)

func TestIfOverrides(t *testing.T) {
value := "value1"

result, err := overrideValue(value, "value2", "value")

require.NoError(t, err)
require.Equal(t, "value2", result)
}

func TestIfDoesNotOverrideOnEmpty(t *testing.T) {
value := "value1"

result, err := overrideValue(value, "", "value")

require.NoError(t, err)
require.Equal(t, "value1", result)
}

func TestIfOverrideErrorsOnEmpty(t *testing.T) {
value := ""

result, err := overrideValue(value, "", "value")

require.Error(t, err)
require.Equal(t, "no value for value", err.Error())
require.Equal(t, "", result)
}
6 changes: 2 additions & 4 deletions k8s/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,7 @@ func TestIfReturnsCorrectAnnotationData(t *testing.T) {
podInfo, err := GetPodInfo()
require.NoError(t, err)

actualDirector, _ := podInfo.GetDirector()
require.Equal(t, expectedVipName, actualDirector)
require.Equal(t, expectedVipName, podInfo.GetDirector())

actualDC, _ := podInfo.GetDataCenter()
require.Equal(t, expectedDC, actualDC)
Expand All @@ -104,8 +103,7 @@ func TestIfReturnsErroredAnnotationData(t *testing.T) {
podInfo, err := GetPodInfo()
require.NoError(t, err)

_, err = podInfo.GetDirector()
require.EqualError(t, err, fmt.Sprintf("director annotation is empty, annotation key: %s", keyDirector))
require.Equal(t, "", podInfo.GetDirector())

_, err = podInfo.GetDataCenter()
require.EqualError(t, err, fmt.Sprintf("dc annotation is empty, annotation key: %s", keyDC))
Expand Down
14 changes: 4 additions & 10 deletions k8s/pod.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,14 +97,12 @@ func (pi PodInfo) GetEnvironment() (string, error) {

// GetVaaSURL returns VaaS URL
func (pi PodInfo) GetVaaSURL() string {
url := pi.FindAnnotation(keyVaaSURL)
return url
return pi.FindAnnotation(keyVaaSURL)
}

// GetVaaSUser returns VaaS API Username
func (pi PodInfo) GetVaaSUser() string {
username := pi.FindAnnotation(keyVaaSUser)
return username
return pi.FindAnnotation(keyVaaSUser)
}

// GetPodIP returns a Pod IP address
Expand All @@ -113,12 +111,8 @@ func (pi PodInfo) GetPodIP() string {
}

// GetDirector looks up VaaS director name in Pod annotations
func (pi PodInfo) GetDirector() (string, error) {
director := pi.FindAnnotation(keyDirector)
if director == "" {
return "", fmt.Errorf("director annotation is empty, annotation key: %s", keyDirector)
}
return director, nil
func (pi PodInfo) GetDirector() string {
return pi.FindAnnotation(keyDirector)
}

// GetPodInfo fetches k8s PodInfo for the current Pod
Expand Down

0 comments on commit 4d29820

Please sign in to comment.