Port remaining code to pkg/util/version

pull/6/head
Dan Winship 2016-10-22 13:28:17 -04:00
parent f369372dad
commit c788793868
11 changed files with 31 additions and 107 deletions

View File

@ -36,8 +36,8 @@ go_library(
"//pkg/util/runtime:go_default_library", "//pkg/util/runtime:go_default_library",
"//pkg/util/sets:go_default_library", "//pkg/util/sets:go_default_library",
"//pkg/util/sysctl:go_default_library", "//pkg/util/sysctl:go_default_library",
"//pkg/util/version:go_default_library",
"//pkg/util/wait:go_default_library", "//pkg/util/wait:go_default_library",
"//vendor:github.com/blang/semver",
"//vendor:github.com/golang/glog", "//vendor:github.com/golang/glog",
"//vendor:github.com/opencontainers/runc/libcontainer/cgroups", "//vendor:github.com/opencontainers/runc/libcontainer/cgroups",
"//vendor:github.com/opencontainers/runc/libcontainer/cgroups/fs", "//vendor:github.com/opencontainers/runc/libcontainer/cgroups/fs",

View File

@ -29,7 +29,6 @@ import (
"sync" "sync"
"time" "time"
"github.com/blang/semver"
"github.com/golang/glog" "github.com/golang/glog"
"github.com/opencontainers/runc/libcontainer/cgroups" "github.com/opencontainers/runc/libcontainer/cgroups"
"github.com/opencontainers/runc/libcontainer/cgroups/fs" "github.com/opencontainers/runc/libcontainer/cgroups/fs"
@ -47,6 +46,7 @@ import (
"k8s.io/kubernetes/pkg/util/runtime" "k8s.io/kubernetes/pkg/util/runtime"
"k8s.io/kubernetes/pkg/util/sets" "k8s.io/kubernetes/pkg/util/sets"
utilsysctl "k8s.io/kubernetes/pkg/util/sysctl" utilsysctl "k8s.io/kubernetes/pkg/util/sysctl"
utilversion "k8s.io/kubernetes/pkg/util/version"
"k8s.io/kubernetes/pkg/util/wait" "k8s.io/kubernetes/pkg/util/wait"
) )
@ -66,7 +66,7 @@ const (
var ( var (
// The docker version in which containerd was introduced. // The docker version in which containerd was introduced.
containerdVersion = semver.MustParse("1.11.0") containerdVersion = utilversion.MustParseSemantic("1.11.0")
) )
// A non-user container tracked by the Kubelet. // A non-user container tracked by the Kubelet.
@ -632,10 +632,10 @@ func getPidsForProcess(name, pidFile string) ([]int, error) {
// Temporarily export the function to be used by dockershim. // Temporarily export the function to be used by dockershim.
// TODO(yujuhong): Move this function to dockershim once kubelet migrates to // TODO(yujuhong): Move this function to dockershim once kubelet migrates to
// dockershim as the default. // dockershim as the default.
func EnsureDockerInContainer(dockerVersion semver.Version, oomScoreAdj int, manager *fs.Manager) error { func EnsureDockerInContainer(dockerVersion *utilversion.Version, oomScoreAdj int, manager *fs.Manager) error {
type process struct{ name, file string } type process struct{ name, file string }
dockerProcs := []process{{dockerProcessName, dockerPidFile}} dockerProcs := []process{{dockerProcessName, dockerPidFile}}
if dockerVersion.GTE(containerdVersion) { if dockerVersion.AtLeast(containerdVersion) {
dockerProcs = append(dockerProcs, process{containerdProcessName, containerdPidFile}) dockerProcs = append(dockerProcs, process{containerdProcessName, containerdPidFile})
} }
var errs []error var errs []error
@ -797,17 +797,16 @@ func isKernelPid(pid int) bool {
} }
// Helper for getting the docker version. // Helper for getting the docker version.
func getDockerVersion(cadvisor cadvisor.Interface) semver.Version { func getDockerVersion(cadvisor cadvisor.Interface) *utilversion.Version {
var fallback semver.Version // Fallback to zero-value by default.
versions, err := cadvisor.VersionInfo() versions, err := cadvisor.VersionInfo()
if err != nil { if err != nil {
glog.Errorf("Error requesting cAdvisor VersionInfo: %v", err) glog.Errorf("Error requesting cAdvisor VersionInfo: %v", err)
return fallback return utilversion.MustParseSemantic("0.0.0")
} }
dockerVersion, err := semver.Parse(versions.DockerVersion) dockerVersion, err := utilversion.ParseSemantic(versions.DockerVersion)
if err != nil { if err != nil {
glog.Errorf("Error parsing docker version %q: %v", versions.DockerVersion, err) glog.Errorf("Error parsing docker version %q: %v", versions.DockerVersion, err)
return fallback return utilversion.MustParseSemantic("0.0.0")
} }
return dockerVersion return dockerVersion
} }

View File

@ -18,8 +18,8 @@ go_library(
"//pkg/kubelet/cm:go_default_library", "//pkg/kubelet/cm:go_default_library",
"//pkg/kubelet/dockertools:go_default_library", "//pkg/kubelet/dockertools:go_default_library",
"//pkg/kubelet/qos:go_default_library", "//pkg/kubelet/qos:go_default_library",
"//pkg/util/version:go_default_library",
"//pkg/util/wait:go_default_library", "//pkg/util/wait:go_default_library",
"//vendor:github.com/blang/semver",
"//vendor:github.com/golang/glog", "//vendor:github.com/golang/glog",
"//vendor:github.com/opencontainers/runc/libcontainer/cgroups/fs", "//vendor:github.com/opencontainers/runc/libcontainer/cgroups/fs",
"//vendor:github.com/opencontainers/runc/libcontainer/configs", "//vendor:github.com/opencontainers/runc/libcontainer/configs",

View File

@ -25,13 +25,13 @@ import (
"strconv" "strconv"
"time" "time"
"github.com/blang/semver"
"github.com/golang/glog" "github.com/golang/glog"
"github.com/opencontainers/runc/libcontainer/cgroups/fs" "github.com/opencontainers/runc/libcontainer/cgroups/fs"
"github.com/opencontainers/runc/libcontainer/configs" "github.com/opencontainers/runc/libcontainer/configs"
kubecm "k8s.io/kubernetes/pkg/kubelet/cm" kubecm "k8s.io/kubernetes/pkg/kubelet/cm"
"k8s.io/kubernetes/pkg/kubelet/dockertools" "k8s.io/kubernetes/pkg/kubelet/dockertools"
"k8s.io/kubernetes/pkg/kubelet/qos" "k8s.io/kubernetes/pkg/kubelet/qos"
utilversion "k8s.io/kubernetes/pkg/util/version"
"k8s.io/kubernetes/pkg/util/wait" "k8s.io/kubernetes/pkg/util/wait"
) )
@ -85,7 +85,7 @@ func (m *containerManager) doWork() {
glog.Errorf("Unable to get docker version: %v", err) glog.Errorf("Unable to get docker version: %v", err)
return return
} }
version, err := semver.Parse(v.Version) version, err := utilversion.ParseSemantic(v.Version)
if err != nil { if err != nil {
glog.Errorf("Unable to parse docker version %q: %v", v.Version, err) glog.Errorf("Unable to parse docker version %q: %v", v.Version, err)
return return

View File

@ -62,7 +62,7 @@ go_library(
"//pkg/util/sets:go_default_library", "//pkg/util/sets:go_default_library",
"//pkg/util/strings:go_default_library", "//pkg/util/strings:go_default_library",
"//pkg/util/term:go_default_library", "//pkg/util/term:go_default_library",
"//vendor:github.com/coreos/go-semver/semver", "//pkg/util/version:go_default_library",
"//vendor:github.com/docker/distribution/digest", "//vendor:github.com/docker/distribution/digest",
"//vendor:github.com/docker/distribution/reference", "//vendor:github.com/docker/distribution/reference",
"//vendor:github.com/docker/docker/pkg/jsonmessage", "//vendor:github.com/docker/docker/pkg/jsonmessage",

View File

@ -34,7 +34,6 @@ import (
"sync" "sync"
"time" "time"
"github.com/coreos/go-semver/semver"
dockertypes "github.com/docker/engine-api/types" dockertypes "github.com/docker/engine-api/types"
dockercontainer "github.com/docker/engine-api/types/container" dockercontainer "github.com/docker/engine-api/types/container"
dockerstrslice "github.com/docker/engine-api/types/strslice" dockerstrslice "github.com/docker/engine-api/types/strslice"
@ -73,6 +72,7 @@ import (
"k8s.io/kubernetes/pkg/util/sets" "k8s.io/kubernetes/pkg/util/sets"
utilstrings "k8s.io/kubernetes/pkg/util/strings" utilstrings "k8s.io/kubernetes/pkg/util/strings"
"k8s.io/kubernetes/pkg/util/term" "k8s.io/kubernetes/pkg/util/term"
utilversion "k8s.io/kubernetes/pkg/util/version"
) )
const ( const (
@ -1033,37 +1033,9 @@ func getDockerNetworkMode(container *dockertypes.ContainerJSON) string {
return "" return ""
} }
// dockerVersion implements kubecontainer.Version interface by implementing
// Compare() and String() (which is implemented by the underlying semver.Version)
// TODO: this code is the same as rktVersion and may make sense to be moved to
// somewhere shared.
type dockerVersion struct {
*semver.Version
}
// newDockerVersion returns a semantically versioned docker version value // newDockerVersion returns a semantically versioned docker version value
func newDockerVersion(version string) (dockerVersion, error) { func newDockerVersion(version string) (*utilversion.Version, error) {
sem, err := semver.NewVersion(version) return utilversion.ParseSemantic(version)
return dockerVersion{sem}, err
}
func (r dockerVersion) String() string {
return r.Version.String()
}
func (r dockerVersion) Compare(other string) (int, error) {
v, err := newDockerVersion(other)
if err != nil {
return -1, err
}
if r.LessThan(*v.Version) {
return -1, nil
}
if v.Version.LessThan(*r.Version) {
return 1, nil
}
return 0, nil
} }
// apiVersion implements kubecontainer.Version interface by implementing // apiVersion implements kubecontainer.Version interface by implementing

View File

@ -2117,12 +2117,14 @@ func TestDockerVersionComparison(t *testing.T) {
{version: "1.10.4-rc1", compare: -1}, {version: "1.10.4-rc1", compare: -1},
{version: "1.11.1", compare: -1}, {version: "1.11.1", compare: -1},
{version: "1.11.1-rc4", compare: -1}, {version: "1.11.1-rc4", compare: -1},
{version: "invalid", compare: -1, err: true}, {version: "invalid", err: true},
} { } {
testCase := fmt.Sprintf("test case #%d test version %q", i, test.version) testCase := fmt.Sprintf("test case #%d test version %q", i, test.version)
res, err := v.Compare(test.version) res, err := v.Compare(test.version)
assert.Equal(t, test.compare, res, testCase)
assert.Equal(t, test.err, err != nil, testCase) assert.Equal(t, test.err, err != nil, testCase)
if !test.err {
assert.Equal(t, test.compare, res, testCase)
}
} }
} }

View File

@ -53,7 +53,7 @@ go_library(
"//pkg/util/runtime:go_default_library", "//pkg/util/runtime:go_default_library",
"//pkg/util/selinux:go_default_library", "//pkg/util/selinux:go_default_library",
"//pkg/util/sets:go_default_library", "//pkg/util/sets:go_default_library",
"//vendor:github.com/coreos/go-semver/semver", "//pkg/util/version:go_default_library",
"//vendor:github.com/docker/docker/pkg/jsonlog", "//vendor:github.com/docker/docker/pkg/jsonlog",
"//vendor:github.com/fsnotify/fsnotify", "//vendor:github.com/fsnotify/fsnotify",
"//vendor:github.com/golang/glog", "//vendor:github.com/golang/glog",

View File

@ -22,7 +22,6 @@ import (
"os" "os"
"time" "time"
"github.com/coreos/go-semver/semver"
"github.com/golang/glog" "github.com/golang/glog"
cadvisorapi "github.com/google/cadvisor/info/v1" cadvisorapi "github.com/google/cadvisor/info/v1"
@ -43,6 +42,7 @@ import (
kubetypes "k8s.io/kubernetes/pkg/types" kubetypes "k8s.io/kubernetes/pkg/types"
"k8s.io/kubernetes/pkg/util/flowcontrol" "k8s.io/kubernetes/pkg/util/flowcontrol"
utilruntime "k8s.io/kubernetes/pkg/util/runtime" utilruntime "k8s.io/kubernetes/pkg/util/runtime"
utilversion "k8s.io/kubernetes/pkg/util/version"
) )
const ( const (
@ -202,33 +202,8 @@ func (m *kubeGenericRuntimeManager) Type() string {
return m.runtimeName return m.runtimeName
} }
// runtimeVersion implements kubecontainer.Version interface by implementing func newRuntimeVersion(version string) (*utilversion.Version, error) {
// Compare() and String() return utilversion.ParseSemantic(version)
type runtimeVersion struct {
*semver.Version
}
func newRuntimeVersion(version string) (runtimeVersion, error) {
sem, err := semver.NewVersion(version)
if err != nil {
return runtimeVersion{}, err
}
return runtimeVersion{sem}, nil
}
func (r runtimeVersion) Compare(other string) (int, error) {
v, err := semver.NewVersion(other)
if err != nil {
return -1, err
}
if r.LessThan(*v) {
return -1, nil
}
if v.LessThan(*r.Version) {
return 1, nil
}
return 0, nil
} }
func (m *kubeGenericRuntimeManager) getTypedVersion() (*runtimeapi.VersionResponse, error) { func (m *kubeGenericRuntimeManager) getTypedVersion() (*runtimeapi.VersionResponse, error) {

View File

@ -47,10 +47,10 @@ go_library(
"//pkg/util/strings:go_default_library", "//pkg/util/strings:go_default_library",
"//pkg/util/term:go_default_library", "//pkg/util/term:go_default_library",
"//pkg/util/uuid:go_default_library", "//pkg/util/uuid:go_default_library",
"//pkg/util/version:go_default_library",
"//pkg/util/wait:go_default_library", "//pkg/util/wait:go_default_library",
"//vendor:github.com/appc/spec/schema", "//vendor:github.com/appc/spec/schema",
"//vendor:github.com/appc/spec/schema/types", "//vendor:github.com/appc/spec/schema/types",
"//vendor:github.com/coreos/go-semver/semver",
"//vendor:github.com/coreos/go-systemd/dbus", "//vendor:github.com/coreos/go-systemd/dbus",
"//vendor:github.com/coreos/go-systemd/unit", "//vendor:github.com/coreos/go-systemd/unit",
"//vendor:github.com/coreos/rkt/api/v1alpha", "//vendor:github.com/coreos/rkt/api/v1alpha",

View File

@ -20,45 +20,21 @@ import (
"fmt" "fmt"
"sync" "sync"
"github.com/coreos/go-semver/semver"
rktapi "github.com/coreos/rkt/api/v1alpha" rktapi "github.com/coreos/rkt/api/v1alpha"
"golang.org/x/net/context" "golang.org/x/net/context"
utilversion "k8s.io/kubernetes/pkg/util/version"
) )
type versions struct { type versions struct {
sync.RWMutex sync.RWMutex
binVersion rktVersion binVersion *utilversion.Version
apiVersion rktVersion apiVersion *utilversion.Version
systemdVersion systemdVersion systemdVersion systemdVersion
} }
// rktVersion implementes kubecontainer.Version interface by implementing func newRktVersion(version string) (*utilversion.Version, error) {
// Compare() and String() (which is implemented by the underlying semver.Version) return utilversion.ParseSemantic(version)
type rktVersion struct {
*semver.Version
}
func newRktVersion(version string) (rktVersion, error) {
sem, err := semver.NewVersion(version)
if err != nil {
return rktVersion{}, err
}
return rktVersion{sem}, nil
}
func (r rktVersion) Compare(other string) (int, error) {
v, err := semver.NewVersion(other)
if err != nil {
return -1, err
}
if r.LessThan(*v) {
return -1, nil
}
if v.LessThan(*r.Version) {
return 1, nil
}
return 0, nil
} }
func (r *Runtime) getVersions() error { func (r *Runtime) getVersions() error {