Bump the minimum Kubernetes version to 1.14.x (#683)

This will be the lowest supported version of upstream Kubernetes, once 1.16 has cut.
This commit is contained in:
Matt Moore 2019-09-18 18:03:47 -07:00 committed by Knative Prow Robot
parent 1b735efee7
commit ba7564872c
2 changed files with 44 additions and 16 deletions

View File

@ -18,6 +18,7 @@ package version
import (
"fmt"
"os"
"github.com/rogpeppe/go-internal/semver"
"k8s.io/apimachinery/pkg/version"
@ -31,7 +32,20 @@ type ServerVersioner interface {
ServerVersion() (*version.Info, error)
}
var minimumVersion = "v1.11.0"
const (
// KubernetesMinVersionKey is the environment variable that can be used to override
// the Kubernetes minimum version required by Knative.
KubernetesMinVersionKey = "KUBERNETES_MIN_VERSION"
defaultMinimumVersion = "v1.14.0"
)
func getMinimumVersion() string {
if v := os.Getenv(KubernetesMinVersionKey); v != "" {
return v
}
return defaultMinimumVersion
}
// CheckMinimumVersion checks if the currently installed version of
// Kubernetes is compatible with the minimum version required.
@ -46,10 +60,13 @@ func CheckMinimumVersion(versioner ServerVersioner) error {
}
currentVersion := semver.Canonical(v.String())
minimumVersion := getMinimumVersion()
// Compare returns 1 if the first version is greater than the
// second version.
if semver.Compare(minimumVersion, currentVersion) == 1 {
return fmt.Errorf("kubernetes version %q is not compatible, need at least %q", currentVersion, minimumVersion)
return fmt.Errorf("kubernetes version %q is not compatible, need at least %q (this can be overriden with the env var %q)",
currentVersion, minimumVersion, KubernetesMinVersionKey)
}
return nil
}

View File

@ -18,6 +18,7 @@ package version
import (
"errors"
"os"
"testing"
"k8s.io/apimachinery/pkg/version"
@ -34,36 +35,46 @@ func (t *testVersioner) ServerVersion() (*version.Info, error) {
func TestVersionCheck(t *testing.T) {
tests := []struct {
name string
actualVersion *testVersioner
wantError bool
name string
actualVersion *testVersioner
versionOverride string
wantError bool
}{{
name: "greater version (patch)",
actualVersion: &testVersioner{version: "v1.11.1"},
actualVersion: &testVersioner{version: "v1.14.1"},
}, {
name: "greater version (minor)",
actualVersion: &testVersioner{version: "v1.12.0"},
actualVersion: &testVersioner{version: "v1.15.0"},
}, {
name: "same version",
actualVersion: &testVersioner{version: "v1.11.0"},
actualVersion: &testVersioner{version: "v1.14.0"},
}, {
name: "smaller version",
actualVersion: &testVersioner{version: "v1.10.3"},
actualVersion: &testVersioner{version: "v1.13.3"},
wantError: true,
}, {
name: "error while fetching",
actualVersion: &testVersioner{err: errors.New("random error")},
wantError: true,
}, {
name: "smaller version",
versionOverride: "v1.13.0",
actualVersion: &testVersioner{version: "v1.13.3"},
}}
for _, test := range tests {
err := CheckMinimumVersion(test.actualVersion)
if err == nil && test.wantError {
t.Errorf("Expected an error for minimum: %q, actual: %v", minimumVersion, test.actualVersion)
}
t.Run(test.name, func(t *testing.T) {
os.Setenv(KubernetesMinVersionKey, test.versionOverride)
defer os.Setenv(KubernetesMinVersionKey, "")
if err != nil && !test.wantError {
t.Errorf("Expected no error but got %v for minimum: %q, actual: %v", err, minimumVersion, test.actualVersion)
}
err := CheckMinimumVersion(test.actualVersion)
if err == nil && test.wantError {
t.Errorf("Expected an error for minimum: %q, actual: %v", getMinimumVersion(), test.actualVersion)
}
if err != nil && !test.wantError {
t.Errorf("Expected no error but got %v for minimum: %q, actual: %v", err, getMinimumVersion(), test.actualVersion)
}
})
}
}