mirror of https://github.com/knative/pkg.git
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:
parent
1b735efee7
commit
ba7564872c
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue