From 6133cb1f217273df2e87d7e65d31d485a95e6042 Mon Sep 17 00:00:00 2001 From: Eric Tune Date: Mon, 1 Feb 2016 21:34:42 -0800 Subject: [PATCH] Move extensions.LabelSelector to unversioned. Move type LabelSelector and type LabelSelectorRequirement from pkg/apis/extensions This avoids an import loop when Job (and later DaemonSet, Deployment, ReplicaSet) are moved out of extensions to new api groups. Also Move LabelSelectorAsSelector utility from pkg/apis/extensions/ to pkg/api/unversioned/ Also its test. Also LabelSelectorOp* constants. Also the pkg/apis/extensions/validation functions ValidateLabelSelectorRequirement and ValidateLabelSelector move to pkg/api/unversioned The related type in pkg/apis/extensions/v1beta1/ is staying there. I might move it in another PR if neccessary. --- pkg/api/unversioned/helpers.go | 64 +++++++++ .../unversioned}/helpers_test.go | 4 +- pkg/api/unversioned/types.go | 51 +++++++ pkg/api/unversioned/validation/validation.go | 53 +++++++ pkg/apis/extensions/helpers.go | 44 ------ pkg/apis/extensions/types.go | 43 +----- pkg/apis/extensions/v1beta1/conversion.go | 17 +-- pkg/apis/extensions/validation/validation.go | 44 ++---- .../extensions/validation/validation_test.go | 129 +++++++++--------- pkg/client/cache/listers.go | 7 +- pkg/client/cache/listers_test.go | 23 ++-- pkg/controller/daemon/controller.go | 3 +- pkg/controller/daemon/controller_test.go | 2 +- pkg/controller/job/controller.go | 2 +- pkg/controller/job/controller_test.go | 10 +- pkg/controller/node/nodecontroller_test.go | 2 +- pkg/controller/replicaset/replica_set.go | 3 +- pkg/controller/replicaset/replica_set_test.go | 8 +- pkg/kubectl/cmd/drain_test.go | 4 +- pkg/kubectl/describe.go | 8 +- pkg/kubectl/resource_printer.go | 4 +- pkg/kubectl/run.go | 3 +- pkg/kubectl/run_test.go | 3 +- pkg/kubectl/stop.go | 2 +- pkg/kubectl/stop_test.go | 8 +- pkg/registry/daemonset/etcd/etcd_test.go | 7 +- pkg/registry/job/etcd/etcd_test.go | 7 +- pkg/registry/job/strategy_test.go | 5 +- test/e2e/daemon_set.go | 2 +- 29 files changed, 316 insertions(+), 246 deletions(-) create mode 100644 pkg/api/unversioned/helpers.go rename pkg/{apis/extensions => api/unversioned}/helpers_test.go (96%) create mode 100644 pkg/api/unversioned/validation/validation.go diff --git a/pkg/api/unversioned/helpers.go b/pkg/api/unversioned/helpers.go new file mode 100644 index 00000000000..3a3d7ee893c --- /dev/null +++ b/pkg/api/unversioned/helpers.go @@ -0,0 +1,64 @@ +/* +Copyright 2016 The Kubernetes Authors All rights reserved. + +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 unversioned + +import ( + "fmt" + + "k8s.io/kubernetes/pkg/labels" + "k8s.io/kubernetes/pkg/util/sets" +) + +// LabelSelectorAsSelector converts the LabelSelector api type into a struct that implements +// labels.Selector +func LabelSelectorAsSelector(ps *LabelSelector) (labels.Selector, error) { + if ps == nil { + return labels.Nothing(), nil + } + if len(ps.MatchLabels)+len(ps.MatchExpressions) == 0 { + return labels.Everything(), nil + } + selector := labels.NewSelector() + for k, v := range ps.MatchLabels { + r, err := labels.NewRequirement(k, labels.InOperator, sets.NewString(v)) + if err != nil { + return nil, err + } + selector = selector.Add(*r) + } + for _, expr := range ps.MatchExpressions { + var op labels.Operator + switch expr.Operator { + case LabelSelectorOpIn: + op = labels.InOperator + case LabelSelectorOpNotIn: + op = labels.NotInOperator + case LabelSelectorOpExists: + op = labels.ExistsOperator + case LabelSelectorOpDoesNotExist: + op = labels.DoesNotExistOperator + default: + return nil, fmt.Errorf("%q is not a valid pod selector operator", expr.Operator) + } + r, err := labels.NewRequirement(expr.Key, op, sets.NewString(expr.Values...)) + if err != nil { + return nil, err + } + selector = selector.Add(*r) + } + return selector, nil +} diff --git a/pkg/apis/extensions/helpers_test.go b/pkg/api/unversioned/helpers_test.go similarity index 96% rename from pkg/apis/extensions/helpers_test.go rename to pkg/api/unversioned/helpers_test.go index 2fbd6199433..334c78597c6 100644 --- a/pkg/apis/extensions/helpers_test.go +++ b/pkg/api/unversioned/helpers_test.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package extensions +package unversioned import ( "reflect" diff --git a/pkg/api/unversioned/types.go b/pkg/api/unversioned/types.go index bc910a61c2c..71544493154 100644 --- a/pkg/api/unversioned/types.go +++ b/pkg/api/unversioned/types.go @@ -15,6 +15,14 @@ limitations under the License. */ // Package unversioned contains API types that are common to all versions. +// +// The package contains two categories of types: +// - external (serialized) types that lack their own version (e.g TypeMeta) +// - internal (never-serialized) types that are needed by several different +// api groups, and so live here, to avoid duplication and/or import loops +// (e.g. LabelSelector). +// In the future, we will probably move these categories of objects into +// separate packages. package unversioned import "strings" @@ -382,3 +390,46 @@ func (apiVersions APIVersions) GoString() string { // Patch is provided to give a concrete name and type to the Kubernetes PATCH request body. type Patch struct{} + +// Note: +// There are two different styles of label selectors used in versioned types: +// an older style which is represented as just a string in versioned types, and a +// newer style that is structured. LabelSelector is an internal representation for the +// latter style. + +// A label selector is a label query over a set of resources. The result of matchLabels and +// matchExpressions are ANDed. An empty label selector matches all objects. A null +// label selector matches no objects. +type LabelSelector struct { + // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + // map is equivalent to an element of matchExpressions, whose key field is "key", the + // operator is "In", and the values array contains only "value". The requirements are ANDed. + MatchLabels map[string]string `json:"matchLabels,omitempty"` + // matchExpressions is a list of label selector requirements. The requirements are ANDed. + MatchExpressions []LabelSelectorRequirement `json:"matchExpressions,omitempty"` +} + +// A label selector requirement is a selector that contains values, a key, and an operator that +// relates the key and values. +type LabelSelectorRequirement struct { + // key is the label key that the selector applies to. + Key string `json:"key" patchStrategy:"merge" patchMergeKey:"key"` + // operator represents a key's relationship to a set of values. + // Valid operators ard In, NotIn, Exists and DoesNotExist. + Operator LabelSelectorOperator `json:"operator"` + // values is an array of string values. If the operator is In or NotIn, + // the values array must be non-empty. If the operator is Exists or DoesNotExist, + // the values array must be empty. This array is replaced during a strategic + // merge patch. + Values []string `json:"values,omitempty"` +} + +// A label selector operator is the set of operators that can be used in a selector requirement. +type LabelSelectorOperator string + +const ( + LabelSelectorOpIn LabelSelectorOperator = "In" + LabelSelectorOpNotIn LabelSelectorOperator = "NotIn" + LabelSelectorOpExists LabelSelectorOperator = "Exists" + LabelSelectorOpDoesNotExist LabelSelectorOperator = "DoesNotExist" +) diff --git a/pkg/api/unversioned/validation/validation.go b/pkg/api/unversioned/validation/validation.go new file mode 100644 index 00000000000..f42f37b0482 --- /dev/null +++ b/pkg/api/unversioned/validation/validation.go @@ -0,0 +1,53 @@ +/* +Copyright 2015 The Kubernetes Authors All rights reserved. + +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 validation + +import ( + "k8s.io/kubernetes/pkg/api/unversioned" + apivalidation "k8s.io/kubernetes/pkg/api/validation" + "k8s.io/kubernetes/pkg/util/validation/field" +) + +func ValidateLabelSelector(ps *unversioned.LabelSelector, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if ps == nil { + return allErrs + } + allErrs = append(allErrs, apivalidation.ValidateLabels(ps.MatchLabels, fldPath.Child("matchLabels"))...) + for i, expr := range ps.MatchExpressions { + allErrs = append(allErrs, ValidateLabelSelectorRequirement(expr, fldPath.Child("matchExpressions").Index(i))...) + } + return allErrs +} + +func ValidateLabelSelectorRequirement(sr unversioned.LabelSelectorRequirement, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + switch sr.Operator { + case unversioned.LabelSelectorOpIn, unversioned.LabelSelectorOpNotIn: + if len(sr.Values) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("values"), "must be specified when `operator` is 'In' or 'NotIn'")) + } + case unversioned.LabelSelectorOpExists, unversioned.LabelSelectorOpDoesNotExist: + if len(sr.Values) > 0 { + allErrs = append(allErrs, field.Forbidden(fldPath.Child("values"), "may not be specified when `operator` is 'Exists' or 'DoesNotExist'")) + } + default: + allErrs = append(allErrs, field.Invalid(fldPath.Child("operator"), sr.Operator, "not a valid selector operator")) + } + allErrs = append(allErrs, apivalidation.ValidateLabelName(sr.Key, fldPath.Child("key"))...) + return allErrs +} diff --git a/pkg/apis/extensions/helpers.go b/pkg/apis/extensions/helpers.go index b09d58f83ce..434befd7403 100644 --- a/pkg/apis/extensions/helpers.go +++ b/pkg/apis/extensions/helpers.go @@ -17,53 +17,9 @@ limitations under the License. package extensions import ( - "fmt" - "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/labels" - "k8s.io/kubernetes/pkg/util/sets" ) -// LabelSelectorAsSelector converts the LabelSelector api type into a struct that implements -// labels.Selector -func LabelSelectorAsSelector(ps *LabelSelector) (labels.Selector, error) { - if ps == nil { - return labels.Nothing(), nil - } - if len(ps.MatchLabels)+len(ps.MatchExpressions) == 0 { - return labels.Everything(), nil - } - selector := labels.NewSelector() - for k, v := range ps.MatchLabels { - r, err := labels.NewRequirement(k, labels.InOperator, sets.NewString(v)) - if err != nil { - return nil, err - } - selector = selector.Add(*r) - } - for _, expr := range ps.MatchExpressions { - var op labels.Operator - switch expr.Operator { - case LabelSelectorOpIn: - op = labels.InOperator - case LabelSelectorOpNotIn: - op = labels.NotInOperator - case LabelSelectorOpExists: - op = labels.ExistsOperator - case LabelSelectorOpDoesNotExist: - op = labels.DoesNotExistOperator - default: - return nil, fmt.Errorf("%q is not a valid pod selector operator", expr.Operator) - } - r, err := labels.NewRequirement(expr.Key, op, sets.NewString(expr.Values...)) - if err != nil { - return nil, err - } - selector = selector.Add(*r) - } - return selector, nil -} - // ScaleFromDeployment returns a scale subresource for a deployment. func ScaleFromDeployment(deployment *Deployment) *Scale { return &Scale{ diff --git a/pkg/apis/extensions/types.go b/pkg/apis/extensions/types.go index 91e4d1b73be..59c3485a0ab 100644 --- a/pkg/apis/extensions/types.go +++ b/pkg/apis/extensions/types.go @@ -413,7 +413,7 @@ type DaemonSetSpec struct { // Must match in order to be controlled. // If empty, defaulted to labels on Pod template. // More info: http://releases.k8s.io/HEAD/docs/user-guide/labels.md#label-selectors - Selector *LabelSelector `json:"selector,omitempty"` + Selector *unversioned.LabelSelector `json:"selector,omitempty"` // Template is the object that describes the pod that will be created. // The DaemonSet will create exactly one copy of this pod on every node @@ -545,7 +545,7 @@ type JobSpec struct { ActiveDeadlineSeconds *int64 `json:"activeDeadlineSeconds,omitempty"` // Selector is a label query over pods that should match the pod count. - Selector *LabelSelector `json:"selector,omitempty"` + Selector *unversioned.LabelSelector `json:"selector,omitempty"` // Template is the object that describes the pod that will be created when // executing a job. @@ -793,43 +793,6 @@ type ClusterAutoscalerList struct { Items []ClusterAutoscaler `json:"items"` } -// A label selector is a label query over a set of resources. The result of matchLabels and -// matchExpressions are ANDed. An empty label selector matches all objects. A null -// label selector matches no objects. -type LabelSelector struct { - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels - // map is equivalent to an element of matchExpressions, whose key field is "key", the - // operator is "In", and the values array contains only "value". The requirements are ANDed. - MatchLabels map[string]string `json:"matchLabels,omitempty"` - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - MatchExpressions []LabelSelectorRequirement `json:"matchExpressions,omitempty"` -} - -// A label selector requirement is a selector that contains values, a key, and an operator that -// relates the key and values. -type LabelSelectorRequirement struct { - // key is the label key that the selector applies to. - Key string `json:"key" patchStrategy:"merge" patchMergeKey:"key"` - // operator represents a key's relationship to a set of values. - // Valid operators ard In, NotIn, Exists and DoesNotExist. - Operator LabelSelectorOperator `json:"operator"` - // values is an array of string values. If the operator is In or NotIn, - // the values array must be non-empty. If the operator is Exists or DoesNotExist, - // the values array must be empty. This array is replaced during a strategic - // merge patch. - Values []string `json:"values,omitempty"` -} - -// A label selector operator is the set of operators that can be used in a selector requirement. -type LabelSelectorOperator string - -const ( - LabelSelectorOpIn LabelSelectorOperator = "In" - LabelSelectorOpNotIn LabelSelectorOperator = "NotIn" - LabelSelectorOpExists LabelSelectorOperator = "Exists" - LabelSelectorOpDoesNotExist LabelSelectorOperator = "DoesNotExist" -) - // +genclient=true // ReplicaSet represents the configuration of a replica set. @@ -864,7 +827,7 @@ type ReplicaSetSpec struct { // Must match in order to be controlled. // If empty, defaulted to labels on pod template. // More info: http://releases.k8s.io/HEAD/docs/user-guide/labels.md#label-selectors - Selector *LabelSelector `json:"selector,omitempty"` + Selector *unversioned.LabelSelector `json:"selector,omitempty"` // Template is the object that describes the pod that will be created if // insufficient replicas are detected. diff --git a/pkg/apis/extensions/v1beta1/conversion.go b/pkg/apis/extensions/v1beta1/conversion.go index 3ed3f446ba6..2abd61f7c72 100644 --- a/pkg/apis/extensions/v1beta1/conversion.go +++ b/pkg/apis/extensions/v1beta1/conversion.go @@ -21,6 +21,7 @@ import ( "reflect" "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/unversioned" v1 "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/conversion" @@ -454,10 +455,10 @@ func Convert_extensions_DaemonSetSpec_To_v1beta1_DaemonSetSpec(in *extensions.Da if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found { defaulting.(func(*extensions.DaemonSetSpec))(in) } - // unable to generate simple pointer conversion for extensions.LabelSelector -> v1beta1.LabelSelector + // unable to generate simple pointer conversion for unversioned.LabelSelector -> v1beta1.LabelSelector if in.Selector != nil { out.Selector = new(LabelSelector) - if err := Convert_extensions_LabelSelector_To_v1beta1_LabelSelector(in.Selector, out.Selector, s); err != nil { + if err := Convert_unversioned_LabelSelector_To_v1beta1_LabelSelector(in.Selector, out.Selector, s); err != nil { return err } } else { @@ -478,10 +479,10 @@ func Convert_v1beta1_DaemonSetSpec_To_extensions_DaemonSetSpec(in *DaemonSetSpec if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found { defaulting.(func(*DaemonSetSpec))(in) } - // unable to generate simple pointer conversion for v1beta1.LabelSelector -> extensions.LabelSelector + // unable to generate simple pointer conversion for v1beta1.LabelSelector -> unversioned.LabelSelector if in.Selector != nil { - out.Selector = new(extensions.LabelSelector) - if err := Convert_v1beta1_LabelSelector_To_extensions_LabelSelector(in.Selector, out.Selector, s); err != nil { + out.Selector = new(unversioned.LabelSelector) + if err := Convert_v1beta1_LabelSelector_To_unversioned_LabelSelector(in.Selector, out.Selector, s); err != nil { return err } } else { @@ -564,7 +565,7 @@ func Convert_extensions_ReplicaSetSpec_To_v1beta1_ReplicaSetSpec(in *extensions. *out.Replicas = int32(in.Replicas) if in.Selector != nil { out.Selector = new(LabelSelector) - if err := Convert_extensions_LabelSelector_To_v1beta1_LabelSelector(in.Selector, out.Selector, s); err != nil { + if err := Convert_unversioned_LabelSelector_To_v1beta1_LabelSelector(in.Selector, out.Selector, s); err != nil { return err } } else { @@ -589,8 +590,8 @@ func Convert_v1beta1_ReplicaSetSpec_To_extensions_ReplicaSetSpec(in *ReplicaSetS out.Replicas = int(*in.Replicas) } if in.Selector != nil { - out.Selector = new(extensions.LabelSelector) - if err := Convert_v1beta1_LabelSelector_To_extensions_LabelSelector(in.Selector, out.Selector, s); err != nil { + out.Selector = new(unversioned.LabelSelector) + if err := Convert_v1beta1_LabelSelector_To_unversioned_LabelSelector(in.Selector, out.Selector, s); err != nil { return err } } else { diff --git a/pkg/apis/extensions/validation/validation.go b/pkg/apis/extensions/validation/validation.go index b49466f5856..ab541fdfba1 100644 --- a/pkg/apis/extensions/validation/validation.go +++ b/pkg/apis/extensions/validation/validation.go @@ -23,6 +23,8 @@ import ( "strings" "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/unversioned" + unversionedvalidation "k8s.io/kubernetes/pkg/api/unversioned/validation" apivalidation "k8s.io/kubernetes/pkg/api/validation" "k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/labels" @@ -210,9 +212,9 @@ func ValidateDaemonSetUpdateStrategy(strategy *extensions.DaemonSetUpdateStrateg func ValidateDaemonSetSpec(spec *extensions.DaemonSetSpec, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} - allErrs = append(allErrs, ValidateLabelSelector(spec.Selector, fldPath.Child("selector"))...) + allErrs = append(allErrs, unversionedvalidation.ValidateLabelSelector(spec.Selector, fldPath.Child("selector"))...) - selector, err := extensions.LabelSelectorAsSelector(spec.Selector) + selector, err := unversioned.LabelSelectorAsSelector(spec.Selector) if err == nil && !selector.Matches(labels.Set(spec.Template.Labels)) { allErrs = append(allErrs, field.Invalid(fldPath.Child("template", "metadata", "labels"), spec.Template.Labels, "`selector` does not match template `labels`")) } @@ -391,10 +393,10 @@ func ValidateJobSpec(spec *extensions.JobSpec, fldPath *field.Path) field.ErrorL if spec.Selector == nil { allErrs = append(allErrs, field.Required(fldPath.Child("selector"), "")) } else { - allErrs = append(allErrs, ValidateLabelSelector(spec.Selector, fldPath.Child("selector"))...) + allErrs = append(allErrs, unversionedvalidation.ValidateLabelSelector(spec.Selector, fldPath.Child("selector"))...) } - if selector, err := extensions.LabelSelectorAsSelector(spec.Selector); err == nil { + if selector, err := unversioned.LabelSelectorAsSelector(spec.Selector); err == nil { labels := labels.Set(spec.Template.Labels) if !selector.Matches(labels) { allErrs = append(allErrs, field.Invalid(fldPath.Child("template", "metadata", "labels"), spec.Template.Labels, "`selector` does not match template `labels`")) @@ -604,36 +606,6 @@ func ValidateClusterAutoscaler(autoscaler *extensions.ClusterAutoscaler) field.E return allErrs } -func ValidateLabelSelector(ps *extensions.LabelSelector, fldPath *field.Path) field.ErrorList { - allErrs := field.ErrorList{} - if ps == nil { - return allErrs - } - allErrs = append(allErrs, apivalidation.ValidateLabels(ps.MatchLabels, fldPath.Child("matchLabels"))...) - for i, expr := range ps.MatchExpressions { - allErrs = append(allErrs, ValidateLabelSelectorRequirement(expr, fldPath.Child("matchExpressions").Index(i))...) - } - return allErrs -} - -func ValidateLabelSelectorRequirement(sr extensions.LabelSelectorRequirement, fldPath *field.Path) field.ErrorList { - allErrs := field.ErrorList{} - switch sr.Operator { - case extensions.LabelSelectorOpIn, extensions.LabelSelectorOpNotIn: - if len(sr.Values) == 0 { - allErrs = append(allErrs, field.Required(fldPath.Child("values"), "must be specified when `operator` is 'In' or 'NotIn'")) - } - case extensions.LabelSelectorOpExists, extensions.LabelSelectorOpDoesNotExist: - if len(sr.Values) > 0 { - allErrs = append(allErrs, field.Forbidden(fldPath.Child("values"), "may not be specified when `operator` is 'Exists' or 'DoesNotExist'")) - } - default: - allErrs = append(allErrs, field.Invalid(fldPath.Child("operator"), sr.Operator, "not a valid selector operator")) - } - allErrs = append(allErrs, apivalidation.ValidateLabelName(sr.Key, fldPath.Child("key"))...) - return allErrs -} - func ValidateScale(scale *extensions.Scale) field.ErrorList { allErrs := field.ErrorList{} allErrs = append(allErrs, apivalidation.ValidateObjectMeta(&scale.ObjectMeta, true, apivalidation.NameIsDNSSubdomain, field.NewPath("metadata"))...) @@ -686,13 +658,13 @@ func ValidateReplicaSetSpec(spec *extensions.ReplicaSetSpec, fldPath *field.Path if spec.Selector == nil { allErrs = append(allErrs, field.Required(fldPath.Child("selector"), "")) } else { - allErrs = append(allErrs, ValidateLabelSelector(spec.Selector, fldPath.Child("selector"))...) + allErrs = append(allErrs, unversionedvalidation.ValidateLabelSelector(spec.Selector, fldPath.Child("selector"))...) if len(spec.Selector.MatchLabels)+len(spec.Selector.MatchExpressions) == 0 { allErrs = append(allErrs, field.Invalid(fldPath.Child("selector"), spec.Selector, "empty selector is not valid for deployment.")) } } - selector, err := extensions.LabelSelectorAsSelector(spec.Selector) + selector, err := unversioned.LabelSelectorAsSelector(spec.Selector) if err != nil { allErrs = append(allErrs, field.Invalid(fldPath.Child("selector"), spec.Selector, "failed to convert LabelSelector to Selector.")) } else { diff --git a/pkg/apis/extensions/validation/validation_test.go b/pkg/apis/extensions/validation/validation_test.go index fec366b05b8..d98596bf622 100644 --- a/pkg/apis/extensions/validation/validation_test.go +++ b/pkg/apis/extensions/validation/validation_test.go @@ -22,6 +22,7 @@ import ( "testing" "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/util/intstr" ) @@ -375,7 +376,7 @@ func TestValidateDaemonSetUpdate(t *testing.T) { old: extensions.DaemonSet{ ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validSelector}, + Selector: &unversioned.LabelSelector{MatchLabels: validSelector}, Template: validPodTemplateAbc.Template, UpdateStrategy: validUpdateStrategy, }, @@ -383,7 +384,7 @@ func TestValidateDaemonSetUpdate(t *testing.T) { update: extensions.DaemonSet{ ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validSelector}, + Selector: &unversioned.LabelSelector{MatchLabels: validSelector}, Template: validPodTemplateAbc.Template, UpdateStrategy: validUpdateStrategy, }, @@ -393,7 +394,7 @@ func TestValidateDaemonSetUpdate(t *testing.T) { old: extensions.DaemonSet{ ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validSelector}, + Selector: &unversioned.LabelSelector{MatchLabels: validSelector}, Template: validPodTemplateAbc.Template, UpdateStrategy: validUpdateStrategy, }, @@ -401,7 +402,7 @@ func TestValidateDaemonSetUpdate(t *testing.T) { update: extensions.DaemonSet{ ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validSelector2}, + Selector: &unversioned.LabelSelector{MatchLabels: validSelector2}, Template: validPodTemplateAbc2.Template, UpdateStrategy: validUpdateStrategy, }, @@ -411,7 +412,7 @@ func TestValidateDaemonSetUpdate(t *testing.T) { old: extensions.DaemonSet{ ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validSelector}, + Selector: &unversioned.LabelSelector{MatchLabels: validSelector}, Template: validPodTemplateAbc.Template, UpdateStrategy: validUpdateStrategy, }, @@ -419,7 +420,7 @@ func TestValidateDaemonSetUpdate(t *testing.T) { update: extensions.DaemonSet{ ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validSelector}, + Selector: &unversioned.LabelSelector{MatchLabels: validSelector}, Template: validPodTemplateNodeSelector.Template, UpdateStrategy: validUpdateStrategy, }, @@ -438,7 +439,7 @@ func TestValidateDaemonSetUpdate(t *testing.T) { old: extensions.DaemonSet{ ObjectMeta: api.ObjectMeta{Name: "", Namespace: api.NamespaceDefault}, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validSelector}, + Selector: &unversioned.LabelSelector{MatchLabels: validSelector}, Template: validPodTemplateAbc.Template, UpdateStrategy: validUpdateStrategy, }, @@ -446,7 +447,7 @@ func TestValidateDaemonSetUpdate(t *testing.T) { update: extensions.DaemonSet{ ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validSelector}, + Selector: &unversioned.LabelSelector{MatchLabels: validSelector}, Template: validPodTemplateAbc.Template, UpdateStrategy: validUpdateStrategy, }, @@ -456,7 +457,7 @@ func TestValidateDaemonSetUpdate(t *testing.T) { old: extensions.DaemonSet{ ObjectMeta: api.ObjectMeta{Name: "", Namespace: api.NamespaceDefault}, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validSelector}, + Selector: &unversioned.LabelSelector{MatchLabels: validSelector}, Template: validPodTemplateAbc.Template, UpdateStrategy: validUpdateStrategy, }, @@ -464,7 +465,7 @@ func TestValidateDaemonSetUpdate(t *testing.T) { update: extensions.DaemonSet{ ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: invalidSelector}, + Selector: &unversioned.LabelSelector{MatchLabels: invalidSelector}, Template: validPodTemplateAbc.Template, UpdateStrategy: validUpdateStrategy, }, @@ -474,7 +475,7 @@ func TestValidateDaemonSetUpdate(t *testing.T) { old: extensions.DaemonSet{ ObjectMeta: api.ObjectMeta{Name: "", Namespace: api.NamespaceDefault}, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validSelector}, + Selector: &unversioned.LabelSelector{MatchLabels: validSelector}, Template: validPodTemplateAbc.Template, UpdateStrategy: validUpdateStrategy, }, @@ -482,7 +483,7 @@ func TestValidateDaemonSetUpdate(t *testing.T) { update: extensions.DaemonSet{ ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validSelector}, + Selector: &unversioned.LabelSelector{MatchLabels: validSelector}, Template: invalidPodTemplate.Template, UpdateStrategy: validUpdateStrategy, }, @@ -492,7 +493,7 @@ func TestValidateDaemonSetUpdate(t *testing.T) { old: extensions.DaemonSet{ ObjectMeta: api.ObjectMeta{Name: "", Namespace: api.NamespaceDefault}, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validSelector}, + Selector: &unversioned.LabelSelector{MatchLabels: validSelector}, Template: validPodTemplateAbc.Template, UpdateStrategy: validUpdateStrategy, }, @@ -500,7 +501,7 @@ func TestValidateDaemonSetUpdate(t *testing.T) { update: extensions.DaemonSet{ ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validSelector}, + Selector: &unversioned.LabelSelector{MatchLabels: validSelector}, Template: validPodTemplateDef.Template, UpdateStrategy: validUpdateStrategy, }, @@ -510,7 +511,7 @@ func TestValidateDaemonSetUpdate(t *testing.T) { old: extensions.DaemonSet{ ObjectMeta: api.ObjectMeta{Name: "", Namespace: api.NamespaceDefault}, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validSelector}, + Selector: &unversioned.LabelSelector{MatchLabels: validSelector}, Template: validPodTemplateAbc.Template, UpdateStrategy: validUpdateStrategy, }, @@ -518,7 +519,7 @@ func TestValidateDaemonSetUpdate(t *testing.T) { update: extensions.DaemonSet{ ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validSelector}, + Selector: &unversioned.LabelSelector{MatchLabels: validSelector}, Template: readWriteVolumePodTemplate.Template, UpdateStrategy: validUpdateStrategy, }, @@ -528,7 +529,7 @@ func TestValidateDaemonSetUpdate(t *testing.T) { old: extensions.DaemonSet{ ObjectMeta: api.ObjectMeta{Name: "", Namespace: api.NamespaceDefault}, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validSelector}, + Selector: &unversioned.LabelSelector{MatchLabels: validSelector}, Template: validPodTemplateAbc.Template, UpdateStrategy: validUpdateStrategy, }, @@ -536,7 +537,7 @@ func TestValidateDaemonSetUpdate(t *testing.T) { update: extensions.DaemonSet{ ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: invalidSelector}, + Selector: &unversioned.LabelSelector{MatchLabels: invalidSelector}, Template: validPodTemplateAbc.Template, UpdateStrategy: extensions.DaemonSetUpdateStrategy{ Type: extensions.RollingUpdateDaemonSetStrategyType, @@ -589,7 +590,7 @@ func TestValidateDaemonSet(t *testing.T) { { ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validSelector}, + Selector: &unversioned.LabelSelector{MatchLabels: validSelector}, Template: validPodTemplate.Template, UpdateStrategy: validUpdateStrategy, }, @@ -597,7 +598,7 @@ func TestValidateDaemonSet(t *testing.T) { { ObjectMeta: api.ObjectMeta{Name: "abc-123", Namespace: api.NamespaceDefault}, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validSelector}, + Selector: &unversioned.LabelSelector{MatchLabels: validSelector}, Template: validPodTemplate.Template, UpdateStrategy: validUpdateStrategy, }, @@ -613,14 +614,14 @@ func TestValidateDaemonSet(t *testing.T) { "zero-length ID": { ObjectMeta: api.ObjectMeta{Name: "", Namespace: api.NamespaceDefault}, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validSelector}, + Selector: &unversioned.LabelSelector{MatchLabels: validSelector}, Template: validPodTemplate.Template, }, }, "missing-namespace": { ObjectMeta: api.ObjectMeta{Name: "abc-123"}, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validSelector}, + Selector: &unversioned.LabelSelector{MatchLabels: validSelector}, Template: validPodTemplate.Template, }, }, @@ -633,14 +634,14 @@ func TestValidateDaemonSet(t *testing.T) { "selector_doesnt_match": { ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}}, + Selector: &unversioned.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}}, Template: validPodTemplate.Template, }, }, "invalid template": { ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validSelector}, + Selector: &unversioned.LabelSelector{MatchLabels: validSelector}, }, }, "invalid_label": { @@ -652,7 +653,7 @@ func TestValidateDaemonSet(t *testing.T) { }, }, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validSelector}, + Selector: &unversioned.LabelSelector{MatchLabels: validSelector}, Template: validPodTemplate.Template, }, }, @@ -677,7 +678,7 @@ func TestValidateDaemonSet(t *testing.T) { }, }, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validSelector}, + Selector: &unversioned.LabelSelector{MatchLabels: validSelector}, Template: validPodTemplate.Template, }, }, @@ -687,7 +688,7 @@ func TestValidateDaemonSet(t *testing.T) { Namespace: api.NamespaceDefault, }, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validSelector}, + Selector: &unversioned.LabelSelector{MatchLabels: validSelector}, Template: api.PodTemplateSpec{ Spec: api.PodSpec{ RestartPolicy: api.RestartPolicyOnFailure, @@ -706,7 +707,7 @@ func TestValidateDaemonSet(t *testing.T) { Namespace: api.NamespaceDefault, }, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validSelector}, + Selector: &unversioned.LabelSelector{MatchLabels: validSelector}, Template: api.PodTemplateSpec{ Spec: api.PodSpec{ RestartPolicy: api.RestartPolicyNever, @@ -725,7 +726,7 @@ func TestValidateDaemonSet(t *testing.T) { Namespace: api.NamespaceDefault, }, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validSelector}, + Selector: &unversioned.LabelSelector{MatchLabels: validSelector}, Template: validPodTemplate.Template, UpdateStrategy: extensions.DaemonSetUpdateStrategy{ Type: "", @@ -741,7 +742,7 @@ func TestValidateDaemonSet(t *testing.T) { Namespace: api.NamespaceDefault, }, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validSelector}, + Selector: &unversioned.LabelSelector{MatchLabels: validSelector}, Template: validPodTemplate.Template, UpdateStrategy: extensions.DaemonSetUpdateStrategy{ Type: extensions.RollingUpdateDaemonSetStrategyType, @@ -755,7 +756,7 @@ func TestValidateDaemonSet(t *testing.T) { Namespace: api.NamespaceDefault, }, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validSelector}, + Selector: &unversioned.LabelSelector{MatchLabels: validSelector}, Template: validPodTemplate.Template, UpdateStrategy: extensions.DaemonSetUpdateStrategy{ Type: extensions.RollingUpdateDaemonSetStrategyType, @@ -772,7 +773,7 @@ func TestValidateDaemonSet(t *testing.T) { Namespace: api.NamespaceDefault, }, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validSelector}, + Selector: &unversioned.LabelSelector{MatchLabels: validSelector}, Template: validPodTemplate.Template, UpdateStrategy: extensions.DaemonSetUpdateStrategy{ Type: extensions.RollingUpdateDaemonSetStrategyType, @@ -789,7 +790,7 @@ func TestValidateDaemonSet(t *testing.T) { Namespace: api.NamespaceDefault, }, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validSelector}, + Selector: &unversioned.LabelSelector{MatchLabels: validSelector}, Template: validPodTemplate.Template, UpdateStrategy: extensions.DaemonSetUpdateStrategy{ Type: extensions.RollingUpdateDaemonSetStrategyType, @@ -806,7 +807,7 @@ func TestValidateDaemonSet(t *testing.T) { Namespace: api.NamespaceDefault, }, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validSelector}, + Selector: &unversioned.LabelSelector{MatchLabels: validSelector}, Template: validPodTemplate.Template, UpdateStrategy: extensions.DaemonSetUpdateStrategy{ Type: extensions.RollingUpdateDaemonSetStrategyType, @@ -1007,7 +1008,7 @@ func TestValidateDeploymentRollback(t *testing.T) { } func TestValidateJob(t *testing.T) { - validSelector := &extensions.LabelSelector{ + validSelector := &unversioned.LabelSelector{ MatchLabels: map[string]string{"a": "b"}, } validPodTemplateSpec := api.PodTemplateSpec{ @@ -1529,7 +1530,7 @@ func TestValidateReplicaSetStatusUpdate(t *testing.T) { old: extensions.ReplicaSet{ ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, Spec: extensions.ReplicaSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validLabels}, + Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Template: &validPodTemplate.Template, }, Status: extensions.ReplicaSetStatus{ @@ -1540,7 +1541,7 @@ func TestValidateReplicaSetStatusUpdate(t *testing.T) { ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, Spec: extensions.ReplicaSetSpec{ Replicas: 3, - Selector: &extensions.LabelSelector{MatchLabels: validLabels}, + Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Template: &validPodTemplate.Template, }, Status: extensions.ReplicaSetStatus{ @@ -1561,7 +1562,7 @@ func TestValidateReplicaSetStatusUpdate(t *testing.T) { old: extensions.ReplicaSet{ ObjectMeta: api.ObjectMeta{Name: "", Namespace: api.NamespaceDefault}, Spec: extensions.ReplicaSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validLabels}, + Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Template: &validPodTemplate.Template, }, Status: extensions.ReplicaSetStatus{ @@ -1572,7 +1573,7 @@ func TestValidateReplicaSetStatusUpdate(t *testing.T) { ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, Spec: extensions.ReplicaSetSpec{ Replicas: 2, - Selector: &extensions.LabelSelector{MatchLabels: validLabels}, + Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Template: &validPodTemplate.Template, }, Status: extensions.ReplicaSetStatus{ @@ -1637,7 +1638,7 @@ func TestValidateReplicaSetUpdate(t *testing.T) { old: extensions.ReplicaSet{ ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, Spec: extensions.ReplicaSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validLabels}, + Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Template: &validPodTemplate.Template, }, }, @@ -1645,7 +1646,7 @@ func TestValidateReplicaSetUpdate(t *testing.T) { ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, Spec: extensions.ReplicaSetSpec{ Replicas: 3, - Selector: &extensions.LabelSelector{MatchLabels: validLabels}, + Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Template: &validPodTemplate.Template, }, }, @@ -1654,7 +1655,7 @@ func TestValidateReplicaSetUpdate(t *testing.T) { old: extensions.ReplicaSet{ ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, Spec: extensions.ReplicaSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validLabels}, + Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Template: &validPodTemplate.Template, }, }, @@ -1662,7 +1663,7 @@ func TestValidateReplicaSetUpdate(t *testing.T) { ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, Spec: extensions.ReplicaSetSpec{ Replicas: 1, - Selector: &extensions.LabelSelector{MatchLabels: validLabels}, + Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Template: &readWriteVolumePodTemplate.Template, }, }, @@ -1680,7 +1681,7 @@ func TestValidateReplicaSetUpdate(t *testing.T) { old: extensions.ReplicaSet{ ObjectMeta: api.ObjectMeta{Name: "", Namespace: api.NamespaceDefault}, Spec: extensions.ReplicaSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validLabels}, + Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Template: &validPodTemplate.Template, }, }, @@ -1688,7 +1689,7 @@ func TestValidateReplicaSetUpdate(t *testing.T) { ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, Spec: extensions.ReplicaSetSpec{ Replicas: 2, - Selector: &extensions.LabelSelector{MatchLabels: validLabels}, + Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Template: &readWriteVolumePodTemplate.Template, }, }, @@ -1697,7 +1698,7 @@ func TestValidateReplicaSetUpdate(t *testing.T) { old: extensions.ReplicaSet{ ObjectMeta: api.ObjectMeta{Name: "", Namespace: api.NamespaceDefault}, Spec: extensions.ReplicaSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validLabels}, + Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Template: &validPodTemplate.Template, }, }, @@ -1705,7 +1706,7 @@ func TestValidateReplicaSetUpdate(t *testing.T) { ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, Spec: extensions.ReplicaSetSpec{ Replicas: 2, - Selector: &extensions.LabelSelector{MatchLabels: invalidLabels}, + Selector: &unversioned.LabelSelector{MatchLabels: invalidLabels}, Template: &validPodTemplate.Template, }, }, @@ -1714,7 +1715,7 @@ func TestValidateReplicaSetUpdate(t *testing.T) { old: extensions.ReplicaSet{ ObjectMeta: api.ObjectMeta{Name: "", Namespace: api.NamespaceDefault}, Spec: extensions.ReplicaSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validLabels}, + Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Template: &validPodTemplate.Template, }, }, @@ -1722,7 +1723,7 @@ func TestValidateReplicaSetUpdate(t *testing.T) { ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, Spec: extensions.ReplicaSetSpec{ Replicas: 2, - Selector: &extensions.LabelSelector{MatchLabels: validLabels}, + Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Template: &invalidPodTemplate.Template, }, }, @@ -1731,7 +1732,7 @@ func TestValidateReplicaSetUpdate(t *testing.T) { old: extensions.ReplicaSet{ ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, Spec: extensions.ReplicaSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validLabels}, + Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Template: &validPodTemplate.Template, }, }, @@ -1739,7 +1740,7 @@ func TestValidateReplicaSetUpdate(t *testing.T) { ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, Spec: extensions.ReplicaSetSpec{ Replicas: -1, - Selector: &extensions.LabelSelector{MatchLabels: validLabels}, + Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Template: &validPodTemplate.Template, }, }, @@ -1795,14 +1796,14 @@ func TestValidateReplicaSet(t *testing.T) { { ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, Spec: extensions.ReplicaSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validLabels}, + Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Template: &validPodTemplate.Template, }, }, { ObjectMeta: api.ObjectMeta{Name: "abc-123", Namespace: api.NamespaceDefault}, Spec: extensions.ReplicaSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validLabels}, + Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Template: &validPodTemplate.Template, }, }, @@ -1810,7 +1811,7 @@ func TestValidateReplicaSet(t *testing.T) { ObjectMeta: api.ObjectMeta{Name: "abc-123", Namespace: api.NamespaceDefault}, Spec: extensions.ReplicaSetSpec{ Replicas: 1, - Selector: &extensions.LabelSelector{MatchLabels: validLabels}, + Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Template: &readWriteVolumePodTemplate.Template, }, }, @@ -1825,14 +1826,14 @@ func TestValidateReplicaSet(t *testing.T) { "zero-length ID": { ObjectMeta: api.ObjectMeta{Name: "", Namespace: api.NamespaceDefault}, Spec: extensions.ReplicaSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validLabels}, + Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Template: &validPodTemplate.Template, }, }, "missing-namespace": { ObjectMeta: api.ObjectMeta{Name: "abc-123"}, Spec: extensions.ReplicaSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validLabels}, + Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Template: &validPodTemplate.Template, }, }, @@ -1845,21 +1846,21 @@ func TestValidateReplicaSet(t *testing.T) { "selector_doesnt_match": { ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, Spec: extensions.ReplicaSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}}, + Selector: &unversioned.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}}, Template: &validPodTemplate.Template, }, }, "invalid manifest": { ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, Spec: extensions.ReplicaSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validLabels}, + Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, }, }, "read-write persistent disk with > 1 pod": { ObjectMeta: api.ObjectMeta{Name: "abc"}, Spec: extensions.ReplicaSetSpec{ Replicas: 2, - Selector: &extensions.LabelSelector{MatchLabels: validLabels}, + Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Template: &readWriteVolumePodTemplate.Template, }, }, @@ -1867,7 +1868,7 @@ func TestValidateReplicaSet(t *testing.T) { ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, Spec: extensions.ReplicaSetSpec{ Replicas: -1, - Selector: &extensions.LabelSelector{MatchLabels: validLabels}, + Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, }, }, "invalid_label": { @@ -1879,7 +1880,7 @@ func TestValidateReplicaSet(t *testing.T) { }, }, Spec: extensions.ReplicaSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validLabels}, + Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Template: &validPodTemplate.Template, }, }, @@ -1904,7 +1905,7 @@ func TestValidateReplicaSet(t *testing.T) { }, }, Spec: extensions.ReplicaSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validLabels}, + Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Template: &validPodTemplate.Template, }, }, @@ -1914,7 +1915,7 @@ func TestValidateReplicaSet(t *testing.T) { Namespace: api.NamespaceDefault, }, Spec: extensions.ReplicaSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validLabels}, + Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Template: &api.PodTemplateSpec{ Spec: api.PodSpec{ RestartPolicy: api.RestartPolicyOnFailure, @@ -1933,7 +1934,7 @@ func TestValidateReplicaSet(t *testing.T) { Namespace: api.NamespaceDefault, }, Spec: extensions.ReplicaSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: validLabels}, + Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Template: &api.PodTemplateSpec{ Spec: api.PodSpec{ RestartPolicy: api.RestartPolicyNever, diff --git a/pkg/client/cache/listers.go b/pkg/client/cache/listers.go index d974ad4e938..e9ce804353d 100644 --- a/pkg/client/cache/listers.go +++ b/pkg/client/cache/listers.go @@ -21,6 +21,7 @@ import ( "github.com/golang/glog" "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/labels" ) @@ -304,7 +305,7 @@ func (s *StoreToReplicaSetLister) GetPodReplicaSets(pod *api.Pod) (rss []extensi if rs.Namespace != pod.Namespace { continue } - selector, err = extensions.LabelSelectorAsSelector(rs.Spec.Selector) + selector, err = unversioned.LabelSelectorAsSelector(rs.Spec.Selector) if err != nil { err = fmt.Errorf("failed to convert pod selector to selector: %v", err) return @@ -361,7 +362,7 @@ func (s *StoreToDaemonSetLister) GetPodDaemonSets(pod *api.Pod) (daemonSets []ex if daemonSet.Namespace != pod.Namespace { continue } - selector, err = extensions.LabelSelectorAsSelector(daemonSet.Spec.Selector) + selector, err = unversioned.LabelSelectorAsSelector(daemonSet.Spec.Selector) if err != nil { // this should not happen if the DaemonSet passed validation return nil, err @@ -483,7 +484,7 @@ func (s *StoreToJobLister) GetPodJobs(pod *api.Pod) (jobs []extensions.Job, err continue } - selector, _ = extensions.LabelSelectorAsSelector(job.Spec.Selector) + selector, _ = unversioned.LabelSelectorAsSelector(job.Spec.Selector) if !selector.Matches(labels.Set(pod.Labels)) { continue } diff --git a/pkg/client/cache/listers_test.go b/pkg/client/cache/listers_test.go index 6322cc25b11..e95df1f21c5 100644 --- a/pkg/client/cache/listers_test.go +++ b/pkg/client/cache/listers_test.go @@ -20,6 +20,7 @@ import ( "testing" "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/util/sets" @@ -258,7 +259,7 @@ func TestStoreToReplicaSetLister(t *testing.T) { { ObjectMeta: api.ObjectMeta{Name: "basic", Namespace: "ns"}, Spec: extensions.ReplicaSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: map[string]string{"foo": "baz"}}, + Selector: &unversioned.LabelSelector{MatchLabels: map[string]string{"foo": "baz"}}, }, }, }, @@ -297,13 +298,13 @@ func TestStoreToReplicaSetLister(t *testing.T) { { ObjectMeta: api.ObjectMeta{Name: "foo"}, Spec: extensions.ReplicaSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}}, + Selector: &unversioned.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}}, }, }, { ObjectMeta: api.ObjectMeta{Name: "bar", Namespace: "ns"}, Spec: extensions.ReplicaSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}}, + Selector: &unversioned.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}}, }, }, }, @@ -384,7 +385,7 @@ func TestStoreToDaemonSetLister(t *testing.T) { { ObjectMeta: api.ObjectMeta{Name: "basic", Namespace: "ns"}, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: map[string]string{"foo": "baz"}}, + Selector: &unversioned.LabelSelector{MatchLabels: map[string]string{"foo": "baz"}}, }, }, }, @@ -423,13 +424,13 @@ func TestStoreToDaemonSetLister(t *testing.T) { { ObjectMeta: api.ObjectMeta{Name: "foo"}, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}}, + Selector: &unversioned.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}}, }, }, { ObjectMeta: api.ObjectMeta{Name: "bar", Namespace: "ns"}, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}}, + Selector: &unversioned.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}}, }, }, }, @@ -513,7 +514,7 @@ func TestStoreToJobLister(t *testing.T) { { ObjectMeta: api.ObjectMeta{Name: "basic", Namespace: "ns"}, Spec: extensions.JobSpec{ - Selector: &extensions.LabelSelector{ + Selector: &unversioned.LabelSelector{ MatchLabels: map[string]string{"foo": "baz"}, }, }, @@ -556,7 +557,7 @@ func TestStoreToJobLister(t *testing.T) { { ObjectMeta: api.ObjectMeta{Name: "foo"}, Spec: extensions.JobSpec{ - Selector: &extensions.LabelSelector{ + Selector: &unversioned.LabelSelector{ MatchLabels: map[string]string{"foo": "bar"}, }, }, @@ -564,7 +565,7 @@ func TestStoreToJobLister(t *testing.T) { { ObjectMeta: api.ObjectMeta{Name: "bar", Namespace: "ns"}, Spec: extensions.JobSpec{ - Selector: &extensions.LabelSelector{ + Selector: &unversioned.LabelSelector{ MatchLabels: map[string]string{"foo": "bar"}, }, }, @@ -589,7 +590,7 @@ func TestStoreToJobLister(t *testing.T) { { ObjectMeta: api.ObjectMeta{Name: "foo", Namespace: "foo"}, Spec: extensions.JobSpec{ - Selector: &extensions.LabelSelector{ + Selector: &unversioned.LabelSelector{ MatchLabels: map[string]string{"foo": "bar"}, }, }, @@ -597,7 +598,7 @@ func TestStoreToJobLister(t *testing.T) { { ObjectMeta: api.ObjectMeta{Name: "bar", Namespace: "bar"}, Spec: extensions.JobSpec{ - Selector: &extensions.LabelSelector{ + Selector: &unversioned.LabelSelector{ MatchLabels: map[string]string{"foo": "bar"}, }, }, diff --git a/pkg/controller/daemon/controller.go b/pkg/controller/daemon/controller.go index f23ee6c2e8a..8ef217bd48a 100644 --- a/pkg/controller/daemon/controller.go +++ b/pkg/controller/daemon/controller.go @@ -24,6 +24,7 @@ import ( "github.com/golang/glog" "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/api/validation" "k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/client/cache" @@ -365,7 +366,7 @@ func (dsc *DaemonSetsController) updateNode(old, cur interface{}) { // getNodesToDaemonSetPods returns a map from nodes to daemon pods (corresponding to ds) running on the nodes. func (dsc *DaemonSetsController) getNodesToDaemonPods(ds *extensions.DaemonSet) (map[string][]*api.Pod, error) { nodeToDaemonPods := make(map[string][]*api.Pod) - selector, err := extensions.LabelSelectorAsSelector(ds.Spec.Selector) + selector, err := unversioned.LabelSelectorAsSelector(ds.Spec.Selector) if err != nil { return nil, err } diff --git a/pkg/controller/daemon/controller_test.go b/pkg/controller/daemon/controller_test.go index 36fa91b6dff..5cd2dda702c 100644 --- a/pkg/controller/daemon/controller_test.go +++ b/pkg/controller/daemon/controller_test.go @@ -60,7 +60,7 @@ func newDaemonSet(name string) *extensions.DaemonSet { Namespace: api.NamespaceDefault, }, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: simpleDaemonSetLabel}, + Selector: &unversioned.LabelSelector{MatchLabels: simpleDaemonSetLabel}, Template: api.PodTemplateSpec{ ObjectMeta: api.ObjectMeta{ Labels: simpleDaemonSetLabel, diff --git a/pkg/controller/job/controller.go b/pkg/controller/job/controller.go index 654e3521ebe..14aa1069352 100644 --- a/pkg/controller/job/controller.go +++ b/pkg/controller/job/controller.go @@ -317,7 +317,7 @@ func (jm *JobController) syncJob(key string) error { return err } jobNeedsSync := jm.expectations.SatisfiedExpectations(jobKey) - selector, _ := extensions.LabelSelectorAsSelector(job.Spec.Selector) + selector, _ := unversioned.LabelSelectorAsSelector(job.Spec.Selector) podList, err := jm.podStore.Pods(job.Namespace).List(selector) if err != nil { glog.Errorf("Error getting pods for job %q: %v", key, err) diff --git a/pkg/controller/job/controller_test.go b/pkg/controller/job/controller_test.go index c626c8a8fb1..e7792e637c3 100644 --- a/pkg/controller/job/controller_test.go +++ b/pkg/controller/job/controller_test.go @@ -45,7 +45,7 @@ func newJob(parallelism, completions int) *extensions.Job { Namespace: api.NamespaceDefault, }, Spec: extensions.JobSpec{ - Selector: &extensions.LabelSelector{ + Selector: &unversioned.LabelSelector{ MatchLabels: map[string]string{"foo": "bar"}, }, Template: api.PodTemplateSpec{ @@ -496,7 +496,7 @@ func TestJobPodLookup(t *testing.T) { job: &extensions.Job{ ObjectMeta: api.ObjectMeta{Name: "foo"}, Spec: extensions.JobSpec{ - Selector: &extensions.LabelSelector{ + Selector: &unversioned.LabelSelector{ MatchLabels: map[string]string{"foo": "bar"}, }, }, @@ -515,11 +515,11 @@ func TestJobPodLookup(t *testing.T) { job: &extensions.Job{ ObjectMeta: api.ObjectMeta{Name: "bar", Namespace: "ns"}, Spec: extensions.JobSpec{ - Selector: &extensions.LabelSelector{ - MatchExpressions: []extensions.LabelSelectorRequirement{ + Selector: &unversioned.LabelSelector{ + MatchExpressions: []unversioned.LabelSelectorRequirement{ { Key: "foo", - Operator: extensions.LabelSelectorOpIn, + Operator: unversioned.LabelSelectorOpIn, Values: []string{"bar"}, }, }, diff --git a/pkg/controller/node/nodecontroller_test.go b/pkg/controller/node/nodecontroller_test.go index 9c6cfc2c7a7..3fdde950210 100644 --- a/pkg/controller/node/nodecontroller_test.go +++ b/pkg/controller/node/nodecontroller_test.go @@ -267,7 +267,7 @@ func TestMonitorNodeStatusEvictPods(t *testing.T) { Namespace: "default", }, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{ + Selector: &unversioned.LabelSelector{ MatchLabels: map[string]string{"daemon": "yes"}, }, }, diff --git a/pkg/controller/replicaset/replica_set.go b/pkg/controller/replicaset/replica_set.go index ffa48cfc8de..13a1d3c93c0 100644 --- a/pkg/controller/replicaset/replica_set.go +++ b/pkg/controller/replicaset/replica_set.go @@ -26,6 +26,7 @@ import ( "github.com/golang/glog" "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/client/cache" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_2" @@ -436,7 +437,7 @@ func (rsc *ReplicaSetController) syncReplicaSet(key string) error { return err } rsNeedsSync := rsc.expectations.SatisfiedExpectations(rsKey) - selector, err := extensions.LabelSelectorAsSelector(rs.Spec.Selector) + selector, err := unversioned.LabelSelectorAsSelector(rs.Spec.Selector) if err != nil { glog.Errorf("Error converting pod selector to selector: %v", err) return err diff --git a/pkg/controller/replicaset/replica_set_test.go b/pkg/controller/replicaset/replica_set_test.go index 34c7c0902da..70742b4ee38 100644 --- a/pkg/controller/replicaset/replica_set_test.go +++ b/pkg/controller/replicaset/replica_set_test.go @@ -66,7 +66,7 @@ func newReplicaSet(replicas int, selectorMap map[string]string) *extensions.Repl }, Spec: extensions.ReplicaSetSpec{ Replicas: replicas, - Selector: &extensions.LabelSelector{MatchLabels: selectorMap}, + Selector: &unversioned.LabelSelector{MatchLabels: selectorMap}, Template: &api.PodTemplateSpec{ ObjectMeta: api.ObjectMeta{ Labels: map[string]string{ @@ -379,7 +379,7 @@ func TestPodControllerLookup(t *testing.T) { { ObjectMeta: api.ObjectMeta{Name: "foo"}, Spec: extensions.ReplicaSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}}, + Selector: &unversioned.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}}, }, }, }, @@ -394,7 +394,7 @@ func TestPodControllerLookup(t *testing.T) { { ObjectMeta: api.ObjectMeta{Name: "bar", Namespace: "ns"}, Spec: extensions.ReplicaSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}}, + Selector: &unversioned.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}}, }, }, }, @@ -537,7 +537,7 @@ func TestUpdatePods(t *testing.T) { manager.rsStore.Store.Add(testRSSpec1) testRSSpec2 := *testRSSpec1 labelMap2 := map[string]string{"bar": "foo"} - testRSSpec2.Spec.Selector = &extensions.LabelSelector{MatchLabels: labelMap2} + testRSSpec2.Spec.Selector = &unversioned.LabelSelector{MatchLabels: labelMap2} testRSSpec2.Name = "barfoo" manager.rsStore.Store.Add(&testRSSpec2) diff --git a/pkg/kubectl/cmd/drain_test.go b/pkg/kubectl/cmd/drain_test.go index a9691a7fa0d..57c5b10ebad 100644 --- a/pkg/kubectl/cmd/drain_test.go +++ b/pkg/kubectl/cmd/drain_test.go @@ -242,7 +242,7 @@ func TestDrain(t *testing.T) { SelfLink: "/apis/extensions/v1beta1/namespaces/default/daemonsets/ds", }, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: labels}, + Selector: &unversioned.LabelSelector{MatchLabels: labels}, }, } @@ -270,7 +270,7 @@ func TestDrain(t *testing.T) { SelfLink: "/apis/extensions/v1beta1/namespaces/default/jobs/job", }, Spec: extensions.JobSpec{ - Selector: &extensions.LabelSelector{MatchLabels: labels}, + Selector: &unversioned.LabelSelector{MatchLabels: labels}, }, } diff --git a/pkg/kubectl/describe.go b/pkg/kubectl/describe.go index 53d33a784a5..207e5d4ec86 100644 --- a/pkg/kubectl/describe.go +++ b/pkg/kubectl/describe.go @@ -920,7 +920,7 @@ func describeJob(job *extensions.Job, events *api.EventList) (string, error) { fmt.Fprintf(out, "Name:\t%s\n", job.Name) fmt.Fprintf(out, "Namespace:\t%s\n", job.Namespace) fmt.Fprintf(out, "Image(s):\t%s\n", makeImageList(&job.Spec.Template.Spec)) - selector, _ := extensions.LabelSelectorAsSelector(job.Spec.Selector) + selector, _ := unversioned.LabelSelectorAsSelector(job.Spec.Selector) fmt.Fprintf(out, "Selector:\t%s\n", selector) fmt.Fprintf(out, "Parallelism:\t%d\n", *job.Spec.Parallelism) if job.Spec.Completions != nil { @@ -958,7 +958,7 @@ func (d *DaemonSetDescriber) Describe(namespace, name string) (string, error) { return "", err } - selector, err := extensions.LabelSelectorAsSelector(daemon.Spec.Selector) + selector, err := unversioned.LabelSelectorAsSelector(daemon.Spec.Selector) if err != nil { return "", err } @@ -976,7 +976,7 @@ func describeDaemonSet(daemon *extensions.DaemonSet, events *api.EventList, runn return tabbedString(func(out io.Writer) error { fmt.Fprintf(out, "Name:\t%s\n", daemon.Name) fmt.Fprintf(out, "Image(s):\t%s\n", makeImageList(&daemon.Spec.Template.Spec)) - selector, err := extensions.LabelSelectorAsSelector(daemon.Spec.Selector) + selector, err := unversioned.LabelSelectorAsSelector(daemon.Spec.Selector) if err != nil { // this shouldn't happen if LabelSelector passed validation return err @@ -1645,7 +1645,7 @@ func getDaemonSetsForLabels(c client.DaemonSetInterface, labelsToMatch labels.La // Find the ones that match labelsToMatch. var matchingDaemonSets []extensions.DaemonSet for _, ds := range dss.Items { - selector, err := extensions.LabelSelectorAsSelector(ds.Spec.Selector) + selector, err := unversioned.LabelSelectorAsSelector(ds.Spec.Selector) if err != nil { // this should never happen if the DaemonSet passed validation return nil, err diff --git a/pkg/kubectl/resource_printer.go b/pkg/kubectl/resource_printer.go index f5e6d22c45e..d819af91506 100644 --- a/pkg/kubectl/resource_printer.go +++ b/pkg/kubectl/resource_printer.go @@ -740,7 +740,7 @@ func printJob(job *extensions.Job, w io.Writer, options PrintOptions) error { } } - selector, _ := extensions.LabelSelectorAsSelector(job.Spec.Selector) + selector, _ := unversioned.LabelSelectorAsSelector(job.Spec.Selector) _, err := fmt.Fprintf(w, "%s\t%s\t%s\t%s\t%d", name, firstContainer.Name, @@ -941,7 +941,7 @@ func printDaemonSet(ds *extensions.DaemonSet, w io.Writer, options PrintOptions) return err } } - selector, err := extensions.LabelSelectorAsSelector(ds.Spec.Selector) + selector, err := unversioned.LabelSelectorAsSelector(ds.Spec.Selector) if err != nil { // this shouldn't happen if LabelSelector passed validation return err diff --git a/pkg/kubectl/run.go b/pkg/kubectl/run.go index 43359a6792d..f6c74c0fe57 100644 --- a/pkg/kubectl/run.go +++ b/pkg/kubectl/run.go @@ -23,6 +23,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/resource" + "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/util/validation" @@ -266,7 +267,7 @@ func (JobV1Beta1) Generate(genericParams map[string]interface{}) (runtime.Object Labels: labels, }, Spec: extensions.JobSpec{ - Selector: &extensions.LabelSelector{ + Selector: &unversioned.LabelSelector{ MatchLabels: labels, }, Template: api.PodTemplateSpec{ diff --git a/pkg/kubectl/run_test.go b/pkg/kubectl/run_test.go index 449fdd0d634..0378ba3ed3f 100644 --- a/pkg/kubectl/run_test.go +++ b/pkg/kubectl/run_test.go @@ -22,6 +22,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/resource" + "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/apis/extensions" ) @@ -746,7 +747,7 @@ func TestGenerateJob(t *testing.T) { Labels: map[string]string{"foo": "bar", "baz": "blah"}, }, Spec: extensions.JobSpec{ - Selector: &extensions.LabelSelector{ + Selector: &unversioned.LabelSelector{ MatchLabels: map[string]string{"foo": "bar", "baz": "blah"}, }, Template: api.PodTemplateSpec{ diff --git a/pkg/kubectl/stop.go b/pkg/kubectl/stop.go index 11409dfc11a..9f4a406e20e 100644 --- a/pkg/kubectl/stop.go +++ b/pkg/kubectl/stop.go @@ -251,7 +251,7 @@ func (reaper *JobReaper) Stop(namespace, name string, timeout time.Duration, gra return err } // at this point only dead pods are left, that should be removed - selector, _ := extensions.LabelSelectorAsSelector(job.Spec.Selector) + selector, _ := unversioned.LabelSelectorAsSelector(job.Spec.Selector) options := api.ListOptions{LabelSelector: selector} podList, err := pods.List(options) if err != nil { diff --git a/pkg/kubectl/stop_test.go b/pkg/kubectl/stop_test.go index 2e2b5d343ea..7fbb53b1ddc 100644 --- a/pkg/kubectl/stop_test.go +++ b/pkg/kubectl/stop_test.go @@ -284,7 +284,7 @@ func TestJobStop(t *testing.T) { }, Spec: extensions.JobSpec{ Parallelism: &zero, - Selector: &extensions.LabelSelector{ + Selector: &unversioned.LabelSelector{ MatchLabels: map[string]string{"k1": "v1"}, }, }, @@ -298,7 +298,7 @@ func TestJobStop(t *testing.T) { }, Spec: extensions.JobSpec{ Parallelism: &zero, - Selector: &extensions.LabelSelector{ + Selector: &unversioned.LabelSelector{ MatchLabels: map[string]string{"k1": "v1"}, }, }, @@ -320,7 +320,7 @@ func TestJobStop(t *testing.T) { }, Spec: extensions.JobSpec{ Parallelism: &zero, - Selector: &extensions.LabelSelector{ + Selector: &unversioned.LabelSelector{ MatchLabels: map[string]string{"k1": "v1"}, }, }, @@ -334,7 +334,7 @@ func TestJobStop(t *testing.T) { }, Spec: extensions.JobSpec{ Parallelism: &zero, - Selector: &extensions.LabelSelector{ + Selector: &unversioned.LabelSelector{ MatchLabels: map[string]string{"k1": "v1"}, }, }, diff --git a/pkg/registry/daemonset/etcd/etcd_test.go b/pkg/registry/daemonset/etcd/etcd_test.go index 913f45870bb..9db445c3b2b 100755 --- a/pkg/registry/daemonset/etcd/etcd_test.go +++ b/pkg/registry/daemonset/etcd/etcd_test.go @@ -20,6 +20,7 @@ import ( "testing" "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/fields" "k8s.io/kubernetes/pkg/labels" @@ -43,7 +44,7 @@ func newValidDaemonSet() *extensions.DaemonSet { Namespace: api.NamespaceDefault, }, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: map[string]string{"a": "b"}}, + Selector: &unversioned.LabelSelector{MatchLabels: map[string]string{"a": "b"}}, Template: api.PodTemplateSpec{ ObjectMeta: api.ObjectMeta{ Labels: map[string]string{"a": "b"}, @@ -85,7 +86,7 @@ func TestCreate(t *testing.T) { // invalid (invalid selector) &extensions.DaemonSet{ Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: map[string]string{}}, + Selector: &unversioned.LabelSelector{MatchLabels: map[string]string{}}, Template: validDaemonSet.Spec.Template, }, }, @@ -131,7 +132,7 @@ func TestUpdate(t *testing.T) { }, func(obj runtime.Object) runtime.Object { object := obj.(*extensions.DaemonSet) - object.Spec.Selector = &extensions.LabelSelector{MatchLabels: map[string]string{}} + object.Spec.Selector = &unversioned.LabelSelector{MatchLabels: map[string]string{}} return object }, func(obj runtime.Object) runtime.Object { diff --git a/pkg/registry/job/etcd/etcd_test.go b/pkg/registry/job/etcd/etcd_test.go index d02e86eef2d..73700651f13 100644 --- a/pkg/registry/job/etcd/etcd_test.go +++ b/pkg/registry/job/etcd/etcd_test.go @@ -20,6 +20,7 @@ import ( "testing" "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/apis/extensions" // Ensure that extensions/v1beta1 package is initialized. _ "k8s.io/kubernetes/pkg/apis/extensions/v1beta1" @@ -48,7 +49,7 @@ func validNewJob() *extensions.Job { Spec: extensions.JobSpec{ Completions: &completions, Parallelism: ¶llelism, - Selector: &extensions.LabelSelector{ + Selector: &unversioned.LabelSelector{ MatchLabels: map[string]string{"a": "b"}, }, Template: api.PodTemplateSpec{ @@ -84,7 +85,7 @@ func TestCreate(t *testing.T) { &extensions.Job{ Spec: extensions.JobSpec{ Completions: validJob.Spec.Completions, - Selector: &extensions.LabelSelector{}, + Selector: &unversioned.LabelSelector{}, Template: validJob.Spec.Template, }, }, @@ -108,7 +109,7 @@ func TestUpdate(t *testing.T) { // invalid updateFunc func(obj runtime.Object) runtime.Object { object := obj.(*extensions.Job) - object.Spec.Selector = &extensions.LabelSelector{} + object.Spec.Selector = &unversioned.LabelSelector{} return object }, func(obj runtime.Object) runtime.Object { diff --git a/pkg/registry/job/strategy_test.go b/pkg/registry/job/strategy_test.go index 45b5a89b18f..924e363d1ad 100644 --- a/pkg/registry/job/strategy_test.go +++ b/pkg/registry/job/strategy_test.go @@ -22,6 +22,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/testapi" apitesting "k8s.io/kubernetes/pkg/api/testing" + "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/labels" ) @@ -35,7 +36,7 @@ func TestJobStrategy(t *testing.T) { t.Errorf("Job should not allow create on update") } - validSelector := &extensions.LabelSelector{ + validSelector := &unversioned.LabelSelector{ MatchLabels: map[string]string{"a": "b"}, } validPodTemplateSpec := api.PodTemplateSpec{ @@ -100,7 +101,7 @@ func TestJobStatusStrategy(t *testing.T) { if StatusStrategy.AllowCreateOnUpdate() { t.Errorf("Job should not allow create on update") } - validSelector := &extensions.LabelSelector{ + validSelector := &unversioned.LabelSelector{ MatchLabels: map[string]string{"a": "b"}, } validPodTemplateSpec := api.PodTemplateSpec{ diff --git a/test/e2e/daemon_set.go b/test/e2e/daemon_set.go index 5ee6bd24ae6..b0b0e4ecafd 100644 --- a/test/e2e/daemon_set.go +++ b/test/e2e/daemon_set.go @@ -147,7 +147,7 @@ var _ = Describe("Daemon set [Feature:DaemonSet]", func() { Name: dsName, }, Spec: extensions.DaemonSetSpec{ - Selector: &extensions.LabelSelector{MatchLabels: complexLabel}, + Selector: &unversioned.LabelSelector{MatchLabels: complexLabel}, Template: api.PodTemplateSpec{ ObjectMeta: api.ObjectMeta{ Labels: complexLabel,