diff --git a/action/deregister.go b/action/deregister.go index 30adb98..d87ed55 100644 --- a/action/deregister.go +++ b/action/deregister.go @@ -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) @@ -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 diff --git a/action/register.go b/action/register.go index 43e8b36..8f14e49 100644 --- a/action/register.go +++ b/action/register.go @@ -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) @@ -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 @@ -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, diff --git a/action/register_test.go b/action/register_test.go new file mode 100644 index 0000000..3672716 --- /dev/null +++ b/action/register_test.go @@ -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) +} diff --git a/k8s/client_test.go b/k8s/client_test.go index d00c69f..04a5cf1 100644 --- a/k8s/client_test.go +++ b/k8s/client_test.go @@ -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) @@ -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)) diff --git a/k8s/pod.go b/k8s/pod.go index 6f7621b..cbf81c2 100644 --- a/k8s/pod.go +++ b/k8s/pod.go @@ -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 @@ -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