Skip to content

Commit

Permalink
update validation implementation, docs; add new option to make run ta…
Browse files Browse the repository at this point in the history
…rget
  • Loading branch information
montmanu committed Jul 22, 2019
1 parent dacffd8 commit e006ce7
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 72 deletions.
7 changes: 7 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,13 @@ export PLUGIN_VARS="$(cat ${CONFIG_HOME}/custom-vars.json)"
make run
```

Using custom kubectl version:

```sh
export PLUGIN_KUBECTL_VERSION=1.14
make run
```

If you've built the docker image using a custom repo or tag:

```sh
Expand Down
4 changes: 4 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,7 @@ run :
--env PLUGIN_CLUSTER \
--env PLUGIN_DRY_RUN \
--env PLUGIN_EXPAND_ENV_VARS \
--env PLUGIN_KUBECTL_VERSION \
--env PLUGIN_NAMESPACE \
--env PLUGIN_PROJECT \
--env PLUGIN_REGION \
Expand Down Expand Up @@ -240,6 +241,7 @@ $(terraform_state_file) : $(terraform_dir) $(terraform_base_dir)/main.tf
$(terraform) refresh

$(terraform_plan_file) : export GOOGLE_PROJECT ?= $(shell $(gcloud) --quiet config get-value core/project 2>/dev/null)
$(terraform_plan_file) : export GOOGLE_OAUTH_ACCESS_TOKEN ?= $(shell $(gcloud) auth print-access-token 2>/dev/null)
$(terraform_plan_file) : export TF_VAR_drone_gke_test_key_path = $(CURDIR)/$(test_sa_key_path)

$(terraform_plan_file) : $(terraform_state_file) $(terraform_base_dir)/main.tf
Expand All @@ -248,6 +250,7 @@ $(terraform_plan_file) : $(terraform_state_file) $(terraform_base_dir)/main.tf

# create test resources configuration
$(test_sa_key_path) : export GOOGLE_PROJECT ?= $(shell $(gcloud) --quiet config get-value core/project 2>/dev/null)
$(test_sa_key_path) : export GOOGLE_OAUTH_ACCESS_TOKEN ?= $(shell $(gcloud) auth print-access-token 2>/dev/null)
$(test_sa_key_path) : export TF_VAR_drone_gke_test_key_path = $(CURDIR)/$(test_sa_key_path)

# create test resources
Expand All @@ -260,6 +263,7 @@ test-resources : $(test_sa_key_path)

# destroy test service account credentials configuration
destroy-terraform : export GOOGLE_PROJECT ?= $(shell $(gcloud) --quiet config get-value core/project 2>/dev/null)
destroy-terraform : export GOOGLE_OAUTH_ACCESS_TOKEN ?= $(shell $(gcloud) auth print-access-token 2>/dev/null)
destroy-terraform : export TF_VAR_drone_gke_test_key_path = $(CURDIR)/$(test_sa_key_path)

.PHONY : destroy-terraform
Expand Down
35 changes: 9 additions & 26 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -308,51 +308,34 @@ func checkParams(c *cli.Context) error {
return fmt.Errorf("Missing required param: cluster")
}

if !isValidKubectlVersionParam(c, extraKubectlVersions) {
return fmt.Errorf(getInvalidKubectlVersionMessage(c, extraKubectlVersions))
if err := validateKubectlVersion(c, extraKubectlVersions); err != nil {
return err
}

return nil
}

