Drop version-parsing from pkg/version

pkg/version is now just version constants, etc, not version parsing
This commit is contained in:
Dan Winship 2016-10-22 12:49:18 -04:00
parent d95181fa1e
commit f369372dad
17 changed files with 45 additions and 159 deletions

View File

@ -52,8 +52,8 @@ go_library(
"//pkg/util/sets:go_default_library",
"//pkg/util/strategicpatch:go_default_library",
"//pkg/util/strings:go_default_library",
"//pkg/util/version:go_default_library",
"//pkg/util/wsstream:go_default_library",
"//pkg/version:go_default_library",
"//pkg/watch:go_default_library",
"//pkg/watch/versioned:go_default_library",
"//vendor:bitbucket.org/ww/goautoneg",

View File

@ -43,8 +43,8 @@ import (
"k8s.io/kubernetes/pkg/util/flushwriter"
utilruntime "k8s.io/kubernetes/pkg/util/runtime"
"k8s.io/kubernetes/pkg/util/sets"
utilversion "k8s.io/kubernetes/pkg/util/version"
"k8s.io/kubernetes/pkg/util/wsstream"
"k8s.io/kubernetes/pkg/version"
"github.com/emicklei/go-restful"
"github.com/golang/glog"
@ -358,11 +358,11 @@ func isOldKubectl(userAgent string) bool {
if len(subs) != 2 {
return false
}
kubectlVersion, versionErr := version.Parse(subs[1])
kubectlVersion, versionErr := utilversion.ParseSemantic(subs[1])
if versionErr != nil {
return false
}
return kubectlVersion.LT(version.MustParse("v1.5.0"))
return kubectlVersion.LessThan(utilversion.MustParseSemantic("v1.5.0"))
}
// TODO: Remove in 1.6. This is for backward compatibility with 1.4 kubectl.

View File

@ -42,8 +42,8 @@ go_library(
"//pkg/util/runtime:go_default_library",
"//pkg/util/sets:go_default_library",
"//pkg/util/system:go_default_library",
"//pkg/util/version:go_default_library",
"//pkg/util/wait:go_default_library",
"//pkg/version:go_default_library",
"//vendor:github.com/golang/glog",
"//vendor:github.com/prometheus/client_golang/prometheus",
],

View File

@ -33,7 +33,7 @@ import (
utilerrors "k8s.io/kubernetes/pkg/util/errors"
"k8s.io/kubernetes/pkg/util/node"
utilruntime "k8s.io/kubernetes/pkg/util/runtime"
"k8s.io/kubernetes/pkg/version"
utilversion "k8s.io/kubernetes/pkg/util/version"
"github.com/golang/glog"
)
@ -178,13 +178,13 @@ func (nc *NodeController) maybeDeleteTerminatingPod(obj interface{}) {
// guarantee backwards compatibility of master API to kubelets with
// versions less than 1.1.0
node := nodeObj.(*v1.Node)
v, err := version.Parse(node.Status.NodeInfo.KubeletVersion)
v, err := utilversion.ParseSemantic(node.Status.NodeInfo.KubeletVersion)
if err != nil {
glog.V(0).Infof("couldn't parse verions %q of minion: %v", node.Status.NodeInfo.KubeletVersion, err)
utilruntime.HandleError(nc.forcefullyDeletePod(pod))
return
}
if gracefulDeletionVersion.GT(v) {
if v.LessThan(gracefulDeletionVersion) {
utilruntime.HandleError(nc.forcefullyDeletePod(pod))
return
}
@ -239,12 +239,12 @@ func markAllPodsNotReady(kubeClient clientset.Interface, node *v1.Node) error {
// Older versions were inflexible and modifying pod.Status directly through
// the apiserver would result in unexpected outcomes.
func nodeRunningOutdatedKubelet(node *v1.Node) bool {
v, err := version.Parse(node.Status.NodeInfo.KubeletVersion)
v, err := utilversion.ParseSemantic(node.Status.NodeInfo.KubeletVersion)
if err != nil {
glog.Errorf("couldn't parse version %q of node %v", node.Status.NodeInfo.KubeletVersion, err)
return true
}
if podStatusReconciliationVersion.GT(v) {
if v.LessThan(podStatusReconciliationVersion) {
glog.Infof("Node %v running kubelet at (%v) which is less than the minimum version that allows nodecontroller to mark pods NotReady (%v).", node.Name, v, podStatusReconciliationVersion)
return true
}

View File

@ -41,8 +41,8 @@ import (
utilnode "k8s.io/kubernetes/pkg/util/node"
utilruntime "k8s.io/kubernetes/pkg/util/runtime"
"k8s.io/kubernetes/pkg/util/system"
utilversion "k8s.io/kubernetes/pkg/util/version"
"k8s.io/kubernetes/pkg/util/wait"
"k8s.io/kubernetes/pkg/version"
)
func init() {
@ -52,11 +52,11 @@ func init() {
var (
ErrCloudInstance = errors.New("cloud provider doesn't support instances.")
gracefulDeletionVersion = version.MustParse("v1.1.0")
gracefulDeletionVersion = utilversion.MustParseSemantic("v1.1.0")
// The minimum kubelet version for which the nodecontroller
// can safely flip pod.Status to NotReady.
podStatusReconciliationVersion = version.MustParse("v1.2.0")
podStatusReconciliationVersion = utilversion.MustParseSemantic("v1.2.0")
)
const (

View File

@ -37,7 +37,7 @@ go_library(
"//pkg/storage/storagebackend/factory:go_default_library",
"//pkg/util/runtime:go_default_library",
"//pkg/util/validation/field:go_default_library",
"//pkg/version:go_default_library",
"//pkg/util/version:go_default_library",
"//pkg/watch:go_default_library",
"//vendor:github.com/golang/glog",
"//vendor:golang.org/x/net/context",

View File

@ -39,7 +39,7 @@ import (
"k8s.io/kubernetes/pkg/storage"
utilruntime "k8s.io/kubernetes/pkg/util/runtime"
"k8s.io/kubernetes/pkg/util/validation/field"
"k8s.io/kubernetes/pkg/version"
utilversion "k8s.io/kubernetes/pkg/util/version"
"k8s.io/kubernetes/pkg/watch"
"github.com/golang/glog"
@ -235,11 +235,11 @@ func isOldKubectl(userAgent string) bool {
if len(subs) != 2 {
return false
}
kubectlVersion, versionErr := version.Parse(subs[1])
kubectlVersion, versionErr := utilversion.ParseSemantic(subs[1])
if versionErr != nil {
return false
}
return kubectlVersion.LT(version.MustParse("v1.4.0"))
return kubectlVersion.LessThan(utilversion.MustParseSemantic("v1.4.0"))
}
// Create inserts a new item according to the unique key from the object.

View File

@ -5,7 +5,6 @@ licenses(["notice"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
"go_test",
)
go_library(
@ -13,20 +12,7 @@ go_library(
srcs = [
"base.go",
"doc.go",
"semver.go",
"version.go",
],
tags = ["automanaged"],
deps = [
"//vendor:github.com/blang/semver",
"//vendor:github.com/golang/glog",
],
)
go_test(
name = "go_default_test",
srcs = ["semver_test.go"],
library = "go_default_library",
tags = ["automanaged"],
deps = [],
)

View File

@ -1,50 +0,0 @@
/*
Copyright 2015 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package version
import (
"strings"
"unicode"
"github.com/blang/semver"
"github.com/golang/glog"
)
func Parse(gitversion string) (semver.Version, error) {
// optionally trim leading spaces then one v
var seen bool
gitversion = strings.TrimLeftFunc(gitversion, func(ch rune) bool {
if seen {
return false
}
if ch == 'v' {
seen = true
return true
}
return unicode.IsSpace(ch)
})
return semver.Make(gitversion)
}
func MustParse(gitversion string) semver.Version {
v, err := Parse(gitversion)
if err != nil {
glog.Fatalf("failed to parse semver from gitversion %q: %v", gitversion, err)
}
return v
}

View File

@ -1,47 +0,0 @@
/*
Copyright 2015 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package version
import "testing"
func TestParseVersion(t *testing.T) {
cases := []struct {
version string
expectErr bool
}{
{version: "v1.0.1-alpha"},
{version: "v0.19.3"},
{version: "0.19.3"},
{version: "v1.2.0-alpha.3.1264+0655e65b435106-dirty"},
{version: "1.2.0-alpha.3.1264+0655e65b435106-dirty"},
{version: "1.2.0-alpha.3.1264+0655e65b435106-dirty"},
{version: "1.0.0"},
{version: "\t v1.0.0"},
{version: "vv1.0.0", expectErr: true},
{version: "blah1.0.0", expectErr: true},
}
for i, c := range cases {
_, err := Parse(c.version)
if err != nil && !c.expectErr {
t.Errorf("[%v]unexpected error: %v", i, err)
}
if err == nil && c.expectErr {
t.Errorf("[%v]expected error for %s", i, c.version)
}
}
}

View File

@ -175,10 +175,10 @@ go_library(
"//pkg/util/sets:go_default_library",
"//pkg/util/system:go_default_library",
"//pkg/util/uuid:go_default_library",
"//pkg/util/version:go_default_library",
"//pkg/util/wait:go_default_library",
"//pkg/util/workqueue:go_default_library",
"//pkg/util/yaml:go_default_library",
"//pkg/version:go_default_library",
"//pkg/volume/util/volumehelper:go_default_library",
"//pkg/watch:go_default_library",
"//plugin/pkg/admission/serviceaccount:go_default_library",

View File

@ -79,14 +79,13 @@ go_library(
"//pkg/util/system:go_default_library",
"//pkg/util/uuid:go_default_library",
"//pkg/util/validation:go_default_library",
"//pkg/util/version:go_default_library",
"//pkg/util/wait:go_default_library",
"//pkg/version:go_default_library",
"//pkg/watch:go_default_library",
"//plugin/pkg/scheduler/algorithm/predicates:go_default_library",
"//plugin/pkg/scheduler/schedulercache:go_default_library",
"//test/e2e/perftype:go_default_library",
"//test/utils:go_default_library",
"//vendor:github.com/blang/semver",
"//vendor:github.com/golang/glog",
"//vendor:github.com/google/cadvisor/info/v1",
"//vendor:github.com/onsi/ginkgo",

View File

@ -40,7 +40,6 @@ import (
"text/tabwriter"
"time"
"github.com/blang/semver"
"github.com/golang/glog"
"golang.org/x/crypto/ssh"
"golang.org/x/net/websocket"
@ -86,8 +85,8 @@ import (
"k8s.io/kubernetes/pkg/util/sets"
"k8s.io/kubernetes/pkg/util/system"
"k8s.io/kubernetes/pkg/util/uuid"
utilversion "k8s.io/kubernetes/pkg/util/version"
"k8s.io/kubernetes/pkg/util/wait"
"k8s.io/kubernetes/pkg/version"
"k8s.io/kubernetes/pkg/watch"
"k8s.io/kubernetes/plugin/pkg/scheduler/algorithm/predicates"
"k8s.io/kubernetes/plugin/pkg/scheduler/schedulercache"
@ -233,8 +232,8 @@ func GetPauseImageNameForHostArch() string {
//
// TODO(ihmccreery): remove once we don't care about v1.0 anymore, (tentatively
// in v1.3).
var SubResourcePodProxyVersion = version.MustParse("v1.1.0")
var subResourceServiceAndNodeProxyVersion = version.MustParse("v1.2.0")
var SubResourcePodProxyVersion = utilversion.MustParseSemantic("v1.1.0")
var subResourceServiceAndNodeProxyVersion = utilversion.MustParseSemantic("v1.2.0")
func GetServicesProxyRequest(c clientset.Interface, request *restclient.Request) (*restclient.Request, error) {
subResourceProxyAvailable, err := ServerVersionGTE(subResourceServiceAndNodeProxyVersion, c.Discovery())
@ -349,7 +348,7 @@ func NodeOSDistroIs(supportedNodeOsDistros ...string) bool {
return false
}
func SkipUnlessServerVersionGTE(v semver.Version, c discovery.ServerVersionInterface) {
func SkipUnlessServerVersionGTE(v *utilversion.Version, c discovery.ServerVersionInterface) {
gte, err := ServerVersionGTE(v, c)
if err != nil {
Failf("Failed to get server version: %v", err)
@ -500,7 +499,7 @@ func WaitForPodsSuccess(c clientset.Interface, ns string, successPodLabels map[s
return nil
}
var ReadyReplicaVersion = version.MustParse("v1.4.0")
var ReadyReplicaVersion = utilversion.MustParseSemantic("v1.4.0")
// WaitForPodsRunningReady waits up to timeout to ensure that all pods in
// namespace ns are either running and ready, or failed but controlled by a
@ -1623,19 +1622,19 @@ func (r podProxyResponseChecker) CheckAllResponses() (done bool, err error) {
// version.
//
// TODO(18726): This should be incorporated into client.VersionInterface.
func ServerVersionGTE(v semver.Version, c discovery.ServerVersionInterface) (bool, error) {
func ServerVersionGTE(v *utilversion.Version, c discovery.ServerVersionInterface) (bool, error) {
serverVersion, err := c.ServerVersion()
if err != nil {
return false, fmt.Errorf("Unable to get server version: %v", err)
}
sv, err := version.Parse(serverVersion.GitVersion)
sv, err := utilversion.ParseSemantic(serverVersion.GitVersion)
if err != nil {
return false, fmt.Errorf("Unable to parse server version %q: %v", serverVersion.GitVersion, err)
}
return sv.GTE(v), nil
return sv.AtLeast(v), nil
}
func SkipUnlessKubectlVersionGTE(v semver.Version) {
func SkipUnlessKubectlVersionGTE(v *utilversion.Version) {
gte, err := KubectlVersionGTE(v)
if err != nil {
Failf("Failed to get kubectl version: %v", err)
@ -1647,25 +1646,25 @@ func SkipUnlessKubectlVersionGTE(v semver.Version) {
// KubectlVersionGTE returns true if the kubectl version is greater than or
// equal to v.
func KubectlVersionGTE(v semver.Version) (bool, error) {
func KubectlVersionGTE(v *utilversion.Version) (bool, error) {
kv, err := KubectlVersion()
if err != nil {
return false, err
}
return kv.GTE(v), nil
return kv.AtLeast(v), nil
}
// KubectlVersion gets the version of kubectl that's currently being used (see
// --kubectl-path in e2e.go to use an alternate kubectl).
func KubectlVersion() (semver.Version, error) {
func KubectlVersion() (*utilversion.Version, error) {
output := RunKubectlOrDie("version", "--client")
matches := gitVersionRegexp.FindStringSubmatch(output)
if len(matches) != 2 {
return semver.Version{}, fmt.Errorf("Could not find kubectl version in output %v", output)
return nil, fmt.Errorf("Could not find kubectl version in output %v", output)
}
// Don't use the full match, as it contains "GitVersion:\"" and a
// trailing "\"". Just use the submatch.
return version.Parse(matches[1])
return utilversion.ParseSemantic(matches[1])
}
func PodsResponding(c clientset.Interface, ns, name string, wantName bool, pods *v1.PodList) error {

View File

@ -54,8 +54,8 @@ import (
uexec "k8s.io/kubernetes/pkg/util/exec"
utilnet "k8s.io/kubernetes/pkg/util/net"
"k8s.io/kubernetes/pkg/util/uuid"
utilversion "k8s.io/kubernetes/pkg/util/version"
"k8s.io/kubernetes/pkg/util/wait"
"k8s.io/kubernetes/pkg/version"
"k8s.io/kubernetes/test/e2e/framework"
"k8s.io/kubernetes/test/e2e/generated"
testutils "k8s.io/kubernetes/test/utils"
@ -101,39 +101,39 @@ var (
// that rely on extended pod logging options to work on clusters before that.
//
// TODO(ihmccreery): remove once we don't care about v1.0 anymore, (tentatively in v1.3).
extendedPodLogFilterVersion = version.MustParse("v1.1.0")
extendedPodLogFilterVersion = utilversion.MustParseSemantic("v1.1.0")
// NodePorts were made optional in #12831 (v1.1.0) so we don't expect tests that used to
// require NodePorts but no longer include them to work on clusters before that.
//
// TODO(ihmccreery): remove once we don't care about v1.0 anymore, (tentatively in v1.3).
nodePortsOptionalVersion = version.MustParse("v1.1.0")
nodePortsOptionalVersion = utilversion.MustParseSemantic("v1.1.0")
// Jobs were introduced in v1.1, so we don't expect tests that rely on jobs to work on
// clusters before that.
//
// TODO(ihmccreery): remove once we don't care about v1.0 anymore, (tentatively in v1.3).
jobsVersion = version.MustParse("v1.1.0")
jobsVersion = utilversion.MustParseSemantic("v1.1.0")
// Deployments were introduced by default in v1.2, so we don't expect tests that rely on
// deployments to work on clusters before that.
//
// TODO(ihmccreery): remove once we don't care about v1.1 anymore, (tentatively in v1.4).
deploymentsVersion = version.MustParse("v1.2.0-alpha.7.726")
deploymentsVersion = utilversion.MustParseSemantic("v1.2.0-alpha.7.726")
// Pod probe parameters were introduced in #15967 (v1.2) so we don't expect tests that use
// these probe parameters to work on clusters before that.
//
// TODO(ihmccreery): remove once we don't care about v1.1 anymore, (tentatively in v1.4).
podProbeParametersVersion = version.MustParse("v1.2.0-alpha.4")
podProbeParametersVersion = utilversion.MustParseSemantic("v1.2.0-alpha.4")
// 'kubectl create quota' was introduced in #28351 (v1.4) so we don't expect tests that use
// 'kubectl create quota' to work on kubectl clients before that.
kubectlCreateQuotaVersion = version.MustParse("v1.4.0-alpha.2")
kubectlCreateQuotaVersion = utilversion.MustParseSemantic("v1.4.0-alpha.2")
// Returning container command exit codes in kubectl run/exec was introduced in #26541 (v1.4)
// so we don't expect tests that verifies return code to work on kubectl clients before that.
kubectlContainerExitCodeVersion = version.MustParse("v1.4.0-alpha.3")
kubectlContainerExitCodeVersion = utilversion.MustParseSemantic("v1.4.0-alpha.3")
)
// Stops everything from filePath from namespace ns and checks if everything matching selectors from the given namespace is correctly stopped.

View File

@ -29,8 +29,8 @@ import (
"time"
"k8s.io/kubernetes/pkg/api/v1"
utilversion "k8s.io/kubernetes/pkg/util/version"
"k8s.io/kubernetes/pkg/util/wait"
"k8s.io/kubernetes/pkg/version"
"k8s.io/kubernetes/test/e2e/framework"
testutils "k8s.io/kubernetes/test/utils"
@ -44,7 +44,7 @@ const (
// TODO support other ports besides 80
var (
portForwardRegexp = regexp.MustCompile("Forwarding from 127.0.0.1:([0-9]+) -> 80")
portForwardPortToStdOutV = version.MustParse("v1.3.0-alpha.4")
portForwardPortToStdOutV = utilversion.MustParseSemantic("v1.3.0-alpha.4")
)
func pfPod(expectedClientData, chunks, chunkSize, chunkIntervalMillis string) *v1.Pod {

View File

@ -24,8 +24,8 @@ import (
"k8s.io/kubernetes/pkg/api/v1"
metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
"k8s.io/kubernetes/pkg/util/uuid"
utilversion "k8s.io/kubernetes/pkg/util/version"
"k8s.io/kubernetes/pkg/util/wait"
"k8s.io/kubernetes/pkg/version"
"k8s.io/kubernetes/plugin/pkg/admission/serviceaccount"
"k8s.io/kubernetes/test/e2e/framework"
@ -33,7 +33,7 @@ import (
. "github.com/onsi/gomega"
)
var serviceAccountTokenNamespaceVersion = version.MustParse("v1.2.0")
var serviceAccountTokenNamespaceVersion = utilversion.MustParseSemantic("v1.2.0")
var _ = framework.KubeDescribe("ServiceAccounts", func() {
f := framework.NewDefaultFramework("svcaccounts")

View File

@ -877,7 +877,6 @@ k8s.io/kubernetes/pkg/util/wait,Q-Lee,1
k8s.io/kubernetes/pkg/util/workqueue,mtaufen,1
k8s.io/kubernetes/pkg/util/wsstream,timothysc,1
k8s.io/kubernetes/pkg/util/yaml,rmmh,1
k8s.io/kubernetes/pkg/version,spxtr,1
k8s.io/kubernetes/pkg/volume,saad-ali,0
k8s.io/kubernetes/pkg/volume/aws_ebs,caesarxuchao,1
k8s.io/kubernetes/pkg/volume/azure_dd,bgrant0607,1

1 name owner auto-assigned
877 k8s.io/kubernetes/pkg/util/workqueue mtaufen 1
878 k8s.io/kubernetes/pkg/util/wsstream timothysc 1
879 k8s.io/kubernetes/pkg/util/yaml rmmh 1
k8s.io/kubernetes/pkg/version spxtr 1
880 k8s.io/kubernetes/pkg/volume saad-ali 0
881 k8s.io/kubernetes/pkg/volume/aws_ebs caesarxuchao 1
882 k8s.io/kubernetes/pkg/volume/azure_dd bgrant0607 1