Skip to content

Commit

Permalink
[feat] add k8s version for environment builder (#58)
Browse files Browse the repository at this point in the history
Clusters already have the ability to designate a specific
Kubernetes version, this patch forwards that ability up
through the environment which creates the cluster and makes
the functionality available via CLI using the newly added
flag ktf env create --kubernetes-version <VERSION>.

* fix: gitignore not ignoring linux binaries
* fix: deduplicate CI runs
  • Loading branch information
shaneutt committed Jul 23, 2021
1 parent 4bfc073 commit 0133206
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 5 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ on:
- 'main'
push:
branches:
- '*'
- 'main'
tags:
- '*'

Expand Down
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
*.dll
*.so
*.dylib
./ktf*
ktf*

# Test binary, built with `go test -c`
*.test
Expand Down
14 changes: 14 additions & 0 deletions internal/cmd/environments.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ package cmd
import (
"context"
"fmt"
"strings"

"github.com/blang/semver/v4"
"github.com/spf13/cobra"

"github.com/kong/kubernetes-testing-framework/pkg/clusters/addons/kong"
Expand Down Expand Up @@ -37,6 +39,9 @@ func init() {
environmentsCreateCmd.PersistentFlags().String("name", DefaultEnvironmentName, "name to give the new testing environment")
environmentsCreateCmd.PersistentFlags().Bool("generate-name", false, "indicate whether or not to use a generated name for the environment")

// cluster configurations
environmentsCreateCmd.PersistentFlags().String("kubernetes-version", "", "which kubernetes version to use (default: latest for driver)")

// addon configurations
environmentsCreateCmd.PersistentFlags().StringArray("addon", nil, "name of an addon to deploy to the testing environment's cluster")
environmentsCreateCmd.PersistentFlags().Bool("kong-disable-controller", false, "indicate whether the kong addon should have the controller disabled (proxy only)")
Expand All @@ -62,11 +67,20 @@ var environmentsCreateCmd = &cobra.Command{
useGeneratedName, err := cmd.PersistentFlags().GetBool("generate-name")
cobra.CheckErr(err)

// check if a specific Kubernetes version was requested
kubernetesVersion, err := cmd.PersistentFlags().GetString("kubernetes-version")
cobra.CheckErr(err)

// setup the new environment
builder := environments.NewBuilder()
if !useGeneratedName {
builder = builder.WithName(name)
}
if kubernetesVersion != "" {
version, err := semver.Parse(strings.TrimPrefix(kubernetesVersion, "v"))
cobra.CheckErr(err)
builder = builder.WithKubernetesVersion(version)
}

// configure any addons that need to be deployed with the environment's cluster
configureAddons(cmd, builder, deployAddons)
Expand Down
23 changes: 20 additions & 3 deletions pkg/environments/builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@ package environments

import (
"context"
"fmt"

"github.com/blang/semver/v4"
"github.com/google/uuid"

"github.com/kong/kubernetes-testing-framework/pkg/clusters"
Expand All @@ -17,8 +19,9 @@ import (
type Builder struct {
Name string

addons clusters.Addons
existingCluster clusters.Cluster
addons clusters.Addons
existingCluster clusters.Cluster
kubernetesVersion *semver.Version
}

// NewBuilder generates a new empty Builder for creating Environments.
Expand Down Expand Up @@ -51,6 +54,13 @@ func (b *Builder) WithExistingCluster(cluster clusters.Cluster) *Builder {
return b
}

// WithKubernetesVersion indicates which Kubernetes version to deploy clusters
// with, if the caller wants something other than the default.
func (b *Builder) WithKubernetesVersion(version semver.Version) *Builder {
b.kubernetesVersion = &version
return b
}

// Build is a blocking call to construct the configured Environment and it's
// underlying Kubernetes cluster. The amount of time that it blocks depends
// entirely on the underlying clusters.Cluster implementation that was requested.
Expand All @@ -59,11 +69,18 @@ func (b *Builder) Build(ctx context.Context) (Environment, error) {

if b.existingCluster == nil {
var err error
cluster, err = kind.NewBuilder().WithName(b.Name).Build(ctx)
builder := kind.NewBuilder().WithName(b.Name)
if b.kubernetesVersion != nil {
builder.WithClusterVersion(*b.kubernetesVersion)
}
cluster, err = builder.Build(ctx)
if err != nil {
return nil, err
}
} else {
if b.kubernetesVersion != nil {
return nil, fmt.Errorf("can't provide kubernetes version when using an existing cluster")
}
cluster = b.existingCluster
}

Expand Down

0 comments on commit 0133206

Please sign in to comment.