// isValidKubectlVersionParam tests whether a given version is valid within the current environment
func isValidKubectlVersionParam(c *cli.Context, availableVersions []string) bool {
// validateKubectlVersion tests whether a given version is valid within the current environment
func validateKubectlVersion(c *cli.Context, availableVersions []string) error {
kubectlVersionParam := c.String("kubectl-version")
// using the default version
if kubectlVersionParam == "" {
return true
return nil
}

// using a custom version but no extra versions are available
if len(availableVersions) == 0 {
return false
return fmt.Errorf("Invalid param: kubectl-version was set to %s but no extra kubectl versions are available", kubectlVersionParam)
}

// using a custom version ...
// return true if included in available extra versions; false otherwise
// return nil if included in available extra versions; error otherwise
for _, availableVersion := range availableVersions {
if kubectlVersionParam == availableVersion {
return true
return nil
}
}
return false
}

// getInvalidKubectlVersionMessage returns an error message for invalid kubectl-version values
func getInvalidKubectlVersionMessage(c *cli.Context, availableVersions []string) string {
kubectlVersionParam := c.String("kubectl-version")
// kubectl-version is valid; return an empty string
if isValidKubectlVersionParam(c, availableVersions) {
return ""
}

// using a custom version but no extra versions are available
if len(availableVersions) == 0 {
return fmt.Sprintf("Invalid param: kubectl-version was set to %s but no extra kubectl versions are available", kubectlVersionParam)
}

// using a custom version and extra versions are available, but specified version is not included
return fmt.Sprintf("Invalid param kubectl-version: %s must be one of %s", kubectlVersionParam, strings.Join(availableVersions, ", "))
return fmt.Errorf("Invalid param kubectl-version: %s must be one of %s", kubectlVersionParam, strings.Join(availableVersions, ", "))
}

// getProjectFromToken gets project id from token
Expand Down
55 changes: 9 additions & 46 deletions main_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,74 +74,37 @@ func TestCheckParams(t *testing.T) {
assert.NoError(t, err)
}

func TestIsValidKubectlVersionParam(t *testing.T) {
func TestValidateKubectlVersion(t *testing.T) {
// kubectl-version is NOT set (using default kubectl version)
set := flag.NewFlagSet("default-kubectl-version", 0)
c := cli.NewContext(nil, set, nil)
availableVersions := []string{}
isValid := isValidKubectlVersionParam(c, availableVersions)
assert.True(t, isValid, "expected isValidKubectlVersionParam to be true when no kubectl-version param was set")
err := validateKubectlVersion(c, availableVersions)
assert.NoError(t, err, "expected validateKubectlVersion to return nil when no kubectl-version param was set")

// kubectl-version is set and extra kubectl versions are NOT available
set = flag.NewFlagSet("kubectl-version-set-no-extra-versions-available", 0)
c = cli.NewContext(nil, set, nil)
set.String("kubectl-version", "1.14", "")
availableVersions = []string{}
isValid = isValidKubectlVersionParam(c, availableVersions)
assert.False(t, isValid, "expected isValidKubectlVersionParam to be false when no extra kubectl versions are available")
err = validateKubectlVersion(c, availableVersions)
assert.Error(t, err, "expected validateKubectlVersion to return an error when no extra kubectl versions are available")

// kubectl-version is set, extra kubectl versions are available, kubectl-version is included
set = flag.NewFlagSet("valid-kubectl-version", 0)
c = cli.NewContext(nil, set, nil)
set.String("kubectl-version", "1.13", "")
availableVersions = []string{"1.11", "1.12", "1.13", "1.14"}
isValid = isValidKubectlVersionParam(c, availableVersions)
assert.True(t, isValid, "expected isValidKubectlVersionParam to be true when kubectl-version is set, extra kubectl versions are available, kubectl-version is included")
err = validateKubectlVersion(c, availableVersions)
assert.NoError(t, err, "expected validateKubectlVersion to return an error when kubectl-version is set, extra kubectl versions are available, kubectl-version is included")

// kubectl-version is set, extra kubectl versions are available, kubectl-version is NOT included
set = flag.NewFlagSet("invalid-kubectl-version", 0)
c = cli.NewContext(nil, set, nil)
set.String("kubectl-version", "9.99", "")
availableVersions = []string{"1.11", "1.12", "1.13", "1.14"}
isValid = isValidKubectlVersionParam(c, availableVersions)
assert.False(t, isValid, "expected isValidKubectlVersionParam to be false when kubectl-version is set, extra kubectl versions are available, kubectl-version is NOT included")
}

func TestGetInvalidKubectlVersionMessage(t *testing.T) {
// kubectl-version is NOT set (using default kubectl version)
set := flag.NewFlagSet("default-kubectl-version", 0)
c := cli.NewContext(nil, set, nil)
availableVersions := []string{}
expected := ""
actual := getInvalidKubectlVersionMessage(c, availableVersions)
assert.Equal(t, expected, actual, "expected getInvalidKubectlVersionMessage to return empty string when kubectl-version is NOT set")

// kubectl-version is set and extra kubectl versions are NOT available
set = flag.NewFlagSet("kubectl-version-set-no-extra-versions-available", 0)
c = cli.NewContext(nil, set, nil)
set.String("kubectl-version", "1.14", "")
availableVersions = []string{}
expected = "Invalid param: kubectl-version was set to 1.14 but no extra kubectl versions are available"
actual = getInvalidKubectlVersionMessage(c, availableVersions)
assert.Equal(t, expected, actual, "expected getInvalidKubectlVersionMessage to return matching string when kubectl-version is set and extra kubectl versions are NOT available")

// kubectl-version is set, extra kubectl versions are available, kubectl-version is included
set = flag.NewFlagSet("valid-kubectl-version", 0)
c = cli.NewContext(nil, set, nil)
set.String("kubectl-version", "1.13", "")
availableVersions = []string{"1.11", "1.12", "1.13", "1.14"}
expected = ""
actual = getInvalidKubectlVersionMessage(c, availableVersions)
assert.Equal(t, expected, actual, "expected getInvalidKubectlVersionMessage to return empty string when kubectl-version is set, extra kubectl versions are available, kubectl-version is included")

// kubectl-version is set, extra kubectl versions are available, kubectl-version is NOT included
set = flag.NewFlagSet("invalid-kubectl-version", 0)
c = cli.NewContext(nil, set, nil)
set.String("kubectl-version", "9.99", "")
availableVersions = []string{"1.11", "1.12", "1.13", "1.14"}
expected = "Invalid param kubectl-version: 9.99 must be one of 1.11, 1.12, 1.13, 1.14"
actual = getInvalidKubectlVersionMessage(c, availableVersions)
assert.Equal(t, expected, actual, "expected getInvalidKubectlVersionMessage to return matching string when kubectl-version is set, extra kubectl versions are available, kubectl-version is NOT included")
err = validateKubectlVersion(c, availableVersions)
assert.Error(t, err, "expected validateKubectlVersion to return nil when kubectl-version is set, extra kubectl versions are available, kubectl-version is NOT included")
}

func TestGetProjectFromToken(t *testing.T) {
Expand Down

0 comments on commit e006ce7

Please sign in to comment.