Add version check.

This commit is contained in:
Amit Watve
2020-01-27 21:35:34 -08:00
parent b7ed10b029
commit 3886608a28
3 changed files with 31 additions and 0 deletions

1
go.sum
View File

@@ -8,6 +8,7 @@ github.com/alessio/shellescape v0.0.0-20190409004728-b115ca0f9053/go.mod h1:xW8s
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
github.com/coreos/go-semver v0.2.0 h1:3Jm3tLmsgAYcjC+4Up7hJrFBPr+n7rAqYeSw/SZazuY=
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=

View File

@@ -19,6 +19,7 @@ package podman
import ( import (
"strings" "strings"
"sigs.k8s.io/kind/pkg/errors"
"sigs.k8s.io/kind/pkg/exec" "sigs.k8s.io/kind/pkg/exec"
) )
@@ -36,3 +37,19 @@ func usernsRemap() bool {
} }
return false return false
} }
func version() (string, error) {
cmd := exec.Command("podman", "--version")
lines, err := exec.CombinedOutputLines(cmd)
if err != nil {
return "", err
}
if len(lines) != 1 {
return "", errors.Errorf("podman version should only be one line, got %d", len(lines))
}
contents := strings.Split(lines[0], " ")
if len(contents) != 3 {
return "", errors.Errorf("podman version contents should have 3 parts, got %d", len(contents))
}
return strings.TrimSuffix(contents[2], "-dev"), nil
}

View File

@@ -21,6 +21,7 @@ import (
"net" "net"
"strings" "strings"
"github.com/coreos/go-semver/semver"
"k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/sets"
"sigs.k8s.io/kind/pkg/cluster/nodes" "sigs.k8s.io/kind/pkg/cluster/nodes"
@@ -35,6 +36,10 @@ import (
"sigs.k8s.io/kind/pkg/internal/cli" "sigs.k8s.io/kind/pkg/internal/cli"
) )
const (
minSupportedVersion = "1.7.1"
)
// NewProvider returns a new provider based on executing `podman ...` // NewProvider returns a new provider based on executing `podman ...`
func NewProvider(logger log.Logger) provider.Provider { func NewProvider(logger log.Logger) provider.Provider {
return &Provider{ return &Provider{
@@ -50,6 +55,14 @@ type Provider struct {
// Provision is part of the providers.Provider interface // Provision is part of the providers.Provider interface
func (p *Provider) Provision(status *cli.Status, cluster string, cfg *config.Cluster) (err error) { func (p *Provider) Provision(status *cli.Status, cluster string, cfg *config.Cluster) (err error) {
// ensure that podman version is a compatible version
version, err := version()
if err != nil {
return err
}
if semver.New(version).Compare(*semver.New(minSupportedVersion)) < 0 {
return errors.Errorf("podman version %q is too old, please upgrade to %q or later", version, minSupportedVersion)
}
// TODO: validate cfg // TODO: validate cfg
// ensure node images are pulled before actually provisioning // ensure node images are pulled before actually provisioning
if err := ensureNodeImages(p.logger, status, cfg); err != nil { if err := ensureNodeImages(p.logger, status, cfg); err != nil {