mirror of
https://github.com/kubernetes-sigs/kind.git
synced 2025-11-30 23:16:04 +07:00
Add version check.
This commit is contained in:
1
go.sum
1
go.sum
@@ -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/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-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/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=
|
||||
|
||||
@@ -19,6 +19,7 @@ package podman
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"sigs.k8s.io/kind/pkg/errors"
|
||||
"sigs.k8s.io/kind/pkg/exec"
|
||||
)
|
||||
|
||||
@@ -36,3 +37,19 @@ func usernsRemap() bool {
|
||||
}
|
||||
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
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@ import (
|
||||
"net"
|
||||
"strings"
|
||||
|
||||
"github.com/coreos/go-semver/semver"
|
||||
"k8s.io/apimachinery/pkg/util/sets"
|
||||
|
||||
"sigs.k8s.io/kind/pkg/cluster/nodes"
|
||||
@@ -35,6 +36,10 @@ import (
|
||||
"sigs.k8s.io/kind/pkg/internal/cli"
|
||||
)
|
||||
|
||||
const (
|
||||
minSupportedVersion = "1.7.1"
|
||||
)
|
||||
|
||||
// NewProvider returns a new provider based on executing `podman ...`
|
||||
func NewProvider(logger log.Logger) provider.Provider {
|
||||
return &Provider{
|
||||
@@ -50,6 +55,14 @@ type Provider struct {
|
||||
|
||||
// Provision is part of the providers.Provider interface
|
||||
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
|
||||
// ensure node images are pulled before actually provisioning
|
||||
if err := ensureNodeImages(p.logger, status, cfg); err != nil {
|
||||
|
||||
Reference in New Issue
Block a user