diff --git a/cmd/flagger/main.go b/cmd/flagger/main.go index b5cb1fc7..c84da585 100644 --- a/cmd/flagger/main.go +++ b/cmd/flagger/main.go @@ -8,6 +8,7 @@ import ( "strings" "time" + semver "github.com/Masterminds/semver" clientset "github.com/weaveworks/flagger/pkg/client/clientset/versioned" informers "github.com/weaveworks/flagger/pkg/client/informers/externalversions" "github.com/weaveworks/flagger/pkg/controller" @@ -115,6 +116,26 @@ func main() { logger.Fatalf("Error calling Kubernetes API: %v", err) } + k8sVersionConstraint := "^1.11.0" + + // We append -alpha.1 to the end of our version constraint so that prebuilds of later versions + // are considered valid for our purposes, as well as some managed solutions like EKS where they provide + // a version like `v1.12.6-eks-d69f1b`. It doesn't matter what the prelease value is here, just that it + // exists in our constraint. + semverConstraint, err := semver.NewConstraint(k8sVersionConstraint + "-alpha.1") + if err != nil { + logger.Fatalf("Error parsing kubernetes version constraint: %v", err) + } + + k8sSemver, err := semver.NewVersion(ver.GitVersion) + if err != nil { + logger.Fatalf("Error parsing kubernetes version as a semantic version: %v", err) + } + + if !semverConstraint.Check(k8sSemver) { + logger.Fatalf("Unsupported version of kubernetes detected. Expected %s, got %v", k8sVersionConstraint, ver) + } + labels := strings.Split(selectorLabels, ",") if len(labels) < 1 { logger.Fatalf("At least one selector label is required") diff --git a/go.mod b/go.mod index 8d2393b0..4755ac4f 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,7 @@ go 1.12 require ( cloud.google.com/go v0.37.4 // indirect + github.com/Masterminds/semver v1.4.2 github.com/beorn7/perks v1.0.0 // indirect github.com/bxcodec/faker v2.0.1+incompatible // indirect github.com/envoyproxy/go-control-plane v0.8.0 // indirect diff --git a/go.sum b/go.sum index 3b49c624..3eb69fc9 100644 --- a/go.sum +++ b/go.sum @@ -8,6 +8,7 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/MakeNowJust/heredoc v0.0.0-20171113091838-e9091a26100e/go.mod h1:64YHyfSL2R96J44Nlwm39UHepQbyR5q10x7iYa1ks2E= github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= +github.com/Masterminds/semver v1.4.2 h1:WBLTQ37jOCzSLtXNdoo8bNM8876KhNqOKvrlGITgsTc= github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= github.com/Masterminds/sprig v2.18.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=