github.com/docker/compose-on-kubernetes@v0.5.0/install/requirements.go (about) 1 package install 2 3 import ( 4 "fmt" 5 "strings" 6 7 "github.com/Masterminds/semver" 8 "github.com/pkg/errors" 9 k8sVersion "k8s.io/apimachinery/pkg/version" 10 "k8s.io/client-go/discovery" 11 "k8s.io/client-go/rest" 12 ) 13 14 // Minimum server version required. 15 var minimumServerVersion = "1.8" 16 17 // CheckRequirements fetches the server version and checks it is above the 18 // minimum required version. 19 func CheckRequirements(config *rest.Config) error { 20 client, err := discovery.NewDiscoveryClientForConfig(config) 21 if err != nil { 22 return err 23 } 24 25 kubeVersion, err := client.ServerVersion() 26 if err != nil { 27 return err 28 } 29 30 return checkVersion(kubeVersion, minimumServerVersion) 31 } 32 33 func checkVersion(version *k8sVersion.Info, minimumVersion string) error { 34 constraint, err := semver.NewConstraint(">= " + minimumVersion) 35 if err != nil { 36 return err 37 } 38 39 versionStr := version.Major + "." + version.Minor 40 v, err := semver.NewVersion(strings.TrimSuffix(versionStr, "+")) 41 if err != nil { 42 return errors.Wrapf(err, "unsupported server version: %s", versionStr) 43 } 44 45 if !constraint.Check(v) { 46 return fmt.Errorf("unsupported server version: %s < %s", versionStr, minimumVersion) 47 } 48 49 return nil 50 }