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  }