From c7887938684377a9a148ad61e2296c6191a5f0c3 Mon Sep 17 00:00:00 2001 From: Dan Winship Date: Sat, 22 Oct 2016 13:28:17 -0400 Subject: [PATCH] Port remaining code to pkg/util/version --- pkg/kubelet/cm/BUILD | 2 +- pkg/kubelet/cm/container_manager_linux.go | 17 +++++---- pkg/kubelet/dockershim/cm/BUILD | 2 +- .../dockershim/cm/container_manager_linux.go | 4 +-- pkg/kubelet/dockertools/BUILD | 2 +- pkg/kubelet/dockertools/docker_manager.go | 34 ++---------------- .../dockertools/docker_manager_test.go | 6 ++-- pkg/kubelet/kuberuntime/BUILD | 2 +- .../kuberuntime/kuberuntime_manager.go | 31 ++-------------- pkg/kubelet/rkt/BUILD | 2 +- pkg/kubelet/rkt/version.go | 36 ++++--------------- 11 files changed, 31 insertions(+), 107 deletions(-) diff --git a/pkg/kubelet/cm/BUILD b/pkg/kubelet/cm/BUILD index 4f043d246f5..6b34a22cad4 100644 --- a/pkg/kubelet/cm/BUILD +++ b/pkg/kubelet/cm/BUILD @@ -36,8 +36,8 @@ go_library( "//pkg/util/runtime:go_default_library", "//pkg/util/sets:go_default_library", "//pkg/util/sysctl:go_default_library", + "//pkg/util/version:go_default_library", "//pkg/util/wait:go_default_library", - "//vendor:github.com/blang/semver", "//vendor:github.com/golang/glog", "//vendor:github.com/opencontainers/runc/libcontainer/cgroups", "//vendor:github.com/opencontainers/runc/libcontainer/cgroups/fs", diff --git a/pkg/kubelet/cm/container_manager_linux.go b/pkg/kubelet/cm/container_manager_linux.go index b12e0e4772d..640dd244cf5 100644 --- a/pkg/kubelet/cm/container_manager_linux.go +++ b/pkg/kubelet/cm/container_manager_linux.go @@ -29,7 +29,6 @@ import ( "sync" "time" - "github.com/blang/semver" "github.com/golang/glog" "github.com/opencontainers/runc/libcontainer/cgroups" "github.com/opencontainers/runc/libcontainer/cgroups/fs" @@ -47,6 +46,7 @@ import ( "k8s.io/kubernetes/pkg/util/runtime" "k8s.io/kubernetes/pkg/util/sets" utilsysctl "k8s.io/kubernetes/pkg/util/sysctl" + utilversion "k8s.io/kubernetes/pkg/util/version" "k8s.io/kubernetes/pkg/util/wait" ) @@ -66,7 +66,7 @@ const ( var ( // 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. @@ -632,10 +632,10 @@ func getPidsForProcess(name, pidFile string) ([]int, error) { // Temporarily export the function to be used by dockershim. // TODO(yujuhong): Move this function to dockershim once kubelet migrates to // 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 } dockerProcs := []process{{dockerProcessName, dockerPidFile}} - if dockerVersion.GTE(containerdVersion) { + if dockerVersion.AtLeast(containerdVersion) { dockerProcs = append(dockerProcs, process{containerdProcessName, containerdPidFile}) } var errs []error @@ -797,17 +797,16 @@ func isKernelPid(pid int) bool { } // Helper for getting the docker version. -func getDockerVersion(cadvisor cadvisor.Interface) semver.Version { - var fallback semver.Version // Fallback to zero-value by default. +func getDockerVersion(cadvisor cadvisor.Interface) *utilversion.Version { versions, err := cadvisor.VersionInfo() if err != nil { 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 { glog.Errorf("Error parsing docker version %q: %v", versions.DockerVersion, err) - return fallback + return utilversion.MustParseSemantic("0.0.0") } return dockerVersion } diff --git a/pkg/kubelet/dockershim/cm/BUILD b/pkg/kubelet/dockershim/cm/BUILD index 38e2efdb2b8..35ca865359b 100644 --- a/pkg/kubelet/dockershim/cm/BUILD +++ b/pkg/kubelet/dockershim/cm/BUILD @@ -18,8 +18,8 @@ go_library( "//pkg/kubelet/cm:go_default_library", "//pkg/kubelet/dockertools:go_default_library", "//pkg/kubelet/qos:go_default_library", + "//pkg/util/version:go_default_library", "//pkg/util/wait:go_default_library", - "//vendor:github.com/blang/semver", "//vendor:github.com/golang/glog", "//vendor:github.com/opencontainers/runc/libcontainer/cgroups/fs", "//vendor:github.com/opencontainers/runc/libcontainer/configs", diff --git a/pkg/kubelet/dockershim/cm/container_manager_linux.go b/pkg/kubelet/dockershim/cm/container_manager_linux.go index a2d0f95d96e..8db88445cdf 100644 --- a/pkg/kubelet/dockershim/cm/container_manager_linux.go +++ b/pkg/kubelet/dockershim/cm/container_manager_linux.go @@ -25,13 +25,13 @@ import ( "strconv" "time" - "github.com/blang/semver" "github.com/golang/glog" "github.com/opencontainers/runc/libcontainer/cgroups/fs" "github.com/opencontainers/runc/libcontainer/configs" kubecm "k8s.io/kubernetes/pkg/kubelet/cm" "k8s.io/kubernetes/pkg/kubelet/dockertools" "k8s.io/kubernetes/pkg/kubelet/qos" + utilversion "k8s.io/kubernetes/pkg/util/version" "k8s.io/kubernetes/pkg/util/wait" ) @@ -85,7 +85,7 @@ func (m *containerManager) doWork() { glog.Errorf("Unable to get docker version: %v", err) return } - version, err := semver.Parse(v.Version) + version, err := utilversion.ParseSemantic(v.Version) if err != nil { glog.Errorf("Unable to parse docker version %q: %v", v.Version, err) return diff --git a/pkg/kubelet/dockertools/BUILD b/pkg/kubelet/dockertools/BUILD index f23aa602e03..5b7733427f7 100644 --- a/pkg/kubelet/dockertools/BUILD +++ b/pkg/kubelet/dockertools/BUILD @@ -62,7 +62,7 @@ go_library( "//pkg/util/sets:go_default_library", "//pkg/util/strings: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/reference", "//vendor:github.com/docker/docker/pkg/jsonmessage", diff --git a/pkg/kubelet/dockertools/docker_manager.go b/pkg/kubelet/dockertools/docker_manager.go index 804f9156e4e..ff8143c5242 100644 --- a/pkg/kubelet/dockertools/docker_manager.go +++ b/pkg/kubelet/dockertools/docker_manager.go @@ -34,7 +34,6 @@ import ( "sync" "time" - "github.com/coreos/go-semver/semver" dockertypes "github.com/docker/engine-api/types" dockercontainer "github.com/docker/engine-api/types/container" dockerstrslice "github.com/docker/engine-api/types/strslice" @@ -73,6 +72,7 @@ import ( "k8s.io/kubernetes/pkg/util/sets" utilstrings "k8s.io/kubernetes/pkg/util/strings" "k8s.io/kubernetes/pkg/util/term" + utilversion "k8s.io/kubernetes/pkg/util/version" ) const ( @@ -1033,37 +1033,9 @@ func getDockerNetworkMode(container *dockertypes.ContainerJSON) string { 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 -func newDockerVersion(version string) (dockerVersion, error) { - sem, err := semver.NewVersion(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 +func newDockerVersion(version string) (*utilversion.Version, error) { + return utilversion.ParseSemantic(version) } // apiVersion implements kubecontainer.Version interface by implementing diff --git a/pkg/kubelet/dockertools/docker_manager_test.go b/pkg/kubelet/dockertools/docker_manager_test.go index e9ce23115d4..967c48d3aab 100644 --- a/pkg/kubelet/dockertools/docker_manager_test.go +++ b/pkg/kubelet/dockertools/docker_manager_test.go @@ -2117,12 +2117,14 @@ func TestDockerVersionComparison(t *testing.T) { {version: "1.10.4-rc1", compare: -1}, {version: "1.11.1", 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) res, err := v.Compare(test.version) - assert.Equal(t, test.compare, res, testCase) assert.Equal(t, test.err, err != nil, testCase) + if !test.err { + assert.Equal(t, test.compare, res, testCase) + } } } diff --git a/pkg/kubelet/kuberuntime/BUILD b/pkg/kubelet/kuberuntime/BUILD index eb92fbf766d..9369b2e852f 100644 --- a/pkg/kubelet/kuberuntime/BUILD +++ b/pkg/kubelet/kuberuntime/BUILD @@ -53,7 +53,7 @@ go_library( "//pkg/util/runtime:go_default_library", "//pkg/util/selinux: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/fsnotify/fsnotify", "//vendor:github.com/golang/glog", diff --git a/pkg/kubelet/kuberuntime/kuberuntime_manager.go b/pkg/kubelet/kuberuntime/kuberuntime_manager.go index 74ca458848d..deead5b69ef 100644 --- a/pkg/kubelet/kuberuntime/kuberuntime_manager.go +++ b/pkg/kubelet/kuberuntime/kuberuntime_manager.go @@ -22,7 +22,6 @@ import ( "os" "time" - "github.com/coreos/go-semver/semver" "github.com/golang/glog" cadvisorapi "github.com/google/cadvisor/info/v1" @@ -43,6 +42,7 @@ import ( kubetypes "k8s.io/kubernetes/pkg/types" "k8s.io/kubernetes/pkg/util/flowcontrol" utilruntime "k8s.io/kubernetes/pkg/util/runtime" + utilversion "k8s.io/kubernetes/pkg/util/version" ) const ( @@ -202,33 +202,8 @@ func (m *kubeGenericRuntimeManager) Type() string { return m.runtimeName } -// runtimeVersion implements kubecontainer.Version interface by implementing -// Compare() and String() -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 newRuntimeVersion(version string) (*utilversion.Version, error) { + return utilversion.ParseSemantic(version) } func (m *kubeGenericRuntimeManager) getTypedVersion() (*runtimeapi.VersionResponse, error) { diff --git a/pkg/kubelet/rkt/BUILD b/pkg/kubelet/rkt/BUILD index e104faefdeb..3dc5c9f3ad4 100644 --- a/pkg/kubelet/rkt/BUILD +++ b/pkg/kubelet/rkt/BUILD @@ -47,10 +47,10 @@ go_library( "//pkg/util/strings:go_default_library", "//pkg/util/term:go_default_library", "//pkg/util/uuid:go_default_library", + "//pkg/util/version:go_default_library", "//pkg/util/wait:go_default_library", "//vendor:github.com/appc/spec/schema", "//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/unit", "//vendor:github.com/coreos/rkt/api/v1alpha", diff --git a/pkg/kubelet/rkt/version.go b/pkg/kubelet/rkt/version.go index 37468572732..3609bf97b17 100644 --- a/pkg/kubelet/rkt/version.go +++ b/pkg/kubelet/rkt/version.go @@ -20,45 +20,21 @@ import ( "fmt" "sync" - "github.com/coreos/go-semver/semver" rktapi "github.com/coreos/rkt/api/v1alpha" "golang.org/x/net/context" + + utilversion "k8s.io/kubernetes/pkg/util/version" ) type versions struct { sync.RWMutex - binVersion rktVersion - apiVersion rktVersion + binVersion *utilversion.Version + apiVersion *utilversion.Version systemdVersion systemdVersion } -// rktVersion implementes kubecontainer.Version interface by implementing -// Compare() and String() (which is implemented by the underlying semver.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 newRktVersion(version string) (*utilversion.Version, error) { + return utilversion.ParseSemantic(version) } func (r *Runtime) getVersions() error {