From 32b47a36f67a15084054a0706e0d6ff511156628 Mon Sep 17 00:00:00 2001 From: Solly Ross Date: Wed, 25 Oct 2017 17:08:52 -0400 Subject: [PATCH 1/2] [e2e] make sure to specify APIVersion in HPA tests Previously, the HPA controller ignored APIVersion when resolving the scale subresource for a kind, meaning if it was set incorrectly in the HPA's scaleTargetRef, it would not matter. This was the case for several of the HPA e2e tests. Since the polymorphic scale client merged, APIVersion now matters. This updates the HPA e2es to care about APIVersion, by passing kind as a full GroupVersionKind, and not just a string. --- test/e2e/autoscaling/BUILD | 1 + .../autoscaling/horizontal_pod_autoscaling.go | 7 ++-- test/e2e/common/BUILD | 1 - test/e2e/common/autoscaling_utils.go | 38 ++++++------------- 4 files changed, 17 insertions(+), 30 deletions(-) diff --git a/test/e2e/autoscaling/BUILD b/test/e2e/autoscaling/BUILD index 79913a1c0ac..8718b08feec 100644 --- a/test/e2e/autoscaling/BUILD +++ b/test/e2e/autoscaling/BUILD @@ -37,6 +37,7 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/fields:go_default_library", "//vendor/k8s.io/apimachinery/pkg/labels:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/errors:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/intstr:go_default_library", diff --git a/test/e2e/autoscaling/horizontal_pod_autoscaling.go b/test/e2e/autoscaling/horizontal_pod_autoscaling.go index 6e6aca1a8da..9dd853ed642 100644 --- a/test/e2e/autoscaling/horizontal_pod_autoscaling.go +++ b/test/e2e/autoscaling/horizontal_pod_autoscaling.go @@ -19,6 +19,7 @@ package autoscaling import ( "time" + "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/kubernetes/test/e2e/common" "k8s.io/kubernetes/test/e2e/framework" @@ -113,7 +114,7 @@ type HPAScaleTest struct { // The first state change is due to the CPU being consumed initially, which HPA responds to by changing pod counts. // The second state change (optional) is due to the CPU burst parameter, which HPA again responds to. // TODO The use of 3 states is arbitrary, we could eventually make this test handle "n" states once this test stabilizes. -func (scaleTest *HPAScaleTest) run(name, kind string, rc *common.ResourceConsumer, f *framework.Framework) { +func (scaleTest *HPAScaleTest) run(name string, kind schema.GroupVersionKind, rc *common.ResourceConsumer, f *framework.Framework) { const timeToWait = 15 * time.Minute rc = common.NewDynamicResourceConsumer(name, f.Namespace.Name, kind, int(scaleTest.initPods), int(scaleTest.totalInitialCPUUsage), 0, 0, scaleTest.perPodCPURequest, 200, f.ClientSet, f.InternalClientset) defer rc.CleanUp() @@ -129,7 +130,7 @@ func (scaleTest *HPAScaleTest) run(name, kind string, rc *common.ResourceConsume } } -func scaleUp(name, kind string, checkStability bool, rc *common.ResourceConsumer, f *framework.Framework) { +func scaleUp(name string, kind schema.GroupVersionKind, checkStability bool, rc *common.ResourceConsumer, f *framework.Framework) { stasis := 0 * time.Minute if checkStability { stasis = 10 * time.Minute @@ -149,7 +150,7 @@ func scaleUp(name, kind string, checkStability bool, rc *common.ResourceConsumer scaleTest.run(name, kind, rc, f) } -func scaleDown(name, kind string, checkStability bool, rc *common.ResourceConsumer, f *framework.Framework) { +func scaleDown(name string, kind schema.GroupVersionKind, checkStability bool, rc *common.ResourceConsumer, f *framework.Framework) { stasis := 0 * time.Minute if checkStability { stasis = 10 * time.Minute diff --git a/test/e2e/common/BUILD b/test/e2e/common/BUILD index 68ccb3a74b8..dcaa4d77cc4 100644 --- a/test/e2e/common/BUILD +++ b/test/e2e/common/BUILD @@ -38,7 +38,6 @@ go_library( "//pkg/api/testapi:go_default_library", "//pkg/api/v1/helper:go_default_library", "//pkg/api/v1/pod:go_default_library", - "//pkg/apis/extensions:go_default_library", "//pkg/client/clientset_generated/internalclientset:go_default_library", "//pkg/client/conditions:go_default_library", "//pkg/kubelet:go_default_library", diff --git a/test/e2e/common/autoscaling_utils.go b/test/e2e/common/autoscaling_utils.go index 45f82fc0e0b..6bef1563013 100644 --- a/test/e2e/common/autoscaling_utils.go +++ b/test/e2e/common/autoscaling_utils.go @@ -31,7 +31,6 @@ import ( "k8s.io/apimachinery/pkg/util/wait" clientset "k8s.io/client-go/kubernetes" "k8s.io/kubernetes/pkg/api" - extensionsinternal "k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" "k8s.io/kubernetes/test/e2e/framework" testutils "k8s.io/kubernetes/test/utils" @@ -65,10 +64,10 @@ var ( resourceConsumerControllerImage = imageutils.GetE2EImage(imageutils.ResourceController) ) -const ( - KindRC = "ReplicationController" - KindDeployment = "Deployment" - KindReplicaSet = "ReplicaSet" +var ( + KindRC = schema.GroupVersionKind{Version: "v1", Kind: "ReplicationController"} + KindDeployment = schema.GroupVersionKind{Group: "apps", Version: "v1beta2", Kind: "Deployment"} + KindReplicaSet = schema.GroupVersionKind{Group: "apps", Version: "v1beta2", Kind: "ReplicaSet"} subresource = "scale" ) @@ -83,7 +82,7 @@ rc.ConsumeCPU(300) type ResourceConsumer struct { name string controllerName string - kind string + kind schema.GroupVersionKind nsName string clientSet clientset.Interface internalClientset *internalclientset.Clientset @@ -105,7 +104,7 @@ func GetResourceConsumerImage() string { return resourceConsumerImage } -func NewDynamicResourceConsumer(name, nsName, kind string, replicas, initCPUTotal, initMemoryTotal, initCustomMetric int, cpuLimit, memLimit int64, clientset clientset.Interface, internalClientset *internalclientset.Clientset) *ResourceConsumer { +func NewDynamicResourceConsumer(name, nsName string, kind schema.GroupVersionKind, replicas, initCPUTotal, initMemoryTotal, initCustomMetric int, cpuLimit, memLimit int64, clientset clientset.Interface, internalClientset *internalclientset.Clientset) *ResourceConsumer { return newResourceConsumer(name, nsName, kind, replicas, initCPUTotal, initMemoryTotal, initCustomMetric, dynamicConsumptionTimeInSeconds, dynamicRequestSizeInMillicores, dynamicRequestSizeInMegabytes, dynamicRequestSizeCustomMetric, cpuLimit, memLimit, clientset, internalClientset) } @@ -123,7 +122,7 @@ initMemoryTotal argument is in megabytes memLimit argument is in megabytes, memLimit is a maximum amount of memory that can be consumed by a single pod cpuLimit argument is in millicores, cpuLimit is a maximum amount of cpu that can be consumed by a single pod */ -func newResourceConsumer(name, nsName, kind string, replicas, initCPUTotal, initMemoryTotal, initCustomMetric, consumptionTimeInSeconds, requestSizeInMillicores, +func newResourceConsumer(name, nsName string, kind schema.GroupVersionKind, replicas, initCPUTotal, initMemoryTotal, initCustomMetric, consumptionTimeInSeconds, requestSizeInMillicores, requestSizeInMegabytes int, requestSizeCustomMetric int, cpuLimit, memLimit int64, clientset clientset.Interface, internalClientset *internalclientset.Clientset) *ResourceConsumer { runServiceAndWorkloadForResourceConsumer(clientset, internalClientset, nsName, name, kind, replicas, cpuLimit, memLimit) @@ -401,28 +400,14 @@ func (rc *ResourceConsumer) CleanUp() { rc.stopWaitGroup.Wait() // Wait some time to ensure all child goroutines are finished. time.Sleep(10 * time.Second) - kind, err := kindOf(rc.kind) - framework.ExpectNoError(err) + kind := rc.kind.GroupKind() framework.ExpectNoError(framework.DeleteResourceAndPods(rc.clientSet, rc.internalClientset, kind, rc.nsName, rc.name)) framework.ExpectNoError(rc.clientSet.CoreV1().Services(rc.nsName).Delete(rc.name, nil)) framework.ExpectNoError(framework.DeleteResourceAndPods(rc.clientSet, rc.internalClientset, api.Kind("ReplicationController"), rc.nsName, rc.controllerName)) framework.ExpectNoError(rc.clientSet.CoreV1().Services(rc.nsName).Delete(rc.controllerName, nil)) } -func kindOf(kind string) (schema.GroupKind, error) { - switch kind { - case KindRC: - return api.Kind(kind), nil - case KindReplicaSet: - return extensionsinternal.Kind(kind), nil - case KindDeployment: - return extensionsinternal.Kind(kind), nil - default: - return schema.GroupKind{}, fmt.Errorf("Unsupported kind: %v", kind) - } -} - -func runServiceAndWorkloadForResourceConsumer(c clientset.Interface, internalClient internalclientset.Interface, ns, name, kind string, replicas int, cpuLimitMillis, memLimitMb int64) { +func runServiceAndWorkloadForResourceConsumer(c clientset.Interface, internalClient internalclientset.Interface, ns, name string, kind schema.GroupVersionKind, replicas int, cpuLimitMillis, memLimitMb int64) { By(fmt.Sprintf("Running consuming RC %s via %s with %v replicas", name, kind, replicas)) _, err := c.CoreV1().Services(ns).Create(&v1.Service{ ObjectMeta: metav1.ObjectMeta{ @@ -521,8 +506,9 @@ func CreateCPUHorizontalPodAutoscaler(rc *ResourceConsumer, cpu, minReplicas, ma }, Spec: autoscalingv1.HorizontalPodAutoscalerSpec{ ScaleTargetRef: autoscalingv1.CrossVersionObjectReference{ - Kind: rc.kind, - Name: rc.name, + APIVersion: rc.kind.GroupVersion().String(), + Kind: rc.kind.Kind, + Name: rc.name, }, MinReplicas: &minReplicas, MaxReplicas: maxRepl, From 2c9fc432947bedb2fffc12faf7fc0ee1d0ceffd9 Mon Sep 17 00:00:00 2001 From: Solly Ross Date: Fri, 27 Oct 2017 17:51:05 -0400 Subject: [PATCH 2/2] [client-go] Add apps.Scale support to Scale client apps/v1betaX inadventertently contains its own variant of Scale. In order to support scaling Deployments, ReplicaSets, etc, we need to support these versions of Scale as well. --- hack/.golint_failures | 4 + staging/src/k8s.io/client-go/scale/BUILD | 4 + .../src/k8s.io/client-go/scale/client_test.go | 41 ++++++- .../src/k8s.io/client-go/scale/scheme/BUILD | 3 + .../client-go/scale/scheme/appsint/BUILD | 31 +++++ .../client-go/scale/scheme/appsint/doc.go | 22 ++++ .../scale/scheme/appsint/register.go | 53 +++++++++ .../client-go/scale/scheme/appsv1beta1/BUILD | 35 ++++++ .../scale/scheme/appsv1beta1/conversion.go | 87 ++++++++++++++ .../client-go/scale/scheme/appsv1beta1/doc.go | 20 ++++ .../scale/scheme/appsv1beta1/register.go | 45 +++++++ .../appsv1beta1/zz_generated.conversion.go | 110 ++++++++++++++++++ .../client-go/scale/scheme/appsv1beta2/BUILD | 35 ++++++ .../scale/scheme/appsv1beta2/conversion.go | 87 ++++++++++++++ .../client-go/scale/scheme/appsv1beta2/doc.go | 20 ++++ .../scale/scheme/appsv1beta2/register.go | 45 +++++++ .../appsv1beta2/zz_generated.conversion.go | 110 ++++++++++++++++++ staging/src/k8s.io/client-go/scale/util.go | 8 ++ test/e2e/framework/BUILD | 1 + test/e2e/framework/util.go | 9 +- 20 files changed, 764 insertions(+), 6 deletions(-) create mode 100644 staging/src/k8s.io/client-go/scale/scheme/appsint/BUILD create mode 100644 staging/src/k8s.io/client-go/scale/scheme/appsint/doc.go create mode 100644 staging/src/k8s.io/client-go/scale/scheme/appsint/register.go create mode 100644 staging/src/k8s.io/client-go/scale/scheme/appsv1beta1/BUILD create mode 100644 staging/src/k8s.io/client-go/scale/scheme/appsv1beta1/conversion.go create mode 100644 staging/src/k8s.io/client-go/scale/scheme/appsv1beta1/doc.go create mode 100644 staging/src/k8s.io/client-go/scale/scheme/appsv1beta1/register.go create mode 100644 staging/src/k8s.io/client-go/scale/scheme/appsv1beta1/zz_generated.conversion.go create mode 100644 staging/src/k8s.io/client-go/scale/scheme/appsv1beta2/BUILD create mode 100644 staging/src/k8s.io/client-go/scale/scheme/appsv1beta2/conversion.go create mode 100644 staging/src/k8s.io/client-go/scale/scheme/appsv1beta2/doc.go create mode 100644 staging/src/k8s.io/client-go/scale/scheme/appsv1beta2/register.go create mode 100644 staging/src/k8s.io/client-go/scale/scheme/appsv1beta2/zz_generated.conversion.go diff --git a/hack/.golint_failures b/hack/.golint_failures index ccec46adc43..2bff7bb3a6b 100644 --- a/hack/.golint_failures +++ b/hack/.golint_failures @@ -665,9 +665,13 @@ staging/src/k8s.io/client-go/rest/fake staging/src/k8s.io/client-go/scale staging/src/k8s.io/client-go/scale/fake staging/src/k8s.io/client-go/scale/scheme +staging/src/k8s.io/client-go/scale/scheme/appsint +staging/src/k8s.io/client-go/scale/scheme/appsv1beta1 +staging/src/k8s.io/client-go/scale/scheme/appsv1beta2 staging/src/k8s.io/client-go/scale/scheme/autoscalingv1 staging/src/k8s.io/client-go/scale/scheme/extensionsint staging/src/k8s.io/client-go/scale/scheme/extensionsv1beta1 +staging/src/k8s.io/client-go/scale/scheme/extensionsv1beta1 staging/src/k8s.io/client-go/testing staging/src/k8s.io/client-go/tools/cache staging/src/k8s.io/client-go/tools/cache/testing diff --git a/staging/src/k8s.io/client-go/scale/BUILD b/staging/src/k8s.io/client-go/scale/BUILD index e3b3cac1a11..4fb0a949e40 100644 --- a/staging/src/k8s.io/client-go/scale/BUILD +++ b/staging/src/k8s.io/client-go/scale/BUILD @@ -20,6 +20,9 @@ go_library( "//vendor/k8s.io/client-go/dynamic:go_default_library", "//vendor/k8s.io/client-go/rest:go_default_library", "//vendor/k8s.io/client-go/scale/scheme:go_default_library", + "//vendor/k8s.io/client-go/scale/scheme/appsint:go_default_library", + "//vendor/k8s.io/client-go/scale/scheme/appsv1beta1:go_default_library", + "//vendor/k8s.io/client-go/scale/scheme/appsv1beta2:go_default_library", "//vendor/k8s.io/client-go/scale/scheme/autoscalingv1:go_default_library", "//vendor/k8s.io/client-go/scale/scheme/extensionsint:go_default_library", "//vendor/k8s.io/client-go/scale/scheme/extensionsv1beta1:go_default_library", @@ -36,6 +39,7 @@ go_test( library = ":go_default_library", deps = [ "//vendor/github.com/stretchr/testify/assert:go_default_library", + "//vendor/k8s.io/api/apps/v1beta1:go_default_library", "//vendor/k8s.io/api/apps/v1beta2:go_default_library", "//vendor/k8s.io/api/autoscaling/v1:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", diff --git a/staging/src/k8s.io/client-go/scale/client_test.go b/staging/src/k8s.io/client-go/scale/client_test.go index a10429c0d36..f4f2af3d68c 100644 --- a/staging/src/k8s.io/client-go/scale/client_test.go +++ b/staging/src/k8s.io/client-go/scale/client_test.go @@ -35,6 +35,7 @@ import ( fakerest "k8s.io/client-go/rest/fake" "github.com/stretchr/testify/assert" + appsv1beta1 "k8s.io/api/apps/v1beta1" appsv1beta2 "k8s.io/api/apps/v1beta2" autoscalingv1 "k8s.io/api/autoscaling/v1" corev1 "k8s.io/api/core/v1" @@ -75,7 +76,14 @@ func fakeScaleClient(t *testing.T) (ScalesGetter, []schema.GroupResource) { GroupVersion: appsv1beta2.SchemeGroupVersion.String(), APIResources: []metav1.APIResource{ {Name: "deployments", Namespaced: true, Kind: "Deployment"}, - {Name: "deployments/scale", Namespaced: true, Kind: "Scale", Group: "autoscaling", Version: "v1"}, + {Name: "deployments/scale", Namespaced: true, Kind: "Scale", Group: "apps", Version: "v1beta2"}, + }, + }, + { + GroupVersion: appsv1beta1.SchemeGroupVersion.String(), + APIResources: []metav1.APIResource{ + {Name: "statefulsets", Namespaced: true, Kind: "StatefulSet"}, + {Name: "statefulsets/scale", Namespaced: true, Kind: "Scale", Group: "apps", Version: "v1beta1"}, }, }, // test a resource that doesn't exist anywere to make sure we're not accidentally depending @@ -123,11 +131,40 @@ func fakeScaleClient(t *testing.T) (ScalesGetter, []schema.GroupResource) { TargetSelector: "foo=bar", }, } + appsV1beta2Scale := &appsv1beta2.Scale{ + TypeMeta: metav1.TypeMeta{ + Kind: "Scale", + APIVersion: appsv1beta2.SchemeGroupVersion.String(), + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "foo", + }, + Spec: appsv1beta2.ScaleSpec{Replicas: 10}, + Status: appsv1beta2.ScaleStatus{ + Replicas: 10, + TargetSelector: "foo=bar", + }, + } + appsV1beta1Scale := &appsv1beta1.Scale{ + TypeMeta: metav1.TypeMeta{ + Kind: "Scale", + APIVersion: appsv1beta1.SchemeGroupVersion.String(), + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "foo", + }, + Spec: appsv1beta1.ScaleSpec{Replicas: 10}, + Status: appsv1beta1.ScaleStatus{ + Replicas: 10, + TargetSelector: "foo=bar", + }, + } resourcePaths := map[string]runtime.Object{ "/api/v1/namespaces/default/replicationcontrollers/foo/scale": autoscalingScale, "/apis/extensions/v1beta1/namespaces/default/replicasets/foo/scale": extScale, - "/apis/apps/v1beta2/namespaces/default/deployments/foo/scale": autoscalingScale, + "/apis/apps/v1beta1/namespaces/default/statefulsets/foo/scale": appsV1beta1Scale, + "/apis/apps/v1beta2/namespaces/default/deployments/foo/scale": appsV1beta2Scale, "/apis/cheese.testing.k8s.io/v27alpha15/namespaces/default/cheddars/foo/scale": extScale, } diff --git a/staging/src/k8s.io/client-go/scale/scheme/BUILD b/staging/src/k8s.io/client-go/scale/scheme/BUILD index effa9141927..8537aeb6ff2 100644 --- a/staging/src/k8s.io/client-go/scale/scheme/BUILD +++ b/staging/src/k8s.io/client-go/scale/scheme/BUILD @@ -30,6 +30,9 @@ filegroup( name = "all-srcs", srcs = [ ":package-srcs", + "//staging/src/k8s.io/client-go/scale/scheme/appsint:all-srcs", + "//staging/src/k8s.io/client-go/scale/scheme/appsv1beta1:all-srcs", + "//staging/src/k8s.io/client-go/scale/scheme/appsv1beta2:all-srcs", "//staging/src/k8s.io/client-go/scale/scheme/autoscalingv1:all-srcs", "//staging/src/k8s.io/client-go/scale/scheme/extensionsint:all-srcs", "//staging/src/k8s.io/client-go/scale/scheme/extensionsv1beta1:all-srcs", diff --git a/staging/src/k8s.io/client-go/scale/scheme/appsint/BUILD b/staging/src/k8s.io/client-go/scale/scheme/appsint/BUILD new file mode 100644 index 00000000000..2fef63f0e05 --- /dev/null +++ b/staging/src/k8s.io/client-go/scale/scheme/appsint/BUILD @@ -0,0 +1,31 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "doc.go", + "register.go", + ], + importpath = "k8s.io/client-go/scale/scheme/appsint", + visibility = ["//visibility:public"], + deps = [ + "//vendor/k8s.io/api/apps/v1beta2:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//vendor/k8s.io/client-go/scale/scheme:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/staging/src/k8s.io/client-go/scale/scheme/appsint/doc.go b/staging/src/k8s.io/client-go/scale/scheme/appsint/doc.go new file mode 100644 index 00000000000..5b1d6841c4c --- /dev/null +++ b/staging/src/k8s.io/client-go/scale/scheme/appsint/doc.go @@ -0,0 +1,22 @@ +/* +Copyright 2017 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 appsint contains the necessary scaffolding of the +// internal version of extensions as required by conversion logic. +// It doesn't have any of its own types -- it's just necessary to +// get the expected behavoir out of runtime.Scheme.ConvertToVersion +// and associated methods. +package appsint diff --git a/staging/src/k8s.io/client-go/scale/scheme/appsint/register.go b/staging/src/k8s.io/client-go/scale/scheme/appsint/register.go new file mode 100644 index 00000000000..bbeaedac549 --- /dev/null +++ b/staging/src/k8s.io/client-go/scale/scheme/appsint/register.go @@ -0,0 +1,53 @@ +/* +Copyright 2016 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 appsint + +import ( + appsv1beta2 "k8s.io/api/apps/v1beta2" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + scalescheme "k8s.io/client-go/scale/scheme" +) + +// GroupName is the group name use in this package +const GroupName = appsv1beta2.GroupName + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} + +// Kind takes an unqualified kind and returns a Group qualified GroupKind +func Kind(kind string) schema.GroupKind { + return SchemeGroupVersion.WithKind(kind).GroupKind() +} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) + +// Adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &scalescheme.Scale{}, + ) + return nil +} diff --git a/staging/src/k8s.io/client-go/scale/scheme/appsv1beta1/BUILD b/staging/src/k8s.io/client-go/scale/scheme/appsv1beta1/BUILD new file mode 100644 index 00000000000..05530e300b2 --- /dev/null +++ b/staging/src/k8s.io/client-go/scale/scheme/appsv1beta1/BUILD @@ -0,0 +1,35 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "conversion.go", + "doc.go", + "register.go", + "zz_generated.conversion.go", + ], + importpath = "k8s.io/client-go/scale/scheme/appsv1beta1", + visibility = ["//visibility:public"], + deps = [ + "//vendor/k8s.io/api/apps/v1beta1:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/conversion:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//vendor/k8s.io/client-go/scale/scheme:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/staging/src/k8s.io/client-go/scale/scheme/appsv1beta1/conversion.go b/staging/src/k8s.io/client-go/scale/scheme/appsv1beta1/conversion.go new file mode 100644 index 00000000000..af062b3c635 --- /dev/null +++ b/staging/src/k8s.io/client-go/scale/scheme/appsv1beta1/conversion.go @@ -0,0 +1,87 @@ +/* +Copyright 2017 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 appsv1beta1 + +import ( + "fmt" + + v1beta1 "k8s.io/api/apps/v1beta1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/conversion" + "k8s.io/apimachinery/pkg/runtime" + scheme "k8s.io/client-go/scale/scheme" +) + +// addConversions registers conversions between the internal version +// of Scale and supported external versions of Scale. +func addConversionFuncs(scheme *runtime.Scheme) error { + err := scheme.AddConversionFuncs( + Convert_scheme_ScaleStatus_To_v1beta1_ScaleStatus, + Convert_v1beta1_ScaleStatus_To_scheme_ScaleStatus, + ) + if err != nil { + return err + } + + return nil +} +func Convert_scheme_ScaleStatus_To_v1beta1_ScaleStatus(in *scheme.ScaleStatus, out *v1beta1.ScaleStatus, s conversion.Scope) error { + out.Replicas = in.Replicas + out.Selector = nil + out.TargetSelector = "" + if in.Selector != nil { + if in.Selector.MatchExpressions == nil || len(in.Selector.MatchExpressions) == 0 { + out.Selector = in.Selector.MatchLabels + } + + selector, err := metav1.LabelSelectorAsSelector(in.Selector) + if err != nil { + return fmt.Errorf("invalid label selector: %v", err) + } + out.TargetSelector = selector.String() + } + + return nil +} + +func Convert_v1beta1_ScaleStatus_To_scheme_ScaleStatus(in *v1beta1.ScaleStatus, out *scheme.ScaleStatus, s conversion.Scope) error { + out.Replicas = in.Replicas + + // Normally when 2 fields map to the same internal value we favor the old field, since + // old clients can't be expected to know about new fields but clients that know about the + // new field can be expected to know about the old field (though that's not quite true, due + // to kubectl apply). However, these fields are readonly, so any non-nil value should work. + if in.TargetSelector != "" { + labelSelector, err := metav1.ParseToLabelSelector(in.TargetSelector) + if err != nil { + out.Selector = nil + return fmt.Errorf("failed to parse target selector: %v", err) + } + out.Selector = labelSelector + } else if in.Selector != nil { + out.Selector = new(metav1.LabelSelector) + selector := make(map[string]string) + for key, val := range in.Selector { + selector[key] = val + } + out.Selector.MatchLabels = selector + } else { + out.Selector = nil + } + + return nil +} diff --git a/staging/src/k8s.io/client-go/scale/scheme/appsv1beta1/doc.go b/staging/src/k8s.io/client-go/scale/scheme/appsv1beta1/doc.go new file mode 100644 index 00000000000..e229af3b8fc --- /dev/null +++ b/staging/src/k8s.io/client-go/scale/scheme/appsv1beta1/doc.go @@ -0,0 +1,20 @@ +/* +Copyright 2017 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. +*/ + +// +k8s:conversion-gen=k8s.io/kubernetes/vendor/k8s.io/client-go/scale/scheme +// +k8s:conversion-gen-external-types=../../../../../k8s.io/api/apps/v1beta1 + +package appsv1beta1 // import "k8s.io/client-go/scale/scheme/appsv1beta1" diff --git a/staging/src/k8s.io/client-go/scale/scheme/appsv1beta1/register.go b/staging/src/k8s.io/client-go/scale/scheme/appsv1beta1/register.go new file mode 100644 index 00000000000..a684f2d535b --- /dev/null +++ b/staging/src/k8s.io/client-go/scale/scheme/appsv1beta1/register.go @@ -0,0 +1,45 @@ +/* +Copyright 2017 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 appsv1beta1 + +import ( + appsapiv1beta1 "k8s.io/api/apps/v1beta1" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +// GroupName is the group name use in this package +const GroupName = appsapiv1beta1.GroupName + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1beta1"} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + localSchemeBuilder = &appsapiv1beta1.SchemeBuilder + AddToScheme = localSchemeBuilder.AddToScheme +) + +func init() { + // We only register manually written functions here. The registration of the + // generated functions takes place in the generated files. The separation + // makes the code compile even when the generated files are missing. + localSchemeBuilder.Register(addConversionFuncs) +} diff --git a/staging/src/k8s.io/client-go/scale/scheme/appsv1beta1/zz_generated.conversion.go b/staging/src/k8s.io/client-go/scale/scheme/appsv1beta1/zz_generated.conversion.go new file mode 100644 index 00000000000..93e0e61640d --- /dev/null +++ b/staging/src/k8s.io/client-go/scale/scheme/appsv1beta1/zz_generated.conversion.go @@ -0,0 +1,110 @@ +// +build !ignore_autogenerated + +/* +Copyright 2017 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. +*/ + +// This file was autogenerated by conversion-gen. Do not edit it manually! + +package appsv1beta1 + +import ( + v1beta1 "k8s.io/api/apps/v1beta1" + conversion "k8s.io/apimachinery/pkg/conversion" + runtime "k8s.io/apimachinery/pkg/runtime" + scheme "k8s.io/client-go/scale/scheme" +) + +func init() { + localSchemeBuilder.Register(RegisterConversions) +} + +// RegisterConversions adds conversion functions to the given scheme. +// Public to allow building arbitrary schemes. +func RegisterConversions(scheme *runtime.Scheme) error { + return scheme.AddGeneratedConversionFuncs( + Convert_v1beta1_Scale_To_scheme_Scale, + Convert_scheme_Scale_To_v1beta1_Scale, + Convert_v1beta1_ScaleSpec_To_scheme_ScaleSpec, + Convert_scheme_ScaleSpec_To_v1beta1_ScaleSpec, + Convert_v1beta1_ScaleStatus_To_scheme_ScaleStatus, + Convert_scheme_ScaleStatus_To_v1beta1_ScaleStatus, + ) +} + +func autoConvert_v1beta1_Scale_To_scheme_Scale(in *v1beta1.Scale, out *scheme.Scale, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + if err := Convert_v1beta1_ScaleSpec_To_scheme_ScaleSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + if err := Convert_v1beta1_ScaleStatus_To_scheme_ScaleStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +// Convert_v1beta1_Scale_To_scheme_Scale is an autogenerated conversion function. +func Convert_v1beta1_Scale_To_scheme_Scale(in *v1beta1.Scale, out *scheme.Scale, s conversion.Scope) error { + return autoConvert_v1beta1_Scale_To_scheme_Scale(in, out, s) +} + +func autoConvert_scheme_Scale_To_v1beta1_Scale(in *scheme.Scale, out *v1beta1.Scale, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + if err := Convert_scheme_ScaleSpec_To_v1beta1_ScaleSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + if err := Convert_scheme_ScaleStatus_To_v1beta1_ScaleStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +// Convert_scheme_Scale_To_v1beta1_Scale is an autogenerated conversion function. +func Convert_scheme_Scale_To_v1beta1_Scale(in *scheme.Scale, out *v1beta1.Scale, s conversion.Scope) error { + return autoConvert_scheme_Scale_To_v1beta1_Scale(in, out, s) +} + +func autoConvert_v1beta1_ScaleSpec_To_scheme_ScaleSpec(in *v1beta1.ScaleSpec, out *scheme.ScaleSpec, s conversion.Scope) error { + out.Replicas = in.Replicas + return nil +} + +// Convert_v1beta1_ScaleSpec_To_scheme_ScaleSpec is an autogenerated conversion function. +func Convert_v1beta1_ScaleSpec_To_scheme_ScaleSpec(in *v1beta1.ScaleSpec, out *scheme.ScaleSpec, s conversion.Scope) error { + return autoConvert_v1beta1_ScaleSpec_To_scheme_ScaleSpec(in, out, s) +} + +func autoConvert_scheme_ScaleSpec_To_v1beta1_ScaleSpec(in *scheme.ScaleSpec, out *v1beta1.ScaleSpec, s conversion.Scope) error { + out.Replicas = in.Replicas + return nil +} + +// Convert_scheme_ScaleSpec_To_v1beta1_ScaleSpec is an autogenerated conversion function. +func Convert_scheme_ScaleSpec_To_v1beta1_ScaleSpec(in *scheme.ScaleSpec, out *v1beta1.ScaleSpec, s conversion.Scope) error { + return autoConvert_scheme_ScaleSpec_To_v1beta1_ScaleSpec(in, out, s) +} + +func autoConvert_v1beta1_ScaleStatus_To_scheme_ScaleStatus(in *v1beta1.ScaleStatus, out *scheme.ScaleStatus, s conversion.Scope) error { + out.Replicas = in.Replicas + // WARNING: in.Selector requires manual conversion: inconvertible types (map[string]string vs *k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector) + // WARNING: in.TargetSelector requires manual conversion: does not exist in peer-type + return nil +} + +func autoConvert_scheme_ScaleStatus_To_v1beta1_ScaleStatus(in *scheme.ScaleStatus, out *v1beta1.ScaleStatus, s conversion.Scope) error { + out.Replicas = in.Replicas + // WARNING: in.Selector requires manual conversion: inconvertible types (*k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector vs map[string]string) + return nil +} diff --git a/staging/src/k8s.io/client-go/scale/scheme/appsv1beta2/BUILD b/staging/src/k8s.io/client-go/scale/scheme/appsv1beta2/BUILD new file mode 100644 index 00000000000..7e52bc060b6 --- /dev/null +++ b/staging/src/k8s.io/client-go/scale/scheme/appsv1beta2/BUILD @@ -0,0 +1,35 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "conversion.go", + "doc.go", + "register.go", + "zz_generated.conversion.go", + ], + importpath = "k8s.io/client-go/scale/scheme/appsv1beta2", + visibility = ["//visibility:public"], + deps = [ + "//vendor/k8s.io/api/apps/v1beta2:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/conversion:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//vendor/k8s.io/client-go/scale/scheme:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/staging/src/k8s.io/client-go/scale/scheme/appsv1beta2/conversion.go b/staging/src/k8s.io/client-go/scale/scheme/appsv1beta2/conversion.go new file mode 100644 index 00000000000..f07de6bdae0 --- /dev/null +++ b/staging/src/k8s.io/client-go/scale/scheme/appsv1beta2/conversion.go @@ -0,0 +1,87 @@ +/* +Copyright 2017 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 appsv1beta2 + +import ( + "fmt" + + v1beta2 "k8s.io/api/apps/v1beta2" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/conversion" + "k8s.io/apimachinery/pkg/runtime" + scheme "k8s.io/client-go/scale/scheme" +) + +// addConversions registers conversions between the internal version +// of Scale and supported external versions of Scale. +func addConversionFuncs(scheme *runtime.Scheme) error { + err := scheme.AddConversionFuncs( + Convert_scheme_ScaleStatus_To_v1beta2_ScaleStatus, + Convert_v1beta2_ScaleStatus_To_scheme_ScaleStatus, + ) + if err != nil { + return err + } + + return nil +} +func Convert_scheme_ScaleStatus_To_v1beta2_ScaleStatus(in *scheme.ScaleStatus, out *v1beta2.ScaleStatus, s conversion.Scope) error { + out.Replicas = in.Replicas + out.Selector = nil + out.TargetSelector = "" + if in.Selector != nil { + if in.Selector.MatchExpressions == nil || len(in.Selector.MatchExpressions) == 0 { + out.Selector = in.Selector.MatchLabels + } + + selector, err := metav1.LabelSelectorAsSelector(in.Selector) + if err != nil { + return fmt.Errorf("invalid label selector: %v", err) + } + out.TargetSelector = selector.String() + } + + return nil +} + +func Convert_v1beta2_ScaleStatus_To_scheme_ScaleStatus(in *v1beta2.ScaleStatus, out *scheme.ScaleStatus, s conversion.Scope) error { + out.Replicas = in.Replicas + + // Normally when 2 fields map to the same internal value we favor the old field, since + // old clients can't be expected to know about new fields but clients that know about the + // new field can be expected to know about the old field (though that's not quite true, due + // to kubectl apply). However, these fields are readonly, so any non-nil value should work. + if in.TargetSelector != "" { + labelSelector, err := metav1.ParseToLabelSelector(in.TargetSelector) + if err != nil { + out.Selector = nil + return fmt.Errorf("failed to parse target selector: %v", err) + } + out.Selector = labelSelector + } else if in.Selector != nil { + out.Selector = new(metav1.LabelSelector) + selector := make(map[string]string) + for key, val := range in.Selector { + selector[key] = val + } + out.Selector.MatchLabels = selector + } else { + out.Selector = nil + } + + return nil +} diff --git a/staging/src/k8s.io/client-go/scale/scheme/appsv1beta2/doc.go b/staging/src/k8s.io/client-go/scale/scheme/appsv1beta2/doc.go new file mode 100644 index 00000000000..40b7a89b540 --- /dev/null +++ b/staging/src/k8s.io/client-go/scale/scheme/appsv1beta2/doc.go @@ -0,0 +1,20 @@ +/* +Copyright 2017 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. +*/ + +// +k8s:conversion-gen=k8s.io/kubernetes/vendor/k8s.io/client-go/scale/scheme +// +k8s:conversion-gen-external-types=../../../../../k8s.io/api/apps/v1beta2 + +package appsv1beta2 // import "k8s.io/client-go/scale/scheme/appsv1beta2" diff --git a/staging/src/k8s.io/client-go/scale/scheme/appsv1beta2/register.go b/staging/src/k8s.io/client-go/scale/scheme/appsv1beta2/register.go new file mode 100644 index 00000000000..88de0893293 --- /dev/null +++ b/staging/src/k8s.io/client-go/scale/scheme/appsv1beta2/register.go @@ -0,0 +1,45 @@ +/* +Copyright 2017 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 appsv1beta2 + +import ( + appsapiv1beta2 "k8s.io/api/apps/v1beta2" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +// GroupName is the group name use in this package +const GroupName = appsapiv1beta2.GroupName + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1beta2"} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + localSchemeBuilder = &appsapiv1beta2.SchemeBuilder + AddToScheme = localSchemeBuilder.AddToScheme +) + +func init() { + // We only register manually written functions here. The registration of the + // generated functions takes place in the generated files. The separation + // makes the code compile even when the generated files are missing. + localSchemeBuilder.Register(addConversionFuncs) +} diff --git a/staging/src/k8s.io/client-go/scale/scheme/appsv1beta2/zz_generated.conversion.go b/staging/src/k8s.io/client-go/scale/scheme/appsv1beta2/zz_generated.conversion.go new file mode 100644 index 00000000000..410a0d90c5e --- /dev/null +++ b/staging/src/k8s.io/client-go/scale/scheme/appsv1beta2/zz_generated.conversion.go @@ -0,0 +1,110 @@ +// +build !ignore_autogenerated + +/* +Copyright 2017 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. +*/ + +// This file was autogenerated by conversion-gen. Do not edit it manually! + +package appsv1beta2 + +import ( + v1beta2 "k8s.io/api/apps/v1beta2" + conversion "k8s.io/apimachinery/pkg/conversion" + runtime "k8s.io/apimachinery/pkg/runtime" + scheme "k8s.io/client-go/scale/scheme" +) + +func init() { + localSchemeBuilder.Register(RegisterConversions) +} + +// RegisterConversions adds conversion functions to the given scheme. +// Public to allow building arbitrary schemes. +func RegisterConversions(scheme *runtime.Scheme) error { + return scheme.AddGeneratedConversionFuncs( + Convert_v1beta2_Scale_To_scheme_Scale, + Convert_scheme_Scale_To_v1beta2_Scale, + Convert_v1beta2_ScaleSpec_To_scheme_ScaleSpec, + Convert_scheme_ScaleSpec_To_v1beta2_ScaleSpec, + Convert_v1beta2_ScaleStatus_To_scheme_ScaleStatus, + Convert_scheme_ScaleStatus_To_v1beta2_ScaleStatus, + ) +} + +func autoConvert_v1beta2_Scale_To_scheme_Scale(in *v1beta2.Scale, out *scheme.Scale, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + if err := Convert_v1beta2_ScaleSpec_To_scheme_ScaleSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + if err := Convert_v1beta2_ScaleStatus_To_scheme_ScaleStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +// Convert_v1beta2_Scale_To_scheme_Scale is an autogenerated conversion function. +func Convert_v1beta2_Scale_To_scheme_Scale(in *v1beta2.Scale, out *scheme.Scale, s conversion.Scope) error { + return autoConvert_v1beta2_Scale_To_scheme_Scale(in, out, s) +} + +func autoConvert_scheme_Scale_To_v1beta2_Scale(in *scheme.Scale, out *v1beta2.Scale, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + if err := Convert_scheme_ScaleSpec_To_v1beta2_ScaleSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + if err := Convert_scheme_ScaleStatus_To_v1beta2_ScaleStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +// Convert_scheme_Scale_To_v1beta2_Scale is an autogenerated conversion function. +func Convert_scheme_Scale_To_v1beta2_Scale(in *scheme.Scale, out *v1beta2.Scale, s conversion.Scope) error { + return autoConvert_scheme_Scale_To_v1beta2_Scale(in, out, s) +} + +func autoConvert_v1beta2_ScaleSpec_To_scheme_ScaleSpec(in *v1beta2.ScaleSpec, out *scheme.ScaleSpec, s conversion.Scope) error { + out.Replicas = in.Replicas + return nil +} + +// Convert_v1beta2_ScaleSpec_To_scheme_ScaleSpec is an autogenerated conversion function. +func Convert_v1beta2_ScaleSpec_To_scheme_ScaleSpec(in *v1beta2.ScaleSpec, out *scheme.ScaleSpec, s conversion.Scope) error { + return autoConvert_v1beta2_ScaleSpec_To_scheme_ScaleSpec(in, out, s) +} + +func autoConvert_scheme_ScaleSpec_To_v1beta2_ScaleSpec(in *scheme.ScaleSpec, out *v1beta2.ScaleSpec, s conversion.Scope) error { + out.Replicas = in.Replicas + return nil +} + +// Convert_scheme_ScaleSpec_To_v1beta2_ScaleSpec is an autogenerated conversion function. +func Convert_scheme_ScaleSpec_To_v1beta2_ScaleSpec(in *scheme.ScaleSpec, out *v1beta2.ScaleSpec, s conversion.Scope) error { + return autoConvert_scheme_ScaleSpec_To_v1beta2_ScaleSpec(in, out, s) +} + +func autoConvert_v1beta2_ScaleStatus_To_scheme_ScaleStatus(in *v1beta2.ScaleStatus, out *scheme.ScaleStatus, s conversion.Scope) error { + out.Replicas = in.Replicas + // WARNING: in.Selector requires manual conversion: inconvertible types (map[string]string vs *k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector) + // WARNING: in.TargetSelector requires manual conversion: does not exist in peer-type + return nil +} + +func autoConvert_scheme_ScaleStatus_To_v1beta2_ScaleStatus(in *scheme.ScaleStatus, out *v1beta2.ScaleStatus, s conversion.Scope) error { + out.Replicas = in.Replicas + // WARNING: in.Selector requires manual conversion: inconvertible types (*k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector vs map[string]string) + return nil +} diff --git a/staging/src/k8s.io/client-go/scale/util.go b/staging/src/k8s.io/client-go/scale/util.go index f5de4bc9a33..9eb10853605 100644 --- a/staging/src/k8s.io/client-go/scale/util.go +++ b/staging/src/k8s.io/client-go/scale/util.go @@ -25,6 +25,9 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/discovery" scalescheme "k8s.io/client-go/scale/scheme" + scaleappsint "k8s.io/client-go/scale/scheme/appsint" + scaleappsv1beta1 "k8s.io/client-go/scale/scheme/appsv1beta1" + scaleappsv1beta2 "k8s.io/client-go/scale/scheme/appsv1beta2" scaleautoscaling "k8s.io/client-go/scale/scheme/autoscalingv1" scaleextint "k8s.io/client-go/scale/scheme/extensionsint" scaleext "k8s.io/client-go/scale/scheme/extensionsv1beta1" @@ -132,6 +135,9 @@ func NewScaleConverter() *ScaleConverter { scalescheme.AddToScheme(scheme) scaleext.AddToScheme(scheme) scaleextint.AddToScheme(scheme) + scaleappsint.AddToScheme(scheme) + scaleappsv1beta1.AddToScheme(scheme) + scaleappsv1beta2.AddToScheme(scheme) return &ScaleConverter{ scheme: scheme, @@ -139,6 +145,8 @@ func NewScaleConverter() *ScaleConverter { scalescheme.SchemeGroupVersion, schema.GroupKind{Group: scaleext.GroupName, Kind: "Scale"}, schema.GroupKind{Group: scaleautoscaling.GroupName, Kind: "Scale"}, + schema.GroupKind{Group: scaleappsv1beta1.GroupName, Kind: "Scale"}, + schema.GroupKind{Group: scaleappsv1beta2.GroupName, Kind: "Scale"}, ), } } diff --git a/test/e2e/framework/BUILD b/test/e2e/framework/BUILD index ec302bce8e6..dff97f4a521 100644 --- a/test/e2e/framework/BUILD +++ b/test/e2e/framework/BUILD @@ -46,6 +46,7 @@ go_library( "//pkg/api/testapi:go_default_library", "//pkg/api/v1/helper:go_default_library", "//pkg/api/v1/pod:go_default_library", + "//pkg/apis/apps:go_default_library", "//pkg/apis/batch:go_default_library", "//pkg/apis/extensions:go_default_library", "//pkg/client/clientset_generated/internalclientset:go_default_library", diff --git a/test/e2e/framework/util.go b/test/e2e/framework/util.go index 3fb3d09f0ce..63a5f43c922 100644 --- a/test/e2e/framework/util.go +++ b/test/e2e/framework/util.go @@ -78,6 +78,7 @@ import ( "k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/api/testapi" podutil "k8s.io/kubernetes/pkg/api/v1/pod" + appsinternal "k8s.io/kubernetes/pkg/apis/apps" batchinternal "k8s.io/kubernetes/pkg/apis/batch" extensionsinternal "k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" @@ -2833,9 +2834,9 @@ func getRuntimeObjectForKind(c clientset.Interface, kind schema.GroupKind, ns, n switch kind { case api.Kind("ReplicationController"): return c.CoreV1().ReplicationControllers(ns).Get(name, metav1.GetOptions{}) - case extensionsinternal.Kind("ReplicaSet"): + case extensionsinternal.Kind("ReplicaSet"), appsinternal.Kind("ReplicaSet"): return c.Extensions().ReplicaSets(ns).Get(name, metav1.GetOptions{}) - case extensionsinternal.Kind("Deployment"): + case extensionsinternal.Kind("Deployment"), appsinternal.Kind("Deployment"): return c.Extensions().Deployments(ns).Get(name, metav1.GetOptions{}) case extensionsinternal.Kind("DaemonSet"): return c.Extensions().DaemonSets(ns).Get(name, metav1.GetOptions{}) @@ -2850,9 +2851,9 @@ func deleteResource(c clientset.Interface, kind schema.GroupKind, ns, name strin switch kind { case api.Kind("ReplicationController"): return c.CoreV1().ReplicationControllers(ns).Delete(name, deleteOption) - case extensionsinternal.Kind("ReplicaSet"): + case extensionsinternal.Kind("ReplicaSet"), appsinternal.Kind("ReplicaSet"): return c.Extensions().ReplicaSets(ns).Delete(name, deleteOption) - case extensionsinternal.Kind("Deployment"): + case extensionsinternal.Kind("Deployment"), appsinternal.Kind("Deployment"): return c.Extensions().Deployments(ns).Delete(name, deleteOption) case extensionsinternal.Kind("DaemonSet"): return c.Extensions().DaemonSets(ns).Delete(name, deleteOption)