From 35468469ebe3e9ac72aaa21703264327751df93e Mon Sep 17 00:00:00 2001 From: ymqytw Date: Fri, 27 Oct 2017 14:50:29 -0700 Subject: [PATCH 1/2] create an instance of registry and scheme for kubectl --- pkg/kubectl/scheme/BUILD | 62 +++++++ pkg/kubectl/scheme/install.go | 307 ++++++++++++++++++++++++++++++++++ pkg/kubectl/scheme/scheme.go | 43 +++++ 3 files changed, 412 insertions(+) create mode 100644 pkg/kubectl/scheme/BUILD create mode 100644 pkg/kubectl/scheme/install.go create mode 100644 pkg/kubectl/scheme/scheme.go diff --git a/pkg/kubectl/scheme/BUILD b/pkg/kubectl/scheme/BUILD new file mode 100644 index 00000000000..d24b79b1b8d --- /dev/null +++ b/pkg/kubectl/scheme/BUILD @@ -0,0 +1,62 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "install.go", + "scheme.go", + ], + importpath = "k8s.io/kubernetes/pkg/kubectl/scheme", + visibility = ["//visibility:public"], + deps = [ + "//vendor/k8s.io/api/admission/v1alpha1:go_default_library", + "//vendor/k8s.io/api/admissionregistration/v1alpha1:go_default_library", + "//vendor/k8s.io/api/apps/v1: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/authentication/v1:go_default_library", + "//vendor/k8s.io/api/authentication/v1beta1:go_default_library", + "//vendor/k8s.io/api/authorization/v1:go_default_library", + "//vendor/k8s.io/api/authorization/v1beta1:go_default_library", + "//vendor/k8s.io/api/autoscaling/v1:go_default_library", + "//vendor/k8s.io/api/autoscaling/v2beta1:go_default_library", + "//vendor/k8s.io/api/batch/v1:go_default_library", + "//vendor/k8s.io/api/batch/v1beta1:go_default_library", + "//vendor/k8s.io/api/batch/v2alpha1:go_default_library", + "//vendor/k8s.io/api/certificates/v1beta1:go_default_library", + "//vendor/k8s.io/api/core/v1:go_default_library", + "//vendor/k8s.io/api/extensions/v1beta1:go_default_library", + "//vendor/k8s.io/api/imagepolicy/v1alpha1:go_default_library", + "//vendor/k8s.io/api/networking/v1:go_default_library", + "//vendor/k8s.io/api/policy/v1beta1:go_default_library", + "//vendor/k8s.io/api/rbac/v1:go_default_library", + "//vendor/k8s.io/api/rbac/v1alpha1:go_default_library", + "//vendor/k8s.io/api/rbac/v1beta1:go_default_library", + "//vendor/k8s.io/api/scheduling/v1alpha1:go_default_library", + "//vendor/k8s.io/api/settings/v1alpha1:go_default_library", + "//vendor/k8s.io/api/storage/v1:go_default_library", + "//vendor/k8s.io/api/storage/v1beta1:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/apimachinery/announced:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/apimachinery/registered:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1: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/apimachinery/pkg/runtime/serializer:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", + "//vendor/k8s.io/client-go/kubernetes/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/pkg/kubectl/scheme/install.go b/pkg/kubectl/scheme/install.go new file mode 100644 index 00000000000..dc08cdb9487 --- /dev/null +++ b/pkg/kubectl/scheme/install.go @@ -0,0 +1,307 @@ +/* +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 scheme + +import ( + admissionv1alpha1 "k8s.io/api/admission/v1alpha1" + admissionregistrationv1alpha1 "k8s.io/api/admissionregistration/v1alpha1" + appsv1 "k8s.io/api/apps/v1" + appsv1beta1 "k8s.io/api/apps/v1beta1" + appsv1beta2 "k8s.io/api/apps/v1beta2" + authenticationv1 "k8s.io/api/authentication/v1" + authenticationv1beta1 "k8s.io/api/authentication/v1beta1" + authorizationv1 "k8s.io/api/authorization/v1" + authorizationv1beta1 "k8s.io/api/authorization/v1beta1" + autoscalingv1 "k8s.io/api/autoscaling/v1" + autoscalingv2beta1 "k8s.io/api/autoscaling/v2beta1" + batchv1 "k8s.io/api/batch/v1" + batchv1beta1 "k8s.io/api/batch/v1beta1" + batchv2alpha1 "k8s.io/api/batch/v2alpha1" + certificatesv1beta1 "k8s.io/api/certificates/v1beta1" + corev1 "k8s.io/api/core/v1" + extensionsv1beta1 "k8s.io/api/extensions/v1beta1" + imagepolicyv1alpha1 "k8s.io/api/imagepolicy/v1alpha1" + networkingv1 "k8s.io/api/networking/v1" + policyv1beta1 "k8s.io/api/policy/v1beta1" + rbacv1 "k8s.io/api/rbac/v1" + rbacv1alpha1 "k8s.io/api/rbac/v1alpha1" + rbacv1beta1 "k8s.io/api/rbac/v1beta1" + schedulingv1alpha1 "k8s.io/api/scheduling/v1alpha1" + settingsv1alpha1 "k8s.io/api/settings/v1alpha1" + storagev1 "k8s.io/api/storage/v1" + storagev1beta1 "k8s.io/api/storage/v1beta1" + "k8s.io/apimachinery/pkg/apimachinery/announced" + "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/client-go/kubernetes/scheme" +) + +// Register all groups in the kubectl's registry, but no componentconfig group since it's not in k8s.io/api +// The code in this file mostly duplicate the install under k8s.io/kubernetes/pkg/api and k8s.io/kubernetes/pkg/apis, +// but does NOT register the internal types. +func init() { + // Register external types for Scheme + v1.AddToGroupVersion(Scheme, schema.GroupVersion{Version: "v1"}) + scheme.AddToScheme(Scheme) + + // Register external types for Registry + if err := announced.NewGroupMetaFactory( + &announced.GroupMetaFactoryArgs{ + GroupName: corev1.GroupName, + VersionPreferenceOrder: []string{corev1.SchemeGroupVersion.Version}, + RootScopedKinds: sets.NewString( + "Node", + "Namespace", + "PersistentVolume", + "ComponentStatus", + ), + IgnoredKinds: sets.NewString( + "ListOptions", + "DeleteOptions", + "Status", + "PodLogOptions", + "PodExecOptions", + "PodAttachOptions", + "PodPortForwardOptions", + "PodProxyOptions", + "NodeProxyOptions", + "ServiceProxyOptions", + "ThirdPartyResource", + "ThirdPartyResourceData", + "ThirdPartyResourceList", + ), + }, + announced.VersionToSchemeFunc{ + corev1.SchemeGroupVersion.Version: corev1.AddToScheme, + }, + ).Announce(GroupFactoryRegistry).RegisterAndEnable(Registry, Scheme); err != nil { + panic(err) + } + + if err := announced.NewGroupMetaFactory( + &announced.GroupMetaFactoryArgs{ + GroupName: admissionv1alpha1.GroupName, + VersionPreferenceOrder: []string{admissionv1alpha1.SchemeGroupVersion.Version}, + RootScopedKinds: sets.NewString("AdmissionReview"), + }, + announced.VersionToSchemeFunc{ + admissionv1alpha1.SchemeGroupVersion.Version: admissionv1alpha1.AddToScheme, + }, + ).Announce(GroupFactoryRegistry).RegisterAndEnable(Registry, Scheme); err != nil { + panic(err) + } + + if err := announced.NewGroupMetaFactory( + &announced.GroupMetaFactoryArgs{ + GroupName: admissionregistrationv1alpha1.GroupName, + RootScopedKinds: sets.NewString("InitializerConfiguration", "ExternalAdmissionHookConfiguration"), + VersionPreferenceOrder: []string{admissionregistrationv1alpha1.SchemeGroupVersion.Version}, + }, + announced.VersionToSchemeFunc{ + admissionregistrationv1alpha1.SchemeGroupVersion.Version: admissionregistrationv1alpha1.AddToScheme, + }, + ).Announce(GroupFactoryRegistry).RegisterAndEnable(Registry, Scheme); err != nil { + panic(err) + } + + if err := announced.NewGroupMetaFactory( + &announced.GroupMetaFactoryArgs{ + GroupName: appsv1.GroupName, + VersionPreferenceOrder: []string{appsv1beta1.SchemeGroupVersion.Version, appsv1beta2.SchemeGroupVersion.Version, appsv1.SchemeGroupVersion.Version}, + }, + announced.VersionToSchemeFunc{ + appsv1beta1.SchemeGroupVersion.Version: appsv1beta1.AddToScheme, + appsv1beta2.SchemeGroupVersion.Version: appsv1beta2.AddToScheme, + appsv1.SchemeGroupVersion.Version: appsv1.AddToScheme, + }, + ).Announce(GroupFactoryRegistry).RegisterAndEnable(Registry, Scheme); err != nil { + panic(err) + } + + if err := announced.NewGroupMetaFactory( + &announced.GroupMetaFactoryArgs{ + GroupName: authenticationv1beta1.GroupName, + VersionPreferenceOrder: []string{authenticationv1.SchemeGroupVersion.Version, authenticationv1beta1.SchemeGroupVersion.Version}, + RootScopedKinds: sets.NewString("TokenReview"), + }, + announced.VersionToSchemeFunc{ + authenticationv1beta1.SchemeGroupVersion.Version: authenticationv1beta1.AddToScheme, + authenticationv1.SchemeGroupVersion.Version: authenticationv1.AddToScheme, + }, + ).Announce(GroupFactoryRegistry).RegisterAndEnable(Registry, Scheme); err != nil { + panic(err) + } + + if err := announced.NewGroupMetaFactory( + &announced.GroupMetaFactoryArgs{ + GroupName: authorizationv1.GroupName, + VersionPreferenceOrder: []string{authorizationv1.SchemeGroupVersion.Version, authorizationv1beta1.SchemeGroupVersion.Version}, + RootScopedKinds: sets.NewString("SubjectAccessReview", "SelfSubjectAccessReview", "SelfSubjectRulesReview"), + }, + announced.VersionToSchemeFunc{ + authorizationv1beta1.SchemeGroupVersion.Version: authorizationv1beta1.AddToScheme, + authorizationv1.SchemeGroupVersion.Version: authorizationv1.AddToScheme, + }, + ).Announce(GroupFactoryRegistry).RegisterAndEnable(Registry, Scheme); err != nil { + panic(err) + } + + if err := announced.NewGroupMetaFactory( + &announced.GroupMetaFactoryArgs{ + GroupName: autoscalingv1.GroupName, + VersionPreferenceOrder: []string{autoscalingv1.SchemeGroupVersion.Version, autoscalingv2beta1.SchemeGroupVersion.Version}, + }, + announced.VersionToSchemeFunc{ + autoscalingv1.SchemeGroupVersion.Version: autoscalingv1.AddToScheme, + autoscalingv2beta1.SchemeGroupVersion.Version: autoscalingv2beta1.AddToScheme, + }, + ).Announce(GroupFactoryRegistry).RegisterAndEnable(Registry, Scheme); err != nil { + panic(err) + } + + if err := announced.NewGroupMetaFactory( + &announced.GroupMetaFactoryArgs{ + GroupName: batchv1.GroupName, + VersionPreferenceOrder: []string{batchv1.SchemeGroupVersion.Version, batchv1beta1.SchemeGroupVersion.Version, batchv2alpha1.SchemeGroupVersion.Version}, + }, + announced.VersionToSchemeFunc{ + batchv1.SchemeGroupVersion.Version: batchv1.AddToScheme, + batchv1beta1.SchemeGroupVersion.Version: batchv1beta1.AddToScheme, + batchv2alpha1.SchemeGroupVersion.Version: batchv2alpha1.AddToScheme, + }, + ).Announce(GroupFactoryRegistry).RegisterAndEnable(Registry, Scheme); err != nil { + panic(err) + } + + if err := announced.NewGroupMetaFactory( + &announced.GroupMetaFactoryArgs{ + GroupName: certificatesv1beta1.GroupName, + VersionPreferenceOrder: []string{certificatesv1beta1.SchemeGroupVersion.Version}, + RootScopedKinds: sets.NewString("CertificateSigningRequest"), + }, + announced.VersionToSchemeFunc{ + certificatesv1beta1.SchemeGroupVersion.Version: certificatesv1beta1.AddToScheme, + }, + ).Announce(GroupFactoryRegistry).RegisterAndEnable(Registry, Scheme); err != nil { + panic(err) + } + + if err := announced.NewGroupMetaFactory( + &announced.GroupMetaFactoryArgs{ + GroupName: extensionsv1beta1.GroupName, + VersionPreferenceOrder: []string{extensionsv1beta1.SchemeGroupVersion.Version}, + RootScopedKinds: sets.NewString("PodSecurityPolicy", "ThirdPartyResource"), + }, + announced.VersionToSchemeFunc{ + extensionsv1beta1.SchemeGroupVersion.Version: extensionsv1beta1.AddToScheme, + }, + ).Announce(GroupFactoryRegistry).RegisterAndEnable(Registry, Scheme); err != nil { + panic(err) + } + + if err := announced.NewGroupMetaFactory( + &announced.GroupMetaFactoryArgs{ + GroupName: imagepolicyv1alpha1.GroupName, + VersionPreferenceOrder: []string{imagepolicyv1alpha1.SchemeGroupVersion.Version}, + RootScopedKinds: sets.NewString("ImageReview"), + }, + announced.VersionToSchemeFunc{ + imagepolicyv1alpha1.SchemeGroupVersion.Version: imagepolicyv1alpha1.AddToScheme, + }, + ).Announce(GroupFactoryRegistry).RegisterAndEnable(Registry, Scheme); err != nil { + panic(err) + } + + if err := announced.NewGroupMetaFactory( + &announced.GroupMetaFactoryArgs{ + GroupName: networkingv1.GroupName, + VersionPreferenceOrder: []string{networkingv1.SchemeGroupVersion.Version}, + }, + announced.VersionToSchemeFunc{ + networkingv1.SchemeGroupVersion.Version: networkingv1.AddToScheme, + }, + ).Announce(GroupFactoryRegistry).RegisterAndEnable(Registry, Scheme); err != nil { + panic(err) + } + + if err := announced.NewGroupMetaFactory( + &announced.GroupMetaFactoryArgs{ + GroupName: policyv1beta1.GroupName, + VersionPreferenceOrder: []string{policyv1beta1.SchemeGroupVersion.Version}, + }, + announced.VersionToSchemeFunc{ + policyv1beta1.SchemeGroupVersion.Version: policyv1beta1.AddToScheme, + }, + ).Announce(GroupFactoryRegistry).RegisterAndEnable(Registry, Scheme); err != nil { + panic(err) + } + + if err := announced.NewGroupMetaFactory( + &announced.GroupMetaFactoryArgs{ + GroupName: rbacv1.GroupName, + VersionPreferenceOrder: []string{rbacv1.SchemeGroupVersion.Version, rbacv1beta1.SchemeGroupVersion.Version, rbacv1alpha1.SchemeGroupVersion.Version}, + RootScopedKinds: sets.NewString("ClusterRole", "ClusterRoleBinding"), + }, + announced.VersionToSchemeFunc{ + rbacv1.SchemeGroupVersion.Version: rbacv1.AddToScheme, + rbacv1beta1.SchemeGroupVersion.Version: rbacv1beta1.AddToScheme, + rbacv1alpha1.SchemeGroupVersion.Version: rbacv1alpha1.AddToScheme, + }, + ).Announce(GroupFactoryRegistry).RegisterAndEnable(Registry, Scheme); err != nil { + panic(err) + } + + if err := announced.NewGroupMetaFactory( + &announced.GroupMetaFactoryArgs{ + GroupName: schedulingv1alpha1.GroupName, + VersionPreferenceOrder: []string{schedulingv1alpha1.SchemeGroupVersion.Version}, + RootScopedKinds: sets.NewString("PriorityClass"), + }, + announced.VersionToSchemeFunc{ + schedulingv1alpha1.SchemeGroupVersion.Version: schedulingv1alpha1.AddToScheme, + }, + ).Announce(GroupFactoryRegistry).RegisterAndEnable(Registry, Scheme); err != nil { + panic(err) + } + + if err := announced.NewGroupMetaFactory( + &announced.GroupMetaFactoryArgs{ + GroupName: settingsv1alpha1.GroupName, + VersionPreferenceOrder: []string{settingsv1alpha1.SchemeGroupVersion.Version}, + }, + announced.VersionToSchemeFunc{ + settingsv1alpha1.SchemeGroupVersion.Version: settingsv1alpha1.AddToScheme, + }, + ).Announce(GroupFactoryRegistry).RegisterAndEnable(Registry, Scheme); err != nil { + panic(err) + } + + if err := announced.NewGroupMetaFactory( + &announced.GroupMetaFactoryArgs{ + GroupName: storagev1.GroupName, + VersionPreferenceOrder: []string{storagev1.SchemeGroupVersion.Version, storagev1beta1.SchemeGroupVersion.Version}, + RootScopedKinds: sets.NewString("StorageClass"), + }, + announced.VersionToSchemeFunc{ + storagev1.SchemeGroupVersion.Version: storagev1.AddToScheme, + storagev1beta1.SchemeGroupVersion.Version: storagev1beta1.AddToScheme, + }, + ).Announce(GroupFactoryRegistry).RegisterAndEnable(Registry, Scheme); err != nil { + panic(err) + } +} diff --git a/pkg/kubectl/scheme/scheme.go b/pkg/kubectl/scheme/scheme.go new file mode 100644 index 00000000000..cd38d22a183 --- /dev/null +++ b/pkg/kubectl/scheme/scheme.go @@ -0,0 +1,43 @@ +/* +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 scheme + +import ( + "os" + + "k8s.io/apimachinery/pkg/apimachinery/announced" + "k8s.io/apimachinery/pkg/apimachinery/registered" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/serializer" +) + +// All kubectl code should eventually switch to use this Registry and Scheme instead of the global ones. + +// GroupFactoryRegistry is the APIGroupFactoryRegistry (overlaps a bit with Registry, see comments in package for details) +var GroupFactoryRegistry = make(announced.APIGroupFactoryRegistry) + +// Registry is an instance of an API registry. +var Registry = registered.NewOrDie(os.Getenv("KUBE_API_VERSIONS")) + +// Scheme is the default instance of runtime.Scheme to which types in the Kubernetes API are already registered. +var Scheme = runtime.NewScheme() + +// Codecs provides access to encoding and decoding for the scheme +var Codecs = serializer.NewCodecFactory(Scheme) + +// ParameterCodec handles versioning of objects that are converted to query parameters. +var ParameterCodec = runtime.NewParameterCodec(Scheme) From 4487cc5e152c0a162d15cec6ce699028ca8579d4 Mon Sep 17 00:00:00 2001 From: ymqytw Date: Fri, 27 Oct 2017 18:31:42 -0700 Subject: [PATCH 2/2] switch some commands to use its own scheme --- pkg/kubectl/BUILD | 7 ++- pkg/kubectl/cmd/BUILD | 9 ++- pkg/kubectl/cmd/annotate_test.go | 21 ++++--- pkg/kubectl/cmd/apply.go | 4 +- pkg/kubectl/cmd/apply_test.go | 14 +---- pkg/kubectl/cmd/auth/BUILD | 3 +- pkg/kubectl/cmd/auth/cani_test.go | 7 +-- pkg/kubectl/cmd/cmd_test.go | 21 +++---- pkg/kubectl/cmd/convert.go | 12 ++-- pkg/kubectl/cmd/create_clusterrole.go | 4 +- pkg/kubectl/cmd/create_clusterrole_test.go | 2 +- .../cmd/create_clusterrolebinding_test.go | 4 -- pkg/kubectl/cmd/create_configmap_test.go | 8 +-- pkg/kubectl/cmd/create_deployment_test.go | 4 -- pkg/kubectl/cmd/create_namespace_test.go | 8 +-- pkg/kubectl/cmd/create_pdb_test.go | 5 +- pkg/kubectl/cmd/create_quota_test.go | 8 +-- pkg/kubectl/cmd/create_role.go | 20 +++---- pkg/kubectl/cmd/create_role_test.go | 2 +- pkg/kubectl/cmd/create_rolebinding_test.go | 11 ++-- pkg/kubectl/cmd/create_secret_test.go | 12 ++-- pkg/kubectl/cmd/create_service.go | 10 ++-- pkg/kubectl/cmd/create_service_test.go | 16 +++--- pkg/kubectl/cmd/create_serviceaccount_test.go | 8 +-- pkg/kubectl/cmd/create_test.go | 9 ++- pkg/kubectl/cmd/delete_test.go | 22 +------ pkg/kubectl/cmd/describe_test.go | 8 --- pkg/kubectl/cmd/edit_test.go | 3 - pkg/kubectl/cmd/exec_test.go | 5 +- pkg/kubectl/cmd/explain.go | 4 +- pkg/kubectl/cmd/expose_test.go | 10 +++- pkg/kubectl/cmd/get_test.go | 57 +++++++------------ pkg/kubectl/cmd/label_test.go | 13 ++--- pkg/kubectl/cmd/logs_test.go | 6 +- pkg/kubectl/cmd/patch.go | 4 +- pkg/kubectl/cmd/patch_test.go | 6 -- pkg/kubectl/cmd/portforward_test.go | 6 +- pkg/kubectl/cmd/replace_test.go | 5 -- pkg/kubectl/cmd/run_test.go | 16 ++++-- pkg/kubectl/cmd/taint_test.go | 3 - pkg/kubectl/cmd/top_node_test.go | 5 -- pkg/kubectl/cmd/top_pod_test.go | 4 -- pkg/kubectl/cmd/util/editor/BUILD | 2 +- pkg/kubectl/cmd/util/editor/editoptions.go | 4 +- pkg/kubectl/configmap.go | 14 ++--- pkg/kubectl/configmap_test.go | 36 ++++++------ pkg/kubectl/pdb.go | 2 +- pkg/kubectl/quota.go | 12 ++-- pkg/kubectl/quota_test.go | 28 ++++----- pkg/kubectl/rolebinding.go | 28 ++++----- pkg/kubectl/rolebinding_test.go | 2 +- pkg/kubectl/secret.go | 16 +++--- pkg/kubectl/secret_for_docker_registry.go | 8 +-- .../secret_for_docker_registry_test.go | 26 ++++----- pkg/kubectl/secret_for_tls.go | 10 ++-- pkg/kubectl/secret_for_tls_test.go | 40 ++++++------- pkg/kubectl/secret_test.go | 36 ++++++------ pkg/kubectl/service_basic.go | 30 +++++----- pkg/kubectl/service_basic_test.go | 46 +++++++-------- pkg/kubectl/serviceaccount.go | 4 +- pkg/kubectl/serviceaccount_test.go | 10 ++-- pkg/kubectl/util/hash/BUILD | 4 +- pkg/kubectl/util/hash/hash.go | 10 ++-- pkg/kubectl/util/hash/hash_test.go | 38 ++++++------- 64 files changed, 362 insertions(+), 450 deletions(-) diff --git a/pkg/kubectl/BUILD b/pkg/kubectl/BUILD index 5fd59d47cb4..af8ea4a70b3 100644 --- a/pkg/kubectl/BUILD +++ b/pkg/kubectl/BUILD @@ -42,7 +42,6 @@ go_test( "//pkg/apis/apps:go_default_library", "//pkg/apis/batch:go_default_library", "//pkg/apis/extensions:go_default_library", - "//pkg/apis/rbac:go_default_library", "//pkg/client/clientset_generated/internalclientset:go_default_library", "//pkg/client/clientset_generated/internalclientset/fake:go_default_library", "//pkg/client/clientset_generated/internalclientset/typed/batch/internalversion:go_default_library", @@ -58,6 +57,7 @@ go_test( "//vendor/k8s.io/api/batch/v2alpha1:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", "//vendor/k8s.io/api/extensions/v1beta1:go_default_library", + "//vendor/k8s.io/api/rbac/v1:go_default_library", "//vendor/k8s.io/api/rbac/v1beta1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/equality:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library", @@ -121,8 +121,6 @@ go_library( "//pkg/apis/apps:go_default_library", "//pkg/apis/batch:go_default_library", "//pkg/apis/extensions:go_default_library", - "//pkg/apis/policy:go_default_library", - "//pkg/apis/rbac:go_default_library", "//pkg/client/clientset_generated/internalclientset:go_default_library", "//pkg/client/clientset_generated/internalclientset/typed/apps/internalversion:go_default_library", "//pkg/client/clientset_generated/internalclientset/typed/batch/internalversion:go_default_library", @@ -149,6 +147,8 @@ go_library( "//vendor/k8s.io/api/batch/v2alpha1:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", "//vendor/k8s.io/api/extensions/v1beta1:go_default_library", + "//vendor/k8s.io/api/policy/v1beta1:go_default_library", + "//vendor/k8s.io/api/rbac/v1:go_default_library", "//vendor/k8s.io/api/rbac/v1beta1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/meta:go_default_library", @@ -198,6 +198,7 @@ filegroup( "//pkg/kubectl/plugins:all-srcs", "//pkg/kubectl/proxy:all-srcs", "//pkg/kubectl/resource:all-srcs", + "//pkg/kubectl/scheme:all-srcs", "//pkg/kubectl/testing:all-srcs", "//pkg/kubectl/util:all-srcs", "//pkg/kubectl/validation:all-srcs", diff --git a/pkg/kubectl/cmd/BUILD b/pkg/kubectl/cmd/BUILD index c8a6ce007ba..eb345439568 100644 --- a/pkg/kubectl/cmd/BUILD +++ b/pkg/kubectl/cmd/BUILD @@ -72,10 +72,8 @@ go_library( "//pkg/api/legacyscheme:go_default_library", "//pkg/api/validation:go_default_library", "//pkg/apis/certificates:go_default_library", - "//pkg/apis/rbac:go_default_library", "//pkg/client/clientset_generated/internalclientset:go_default_library", "//pkg/client/clientset_generated/internalclientset/typed/core/internalversion:go_default_library", - "//pkg/client/clientset_generated/internalclientset/typed/rbac/internalversion:go_default_library", "//pkg/client/unversioned:go_default_library", "//pkg/kubectl:go_default_library", "//pkg/kubectl/apply/parse:go_default_library", @@ -93,6 +91,7 @@ go_library( "//pkg/kubectl/plugins:go_default_library", "//pkg/kubectl/proxy:go_default_library", "//pkg/kubectl/resource:go_default_library", + "//pkg/kubectl/scheme:go_default_library", "//pkg/kubectl/util:go_default_library", "//pkg/kubectl/util/i18n:go_default_library", "//pkg/kubectl/util/term:go_default_library", @@ -116,6 +115,7 @@ go_library( "//vendor/k8s.io/api/core/v1:go_default_library", "//vendor/k8s.io/api/extensions/v1beta1:go_default_library", "//vendor/k8s.io/api/policy/v1beta1:go_default_library", + "//vendor/k8s.io/api/rbac/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/meta:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", @@ -140,6 +140,7 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/watch:go_default_library", "//vendor/k8s.io/apiserver/pkg/util/flag:go_default_library", "//vendor/k8s.io/client-go/kubernetes:go_default_library", + "//vendor/k8s.io/client-go/kubernetes/typed/rbac/v1:go_default_library", "//vendor/k8s.io/client-go/rest:go_default_library", "//vendor/k8s.io/client-go/tools/clientcmd:go_default_library", "//vendor/k8s.io/client-go/tools/portforward:go_default_library", @@ -205,15 +206,16 @@ go_test( "//pkg/api/ref:go_default_library", "//pkg/api/testapi:go_default_library", "//pkg/api/testing:go_default_library", + "//pkg/api/v1:go_default_library", "//pkg/apis/batch:go_default_library", "//pkg/apis/extensions:go_default_library", - "//pkg/apis/rbac:go_default_library", "//pkg/kubectl:go_default_library", "//pkg/kubectl/cmd/testing:go_default_library", "//pkg/kubectl/cmd/util:go_default_library", "//pkg/kubectl/cmd/util/openapi:go_default_library", "//pkg/kubectl/plugins:go_default_library", "//pkg/kubectl/resource:go_default_library", + "//pkg/kubectl/scheme:go_default_library", "//pkg/kubectl/util/i18n:go_default_library", "//pkg/kubectl/util/term:go_default_library", "//pkg/printers:go_default_library", @@ -224,6 +226,7 @@ go_test( "//vendor/gopkg.in/yaml.v2:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", "//vendor/k8s.io/api/policy/v1beta1:go_default_library", + "//vendor/k8s.io/api/rbac/v1:go_default_library", "//vendor/k8s.io/api/rbac/v1beta1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/equality:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library", diff --git a/pkg/kubectl/cmd/annotate_test.go b/pkg/kubectl/cmd/annotate_test.go index 7396d9a4936..1f1499939a9 100644 --- a/pkg/kubectl/cmd/annotate_test.go +++ b/pkg/kubectl/cmd/annotate_test.go @@ -25,10 +25,9 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" - restclient "k8s.io/client-go/rest" + "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/rest/fake" "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" ) @@ -419,7 +418,7 @@ func TestAnnotateErrors(t *testing.T) { f, tf, _, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.Namespace = "test" - tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: &legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion}} + tf.ClientConfig = defaultClientConfig() buf := bytes.NewBuffer([]byte{}) cmd := NewCmdAnnotate(f, buf) @@ -452,7 +451,7 @@ func TestAnnotateObject(t *testing.T) { f, tf, codec, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, + GroupVersion: schema.GroupVersion{Group: "testgroup", Version: "v1"}, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch req.Method { @@ -479,7 +478,7 @@ func TestAnnotateObject(t *testing.T) { }), } tf.Namespace = "test" - tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: &legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion}} + tf.ClientConfig = defaultClientConfig() buf := bytes.NewBuffer([]byte{}) cmd := NewCmdAnnotate(f, buf) @@ -503,7 +502,7 @@ func TestAnnotateObjectFromFile(t *testing.T) { f, tf, codec, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, + GroupVersion: schema.GroupVersion{Group: "testgroup", Version: "v1"}, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch req.Method { @@ -530,7 +529,7 @@ func TestAnnotateObjectFromFile(t *testing.T) { }), } tf.Namespace = "test" - tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: &legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion}} + tf.ClientConfig = defaultClientConfig() buf := bytes.NewBuffer([]byte{}) cmd := NewCmdAnnotate(f, buf) @@ -552,7 +551,7 @@ func TestAnnotateObjectFromFile(t *testing.T) { func TestAnnotateLocal(t *testing.T) { f, tf, _, _ := cmdtesting.NewAPIFactory() tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, + GroupVersion: schema.GroupVersion{Group: "testgroup", Version: "v1"}, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { t.Fatalf("unexpected request: %s %#v\n%#v", req.Method, req.URL, req) @@ -560,7 +559,7 @@ func TestAnnotateLocal(t *testing.T) { }), } tf.Namespace = "test" - tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: &legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion}} + tf.ClientConfig = defaultClientConfig() buf := bytes.NewBuffer([]byte{}) cmd := NewCmdAnnotate(f, buf) @@ -585,7 +584,7 @@ func TestAnnotateMultipleObjects(t *testing.T) { f, tf, codec, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, + GroupVersion: schema.GroupVersion{Group: "testgroup", Version: "v1"}, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch req.Method { @@ -614,7 +613,7 @@ func TestAnnotateMultipleObjects(t *testing.T) { }), } tf.Namespace = "test" - tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: &legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion}} + tf.ClientConfig = defaultClientConfig() buf := bytes.NewBuffer([]byte{}) cmd := NewCmdAnnotate(f, buf) diff --git a/pkg/kubectl/cmd/apply.go b/pkg/kubectl/cmd/apply.go index 3551dea286a..95a2b815196 100644 --- a/pkg/kubectl/cmd/apply.go +++ b/pkg/kubectl/cmd/apply.go @@ -38,12 +38,12 @@ import ( "k8s.io/apimachinery/pkg/util/strategicpatch" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" "k8s.io/kubernetes/pkg/kubectl" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/resource" + "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/util/i18n" ) @@ -581,7 +581,7 @@ func (p *patcher) patchSimple(obj runtime.Object, modified []byte, source, names // Create the versioned struct from the type defined in the restmapping // (which is the API version we'll be submitting the patch to) - versionedObject, err := legacyscheme.Scheme.New(p.mapping.GroupVersionKind) + versionedObject, err := scheme.Scheme.New(p.mapping.GroupVersionKind) var patchType types.PatchType var patch []byte createPatchErrFormat := "creating patch with:\noriginal:\n%s\nmodified:\n%s\ncurrent:\n%s\nfor:" diff --git a/pkg/kubectl/cmd/apply_test.go b/pkg/kubectl/cmd/apply_test.go index fc98f462f9b..7bd23bfe03f 100644 --- a/pkg/kubectl/cmd/apply_test.go +++ b/pkg/kubectl/cmd/apply_test.go @@ -33,10 +33,8 @@ import ( "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" - restclient "k8s.io/client-go/rest" "k8s.io/client-go/rest/fake" "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/apis/extensions" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" @@ -358,7 +356,6 @@ func TestApplyObjectWithoutAnnotation(t *testing.T) { f, tf, _, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: schema.GroupVersion{Version: "v1"}, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { @@ -403,7 +400,6 @@ func TestApplyObject(t *testing.T) { f, tf, _, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: schema.GroupVersion{Version: "v1"}, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { @@ -460,7 +456,6 @@ func TestApplyObjectOutput(t *testing.T) { f, tf, _, _ := cmdtesting.NewAPIFactory() tf.Printer = &printers.YAMLPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: schema.GroupVersion{Version: "v1"}, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { @@ -505,7 +500,6 @@ func TestApplyRetry(t *testing.T) { f, tf, _, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: schema.GroupVersion{Version: "v1"}, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { @@ -559,7 +553,6 @@ func TestApplyNonExistObject(t *testing.T) { f, tf, _, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: schema.GroupVersion{Version: "v1"}, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { @@ -610,7 +603,6 @@ func testApplyMultipleObjects(t *testing.T, asList bool) { f, tf, _, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { @@ -688,7 +680,6 @@ func TestApplyNULLPreservation(t *testing.T) { f, tf, _, _ := cmdtesting.NewTestFactory() tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { @@ -757,7 +748,6 @@ func TestUnstructuredApply(t *testing.T) { f, tf, _, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: schema.GroupVersion{Version: "v1"}, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { @@ -821,7 +811,6 @@ func TestUnstructuredIdempotentApply(t *testing.T) { f, tf, _, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: schema.GroupVersion{Version: "v1"}, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { @@ -1035,7 +1024,6 @@ func TestForceApply(t *testing.T) { f, tf, _, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: schema.GroupVersion{Version: "v1"}, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { @@ -1093,7 +1081,7 @@ func TestForceApply(t *testing.T) { }), } tf.Client = tf.UnstructuredClient - tf.ClientConfig = &restclient.Config{} + tf.ClientConfig = defaultClientConfig() tf.Namespace = "test" buf := bytes.NewBuffer([]byte{}) errBuf := bytes.NewBuffer([]byte{}) diff --git a/pkg/kubectl/cmd/auth/BUILD b/pkg/kubectl/cmd/auth/BUILD index 89c29f5515e..c702b790d7f 100644 --- a/pkg/kubectl/cmd/auth/BUILD +++ b/pkg/kubectl/cmd/auth/BUILD @@ -53,9 +53,8 @@ go_test( importpath = "k8s.io/kubernetes/pkg/kubectl/cmd/auth", library = ":go_default_library", deps = [ - "//pkg/api:go_default_library", - "//pkg/api/legacyscheme:go_default_library", "//pkg/kubectl/cmd/testing:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//vendor/k8s.io/client-go/rest:go_default_library", "//vendor/k8s.io/client-go/rest/fake:go_default_library", ], diff --git a/pkg/kubectl/cmd/auth/cani_test.go b/pkg/kubectl/cmd/auth/cani_test.go index 5411dafdde9..0b4407f6d86 100644 --- a/pkg/kubectl/cmd/auth/cani_test.go +++ b/pkg/kubectl/cmd/auth/cani_test.go @@ -24,10 +24,9 @@ import ( "strings" "testing" + "k8s.io/apimachinery/pkg/runtime/schema" restclient "k8s.io/client-go/rest" "k8s.io/client-go/rest/fake" - "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" ) @@ -122,7 +121,7 @@ func TestRunAccessCheck(t *testing.T) { f, tf, _, ns := cmdtesting.NewAPIFactory() tf.Client = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, + GroupVersion: schema.GroupVersion{Group: "", Version: "v1"}, NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { expectPath := "/apis/authorization.k8s.io/v1/selfsubjectaccessreviews" @@ -153,7 +152,7 @@ func TestRunAccessCheck(t *testing.T) { }), } tf.Namespace = "test" - tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: &legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion}} + tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: &schema.GroupVersion{Group: "", Version: "v1"}}} if err := test.o.Complete(f, test.args); err != nil { t.Errorf("%s: %v", test.name, err) diff --git a/pkg/kubectl/cmd/cmd_test.go b/pkg/kubectl/cmd/cmd_test.go index d59ea8d64ab..6b405aeaee3 100644 --- a/pkg/kubectl/cmd/cmd_test.go +++ b/pkg/kubectl/cmd/cmd_test.go @@ -37,15 +37,20 @@ import ( restclient "k8s.io/client-go/rest" "k8s.io/client-go/rest/fake" "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/api/testapi" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" + "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/printers" printersinternal "k8s.io/kubernetes/pkg/printers/internalversion" "k8s.io/kubernetes/pkg/util/strings" ) +// This init should be removed after switching this command and its tests to user external types. +func init() { + api.AddToScheme(scheme.Scheme) +} + func initTestErrorHandler(t *testing.T) { cmdutil.BehaviorOnFatal(func(str string, code int) { t.Errorf("Error running command (exit code %d): %s", code, str) @@ -62,9 +67,9 @@ func defaultClientConfig() *restclient.Config { return &restclient.Config{ APIPath: "/api", ContentConfig: restclient.ContentConfig{ - NegotiatedSerializer: legacyscheme.Codecs, + NegotiatedSerializer: scheme.Codecs, ContentType: runtime.ContentTypeJSON, - GroupVersion: &legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, + GroupVersion: &schema.GroupVersion{Version: "v1"}, }, } } @@ -73,7 +78,7 @@ func defaultClientConfigForVersion(version *schema.GroupVersion) *restclient.Con return &restclient.Config{ APIPath: "/api", ContentConfig: restclient.ContentConfig{ - NegotiatedSerializer: legacyscheme.Codecs, + NegotiatedSerializer: scheme.Codecs, ContentType: runtime.ContentTypeJSON, GroupVersion: version, }, @@ -163,7 +168,6 @@ func Example_printReplicationControllerWithNamespace() { printersinternal.AddHandlers(p) tf.Printer = p tf.Client = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: ns, Client: nil, } @@ -216,7 +220,6 @@ func Example_printMultiContainersReplicationControllerWithWide() { printersinternal.AddHandlers(p) tf.Printer = p tf.Client = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: ns, Client: nil, } @@ -270,7 +273,6 @@ func Example_printReplicationController() { printersinternal.AddHandlers(p) tf.Printer = p tf.Client = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: ns, Client: nil, } @@ -325,7 +327,6 @@ func Example_printPodWithWideFormat() { printersinternal.AddHandlers(p) tf.Printer = p tf.Client = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: ns, Client: nil, } @@ -368,7 +369,6 @@ func Example_printPodWithShowLabels() { printersinternal.AddHandlers(p) tf.Printer = p tf.Client = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: ns, Client: nil, } @@ -505,7 +505,6 @@ func Example_printPodHideTerminated() { printersinternal.AddHandlers(p) tf.Printer = p tf.Client = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: ns, Client: nil, } @@ -541,7 +540,6 @@ func Example_printPodShowAll() { printersinternal.AddHandlers(p) tf.Printer = p tf.Client = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: ns, Client: nil, } @@ -570,7 +568,6 @@ func Example_printServiceWithNamespacesAndLabels() { printersinternal.AddHandlers(p) tf.Printer = p tf.Client = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: ns, Client: nil, } diff --git a/pkg/kubectl/cmd/convert.go b/pkg/kubectl/cmd/convert.go index 23002e18373..faf65efe2e5 100644 --- a/pkg/kubectl/cmd/convert.go +++ b/pkg/kubectl/cmd/convert.go @@ -24,10 +24,10 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/resource" + "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/printers" @@ -119,11 +119,11 @@ func outputVersion(cmd *cobra.Command, defaultVersion *schema.GroupVersion) (sch // Complete collects information required to run Convert command from command line. func (o *ConvertOptions) Complete(f cmdutil.Factory, out io.Writer, cmd *cobra.Command) (err error) { - o.outputVersion, err = outputVersion(cmd, &legacyscheme.Registry.EnabledVersionsForGroup(api.GroupName)[0]) + o.outputVersion, err = outputVersion(cmd, &scheme.Registry.EnabledVersionsForGroup(api.GroupName)[0]) if err != nil { return err } - if !legacyscheme.Registry.IsEnabledVersion(o.outputVersion) { + if !scheme.Registry.IsEnabledVersion(o.outputVersion) { cmdutil.UsageErrorf(cmd, "'%s' is not a registered version.", o.outputVersion) } @@ -208,7 +208,7 @@ func (o *ConvertOptions) RunConvert() error { // and squashes the list's items into a single versioned runtime.Object. func objectListToVersionedObject(objects []runtime.Object, version schema.GroupVersion) (runtime.Object, error) { objectList := &api.List{Items: objects} - converted, err := tryConvert(legacyscheme.Scheme, objectList, version, legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion) + converted, err := tryConvert(scheme.Scheme, objectList, version, scheme.Registry.GroupOrDie(api.GroupName).GroupVersion) if err != nil { return nil, err } @@ -230,7 +230,7 @@ func asVersionedObject(infos []*resource.Info, forceList bool, version schema.Gr object = objects[0] } else { object = &api.List{Items: objects} - converted, err := tryConvert(legacyscheme.Scheme, object, version, legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion) + converted, err := tryConvert(scheme.Scheme, object, version, scheme.Registry.GroupOrDie(api.GroupName).GroupVersion) if err != nil { return nil, err } @@ -261,7 +261,7 @@ func asVersionedObjects(infos []*resource.Info, version schema.GroupVersion, enc // objects that are not part of api.Scheme must be converted to JSON // TODO: convert to map[string]interface{}, attach to runtime.Unknown? if !version.Empty() { - if _, _, err := legacyscheme.Scheme.ObjectKinds(info.Object); runtime.IsNotRegisteredError(err) { + if _, _, err := scheme.Scheme.ObjectKinds(info.Object); runtime.IsNotRegisteredError(err) { // TODO: ideally this would encode to version, but we don't expose multiple codecs here. data, err := runtime.Encode(encoder, info.Object) if err != nil { diff --git a/pkg/kubectl/cmd/create_clusterrole.go b/pkg/kubectl/cmd/create_clusterrole.go index fd77ef0bc4d..88114b2bf7e 100644 --- a/pkg/kubectl/cmd/create_clusterrole.go +++ b/pkg/kubectl/cmd/create_clusterrole.go @@ -23,7 +23,7 @@ import ( "github.com/spf13/cobra" - "k8s.io/kubernetes/pkg/apis/rbac" + rbacv1 "k8s.io/api/rbac/v1" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/util/i18n" @@ -155,7 +155,7 @@ func (c *CreateClusterRoleOptions) Validate() error { } func (c *CreateClusterRoleOptions) RunCreateRole() error { - clusterRole := &rbac.ClusterRole{} + clusterRole := &rbacv1.ClusterRole{} clusterRole.Name = c.Name rules, err := generateResourcePolicyRules(c.Mapper, c.Verbs, c.Resources, c.ResourceNames, c.NonResourceURLs) if err != nil { diff --git a/pkg/kubectl/cmd/create_clusterrole_test.go b/pkg/kubectl/cmd/create_clusterrole_test.go index e930c6eacf0..dee5b4fd882 100644 --- a/pkg/kubectl/cmd/create_clusterrole_test.go +++ b/pkg/kubectl/cmd/create_clusterrole_test.go @@ -22,10 +22,10 @@ import ( "reflect" "testing" + rbac "k8s.io/api/rbac/v1" "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/client-go/rest/fake" - "k8s.io/kubernetes/pkg/apis/rbac" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" ) diff --git a/pkg/kubectl/cmd/create_clusterrolebinding_test.go b/pkg/kubectl/cmd/create_clusterrolebinding_test.go index cf43eff2ae8..37aefc81e3b 100644 --- a/pkg/kubectl/cmd/create_clusterrolebinding_test.go +++ b/pkg/kubectl/cmd/create_clusterrolebinding_test.go @@ -30,8 +30,6 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" restclient "k8s.io/client-go/rest" "k8s.io/client-go/rest/fake" - "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" ) @@ -78,7 +76,6 @@ func TestCreateClusterRoleBinding(t *testing.T) { tf.Printer = &testPrinter{} tf.Client = &ClusterRoleBindingRESTClient{ RESTClient: &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { @@ -131,7 +128,6 @@ type ClusterRoleBindingRESTClient struct { func (c *ClusterRoleBindingRESTClient) Post() *restclient.Request { config := restclient.ContentConfig{ ContentType: runtime.ContentTypeJSON, - GroupVersion: &schema.GroupVersion{Group: "rbac.authorization.k8s.io", Version: "v1beta1"}, NegotiatedSerializer: c.NegotiatedSerializer, } diff --git a/pkg/kubectl/cmd/create_configmap_test.go b/pkg/kubectl/cmd/create_configmap_test.go index f0ed75cda73..2ac2a939a81 100644 --- a/pkg/kubectl/cmd/create_configmap_test.go +++ b/pkg/kubectl/cmd/create_configmap_test.go @@ -21,19 +21,19 @@ import ( "net/http" "testing" + "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/rest/fake" - "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" ) func TestCreateConfigMap(t *testing.T) { - configMap := &api.ConfigMap{} + configMap := &v1.ConfigMap{} configMap.Name = "my-configmap" f, tf, codec, ns := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.Client = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, + GroupVersion: schema.GroupVersion{Group: "", Version: "v1"}, NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { diff --git a/pkg/kubectl/cmd/create_deployment_test.go b/pkg/kubectl/cmd/create_deployment_test.go index 59263ffe67e..a266fa01fe6 100644 --- a/pkg/kubectl/cmd/create_deployment_test.go +++ b/pkg/kubectl/cmd/create_deployment_test.go @@ -26,8 +26,6 @@ import ( restclient "k8s.io/client-go/rest" "k8s.io/client-go/rest/fake" - "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/kubectl" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" @@ -77,7 +75,6 @@ func TestCreateDeployment(t *testing.T) { depName := "jonny-dep" f, tf, _, ns := cmdtesting.NewAPIFactory() tf.Client = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { return &http.Response{ @@ -106,7 +103,6 @@ func TestCreateDeploymentNoImage(t *testing.T) { depName := "jonny-dep" f, tf, _, ns := cmdtesting.NewAPIFactory() tf.Client = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { return &http.Response{ diff --git a/pkg/kubectl/cmd/create_namespace_test.go b/pkg/kubectl/cmd/create_namespace_test.go index d16dc2e2ce8..3b172b67eb0 100644 --- a/pkg/kubectl/cmd/create_namespace_test.go +++ b/pkg/kubectl/cmd/create_namespace_test.go @@ -21,19 +21,19 @@ import ( "net/http" "testing" + "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/rest/fake" - "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" ) func TestCreateNamespace(t *testing.T) { - namespaceObject := &api.Namespace{} + namespaceObject := &v1.Namespace{} namespaceObject.Name = "my-namespace" f, tf, codec, ns := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.Client = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, + GroupVersion: schema.GroupVersion{Version: "v1"}, NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { diff --git a/pkg/kubectl/cmd/create_pdb_test.go b/pkg/kubectl/cmd/create_pdb_test.go index ac21f09f72a..e99d5b57c6b 100644 --- a/pkg/kubectl/cmd/create_pdb_test.go +++ b/pkg/kubectl/cmd/create_pdb_test.go @@ -22,10 +22,9 @@ import ( "net/http" "testing" + "k8s.io/apimachinery/pkg/runtime/schema" restclient "k8s.io/client-go/rest" "k8s.io/client-go/rest/fake" - "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" ) @@ -33,7 +32,7 @@ func TestCreatePdb(t *testing.T) { pdbName := "my-pdb" f, tf, _, ns := cmdtesting.NewAPIFactory() tf.Client = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, + GroupVersion: schema.GroupVersion{Group: "policy", Version: "v1beta1"}, NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { return &http.Response{ diff --git a/pkg/kubectl/cmd/create_quota_test.go b/pkg/kubectl/cmd/create_quota_test.go index 0a4e8c900c4..abf0e33a82e 100644 --- a/pkg/kubectl/cmd/create_quota_test.go +++ b/pkg/kubectl/cmd/create_quota_test.go @@ -21,19 +21,19 @@ import ( "net/http" "testing" + "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/rest/fake" - "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" ) func TestCreateQuota(t *testing.T) { - resourceQuotaObject := &api.ResourceQuota{} + resourceQuotaObject := &v1.ResourceQuota{} resourceQuotaObject.Name = "my-quota" f, tf, codec, ns := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.Client = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, + GroupVersion: schema.GroupVersion{Version: "v1"}, NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { diff --git a/pkg/kubectl/cmd/create_role.go b/pkg/kubectl/cmd/create_role.go index 9ea8cc33aa4..2fced14271b 100644 --- a/pkg/kubectl/cmd/create_role.go +++ b/pkg/kubectl/cmd/create_role.go @@ -23,12 +23,12 @@ import ( "github.com/spf13/cobra" + rbacv1 "k8s.io/api/rbac/v1" "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/kubernetes/pkg/apis/rbac" - internalversionrbac "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/rbac/internalversion" + clientgorbacv1 "k8s.io/client-go/kubernetes/typed/rbac/v1" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/util/i18n" @@ -108,7 +108,7 @@ type CreateRoleOptions struct { DryRun bool OutputFormat string Namespace string - Client internalversionrbac.RbacInterface + Client clientgorbacv1.RbacV1Interface Mapper meta.RESTMapper Out io.Writer PrintObject func(obj runtime.Object) error @@ -206,11 +206,11 @@ func (c *CreateRoleOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args return f.PrintObject(cmd, false, c.Mapper, obj, c.Out) } - clientSet, err := f.ClientSet() + clientset, err := f.KubernetesClientSet() if err != nil { return err } - c.Client = clientSet.Rbac() + c.Client = clientset.RbacV1() return nil } @@ -275,7 +275,7 @@ func (c *CreateRoleOptions) validateResource() error { } func (c *CreateRoleOptions) RunCreateRole() error { - role := &rbac.Role{} + role := &rbacv1.Role{} role.Name = c.Name rules, err := generateResourcePolicyRules(c.Mapper, c.Verbs, c.Resources, c.ResourceNames, []string{}) if err != nil { @@ -308,7 +308,7 @@ func arrayContains(s []string, e string) bool { return false } -func generateResourcePolicyRules(mapper meta.RESTMapper, verbs []string, resources []ResourceOptions, resourceNames []string, nonResourceURLs []string) ([]rbac.PolicyRule, error) { +func generateResourcePolicyRules(mapper meta.RESTMapper, verbs []string, resources []ResourceOptions, resourceNames []string, nonResourceURLs []string) ([]rbacv1.PolicyRule, error) { // groupResourceMapping is a apigroup-resource map. The key of this map is api group, while the value // is a string array of resources under this api group. // E.g. groupResourceMapping = {"extensions": ["replicasets", "deployments"], "batch":["jobs"]} @@ -334,9 +334,9 @@ func generateResourcePolicyRules(mapper meta.RESTMapper, verbs []string, resourc } // Create separate rule for each of the api group. - rules := []rbac.PolicyRule{} + rules := []rbacv1.PolicyRule{} for _, g := range sets.StringKeySet(groupResourceMapping).List() { - rule := rbac.PolicyRule{} + rule := rbacv1.PolicyRule{} rule.Verbs = verbs rule.Resources = groupResourceMapping[g] rule.APIGroups = []string{g} @@ -345,7 +345,7 @@ func generateResourcePolicyRules(mapper meta.RESTMapper, verbs []string, resourc } if len(nonResourceURLs) > 0 { - rule := rbac.PolicyRule{} + rule := rbacv1.PolicyRule{} rule.Verbs = verbs rule.NonResourceURLs = nonResourceURLs rules = append(rules, rule) diff --git a/pkg/kubectl/cmd/create_role_test.go b/pkg/kubectl/cmd/create_role_test.go index 1dcd14705ba..62ca02bf593 100644 --- a/pkg/kubectl/cmd/create_role_test.go +++ b/pkg/kubectl/cmd/create_role_test.go @@ -22,10 +22,10 @@ import ( "reflect" "testing" + rbac "k8s.io/api/rbac/v1" "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/client-go/rest/fake" - "k8s.io/kubernetes/pkg/apis/rbac" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" ) diff --git a/pkg/kubectl/cmd/create_rolebinding_test.go b/pkg/kubectl/cmd/create_rolebinding_test.go index bf85e7febb0..154ae26a1b3 100644 --- a/pkg/kubectl/cmd/create_rolebinding_test.go +++ b/pkg/kubectl/cmd/create_rolebinding_test.go @@ -24,21 +24,23 @@ import ( "reflect" "testing" + rbac "k8s.io/api/rbac/v1" "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" restclient "k8s.io/client-go/rest" "k8s.io/client-go/rest/fake" - "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/legacyscheme" - "k8s.io/kubernetes/pkg/apis/rbac" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" ) -var groupVersion = schema.GroupVersion{Group: "rbac.authorization.k8s.io", Version: "v1alpha1"} +var groupVersion = schema.GroupVersion{Group: "rbac.authorization.k8s.io", Version: "v1"} func TestCreateRoleBinding(t *testing.T) { expectBinding := &rbac.RoleBinding{ + TypeMeta: v1.TypeMeta{ + APIVersion: "rbac.authorization.k8s.io/v1", + Kind: "RoleBinding", + }, ObjectMeta: v1.ObjectMeta{ Name: "fake-binding", }, @@ -76,7 +78,6 @@ func TestCreateRoleBinding(t *testing.T) { tf.Printer = &testPrinter{} tf.Client = &RoleBindingRESTClient{ RESTClient: &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { diff --git a/pkg/kubectl/cmd/create_secret_test.go b/pkg/kubectl/cmd/create_secret_test.go index 11970790eaf..0db9873d546 100644 --- a/pkg/kubectl/cmd/create_secret_test.go +++ b/pkg/kubectl/cmd/create_secret_test.go @@ -21,14 +21,14 @@ import ( "net/http" "testing" + "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/rest/fake" - "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" ) func TestCreateSecretGeneric(t *testing.T) { - secretObject := &api.Secret{ + secretObject := &v1.Secret{ Data: map[string][]byte{ "password": []byte("includes,comma"), "username": []byte("test_user"), @@ -38,7 +38,7 @@ func TestCreateSecretGeneric(t *testing.T) { f, tf, codec, ns := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.Client = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, + GroupVersion: schema.GroupVersion{Version: "v1"}, NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { @@ -64,12 +64,12 @@ func TestCreateSecretGeneric(t *testing.T) { } func TestCreateSecretDockerRegistry(t *testing.T) { - secretObject := &api.Secret{} + secretObject := &v1.Secret{} secretObject.Name = "my-secret" f, tf, codec, ns := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.Client = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, + GroupVersion: schema.GroupVersion{Version: "v1"}, NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { diff --git a/pkg/kubectl/cmd/create_service.go b/pkg/kubectl/cmd/create_service.go index cdc28455775..52496a03b5e 100644 --- a/pkg/kubectl/cmd/create_service.go +++ b/pkg/kubectl/cmd/create_service.go @@ -21,7 +21,7 @@ import ( "github.com/spf13/cobra" - "k8s.io/kubernetes/pkg/api" + "k8s.io/api/core/v1" "k8s.io/kubernetes/pkg/kubectl" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" @@ -98,7 +98,7 @@ func CreateServiceClusterIP(f cmdutil.Factory, cmdOut io.Writer, cmd *cobra.Comm generator = &kubectl.ServiceCommonGeneratorV1{ Name: name, TCP: cmdutil.GetFlagStringSlice(cmd, "tcp"), - Type: api.ServiceTypeClusterIP, + Type: v1.ServiceTypeClusterIP, ClusterIP: cmdutil.GetFlagString(cmd, "clusterip"), } default: @@ -154,7 +154,7 @@ func CreateServiceNodePort(f cmdutil.Factory, cmdOut io.Writer, cmd *cobra.Comma generator = &kubectl.ServiceCommonGeneratorV1{ Name: name, TCP: cmdutil.GetFlagStringSlice(cmd, "tcp"), - Type: api.ServiceTypeNodePort, + Type: v1.ServiceTypeNodePort, ClusterIP: "", NodePort: cmdutil.GetFlagInt(cmd, "node-port"), } @@ -210,7 +210,7 @@ func CreateServiceLoadBalancer(f cmdutil.Factory, cmdOut io.Writer, cmd *cobra.C generator = &kubectl.ServiceCommonGeneratorV1{ Name: name, TCP: cmdutil.GetFlagStringSlice(cmd, "tcp"), - Type: api.ServiceTypeLoadBalancer, + Type: v1.ServiceTypeLoadBalancer, ClusterIP: "", } default: @@ -270,7 +270,7 @@ func CreateExternalNameService(f cmdutil.Factory, cmdOut io.Writer, cmd *cobra.C case cmdutil.ServiceExternalNameGeneratorV1Name: generator = &kubectl.ServiceCommonGeneratorV1{ Name: name, - Type: api.ServiceTypeExternalName, + Type: v1.ServiceTypeExternalName, ExternalName: cmdutil.GetFlagString(cmd, "external-name"), ClusterIP: "", } diff --git a/pkg/kubectl/cmd/create_service_test.go b/pkg/kubectl/cmd/create_service_test.go index 810be786f01..9e7e1bb5139 100644 --- a/pkg/kubectl/cmd/create_service_test.go +++ b/pkg/kubectl/cmd/create_service_test.go @@ -21,19 +21,19 @@ import ( "net/http" "testing" + "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/rest/fake" - "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" ) func TestCreateService(t *testing.T) { - service := &api.Service{} + service := &v1.Service{} service.Name = "my-service" f, tf, codec, negSer := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.Client = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, + GroupVersion: schema.GroupVersion{Version: "v1"}, NegotiatedSerializer: negSer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { @@ -58,12 +58,12 @@ func TestCreateService(t *testing.T) { } func TestCreateServiceNodePort(t *testing.T) { - service := &api.Service{} + service := &v1.Service{} service.Name = "my-node-port-service" f, tf, codec, negSer := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.Client = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, + GroupVersion: schema.GroupVersion{Version: "v1"}, NegotiatedSerializer: negSer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { @@ -88,12 +88,12 @@ func TestCreateServiceNodePort(t *testing.T) { } func TestCreateServiceExternalName(t *testing.T) { - service := &api.Service{} + service := &v1.Service{} service.Name = "my-external-name-service" f, tf, codec, negSer := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.Client = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, + GroupVersion: schema.GroupVersion{Version: "v1"}, NegotiatedSerializer: negSer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { diff --git a/pkg/kubectl/cmd/create_serviceaccount_test.go b/pkg/kubectl/cmd/create_serviceaccount_test.go index 64431e3e2b8..c510cb52e93 100644 --- a/pkg/kubectl/cmd/create_serviceaccount_test.go +++ b/pkg/kubectl/cmd/create_serviceaccount_test.go @@ -21,19 +21,19 @@ import ( "net/http" "testing" + "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/rest/fake" - "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" ) func TestCreateServiceAccount(t *testing.T) { - serviceAccountObject := &api.ServiceAccount{} + serviceAccountObject := &v1.ServiceAccount{} serviceAccountObject.Name = "my-service-account" f, tf, codec, ns := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.Client = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, + GroupVersion: schema.GroupVersion{Version: "v1"}, NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { diff --git a/pkg/kubectl/cmd/create_test.go b/pkg/kubectl/cmd/create_test.go index 94c2519ad2b..a554a17b901 100644 --- a/pkg/kubectl/cmd/create_test.go +++ b/pkg/kubectl/cmd/create_test.go @@ -21,9 +21,8 @@ import ( "net/http" "testing" + "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/rest/fake" - "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" ) @@ -48,7 +47,7 @@ func TestCreateObject(t *testing.T) { f, tf, codec, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, + GroupVersion: schema.GroupVersion{Version: "v1"}, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { @@ -82,7 +81,7 @@ func TestCreateMultipleObject(t *testing.T) { f, tf, codec, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, + GroupVersion: schema.GroupVersion{Version: "v1"}, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { @@ -120,7 +119,7 @@ func TestCreateDirectory(t *testing.T) { f, tf, codec, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, + GroupVersion: schema.GroupVersion{Version: "v1"}, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { diff --git a/pkg/kubectl/cmd/delete_test.go b/pkg/kubectl/cmd/delete_test.go index e7c82f1e266..bdedc203b46 100644 --- a/pkg/kubectl/cmd/delete_test.go +++ b/pkg/kubectl/cmd/delete_test.go @@ -32,10 +32,8 @@ import ( "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/dynamic" - restclient "k8s.io/client-go/rest" "k8s.io/client-go/rest/fake" "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/kubectl" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" @@ -58,7 +56,6 @@ func TestDeleteObjectByTuple(t *testing.T) { f, tf, codec, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { @@ -123,7 +120,6 @@ func TestOrphanDependentsInDeleteObject(t *testing.T) { tf.Printer = &testPrinter{} var expectedOrphanDependents *bool tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m, b := req.URL.Path, req.Method, req.Body; { @@ -172,7 +168,6 @@ func TestDeleteNamedObject(t *testing.T) { f, tf, codec, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { @@ -223,7 +218,6 @@ func TestDeleteObject(t *testing.T) { f, tf, codec, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { @@ -282,7 +276,6 @@ func TestDeleteObjectGraceZero(t *testing.T) { f, tf, codec, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { t.Logf("got request %s %s", req.Method, req.URL.Path) @@ -332,7 +325,6 @@ func TestDeleteObjectNotFound(t *testing.T) { f, tf, _, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { @@ -370,7 +362,6 @@ func TestDeleteObjectIgnoreNotFound(t *testing.T) { f, tf, _, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { @@ -408,7 +399,6 @@ func TestDeleteAllNotFound(t *testing.T) { tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { @@ -458,7 +448,6 @@ func TestDeleteAllIgnoreNotFound(t *testing.T) { tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { @@ -495,7 +484,6 @@ func TestDeleteMultipleObject(t *testing.T) { f, tf, codec, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { @@ -531,7 +519,6 @@ func TestDeleteMultipleObjectContinueOnMissing(t *testing.T) { f, tf, codec, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { @@ -576,7 +563,6 @@ func TestDeleteMultipleResourcesWithTheSameName(t *testing.T) { f, tf, codec, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { @@ -615,7 +601,6 @@ func TestDeleteDirectory(t *testing.T) { f, tf, codec, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { @@ -648,17 +633,16 @@ func TestDeleteMultipleSelector(t *testing.T) { f, tf, codec, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { case p == "/namespaces/test/pods" && m == "GET": - if req.URL.Query().Get(metav1.LabelSelectorQueryParam(legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion.String())) != "a=b" { + if req.URL.Query().Get(metav1.LabelSelectorQueryParam("v1")) != "a=b" { t.Fatalf("unexpected request: %#v\n%#v", req.URL, req) } return &http.Response{StatusCode: 200, Header: defaultHeader(), Body: objBody(codec, pods)}, nil case p == "/namespaces/test/services" && m == "GET": - if req.URL.Query().Get(metav1.LabelSelectorQueryParam(legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion.String())) != "a=b" { + if req.URL.Query().Get(metav1.LabelSelectorQueryParam("v1")) != "a=b" { t.Fatalf("unexpected request: %#v\n%#v", req.URL, req) } return &http.Response{StatusCode: 200, Header: defaultHeader(), Body: objBody(codec, svc)}, nil @@ -714,7 +698,7 @@ func TestResourceErrors(t *testing.T) { f, tf, _, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.Namespace = "test" - tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: &legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion}} + tf.ClientConfig = defaultClientConfig() buf, errBuf := bytes.NewBuffer([]byte{}), bytes.NewBuffer([]byte{}) diff --git a/pkg/kubectl/cmd/describe_test.go b/pkg/kubectl/cmd/describe_test.go index c40e88bafdf..2c3ec49c5c8 100644 --- a/pkg/kubectl/cmd/describe_test.go +++ b/pkg/kubectl/cmd/describe_test.go @@ -23,8 +23,6 @@ import ( "testing" "k8s.io/client-go/rest/fake" - "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" ) @@ -34,7 +32,6 @@ func TestDescribeUnknownSchemaObject(t *testing.T) { f, tf, codec, _ := cmdtesting.NewTestFactory() tf.Describer = d tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Resp: &http.Response{StatusCode: 200, Header: defaultHeader(), Body: objBody(codec, cmdtesting.NewInternalType("", "", "foo"))}, } @@ -59,7 +56,6 @@ func TestDescribeUnknownNamespacedSchemaObject(t *testing.T) { f, tf, codec, _ := cmdtesting.NewTestFactory() tf.Describer = d tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Resp: &http.Response{StatusCode: 200, Header: defaultHeader(), Body: objBody(codec, cmdtesting.NewInternalNamespacedType("", "", "foo", "non-default"))}, } @@ -84,7 +80,6 @@ func TestDescribeObject(t *testing.T) { d := &testDescriber{Output: "test output"} tf.Describer = d tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { @@ -118,7 +113,6 @@ func TestDescribeListObjects(t *testing.T) { d := &testDescriber{Output: "test output"} tf.Describer = d tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Resp: &http.Response{StatusCode: 200, Header: defaultHeader(), Body: objBody(codec, pods)}, } @@ -139,7 +133,6 @@ func TestDescribeObjectShowEvents(t *testing.T) { d := &testDescriber{Output: "test output"} tf.Describer = d tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Resp: &http.Response{StatusCode: 200, Header: defaultHeader(), Body: objBody(codec, pods)}, } @@ -161,7 +154,6 @@ func TestDescribeObjectSkipEvents(t *testing.T) { d := &testDescriber{Output: "test output"} tf.Describer = d tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Resp: &http.Response{StatusCode: 200, Header: defaultHeader(), Body: objBody(codec, pods)}, } diff --git a/pkg/kubectl/cmd/edit_test.go b/pkg/kubectl/cmd/edit_test.go index 86792766935..4362826cc38 100644 --- a/pkg/kubectl/cmd/edit_test.go +++ b/pkg/kubectl/cmd/edit_test.go @@ -36,8 +36,6 @@ import ( "k8s.io/apimachinery/pkg/util/diff" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/client-go/rest/fake" - "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/resource" @@ -218,7 +216,6 @@ func TestEdit(t *testing.T) { versionedAPIPath = "/apis/" + mapping.GroupVersionKind.Group + "/" + mapping.GroupVersionKind.Version } return &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, VersionedAPIPath: versionedAPIPath, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(reqResp), diff --git a/pkg/kubectl/cmd/exec_test.go b/pkg/kubectl/cmd/exec_test.go index 3eb751167c3..46c006eed1b 100644 --- a/pkg/kubectl/cmd/exec_test.go +++ b/pkg/kubectl/cmd/exec_test.go @@ -34,7 +34,6 @@ import ( "k8s.io/client-go/rest/fake" "k8s.io/client-go/tools/remotecommand" "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" "k8s.io/kubernetes/pkg/kubectl/util/term" ) @@ -131,7 +130,6 @@ func TestPodAndContainer(t *testing.T) { for _, test := range tests { f, tf, _, ns := cmdtesting.NewAPIFactory() tf.Client = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { return nil, nil }), } @@ -163,7 +161,7 @@ func TestPodAndContainer(t *testing.T) { } func TestExec(t *testing.T) { - version := legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion.Version + version := "v1" tests := []struct { name, podPath, execPath, container string pod *api.Pod @@ -186,7 +184,6 @@ func TestExec(t *testing.T) { for _, test := range tests { f, tf, codec, ns := cmdtesting.NewAPIFactory() tf.Client = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { diff --git a/pkg/kubectl/cmd/explain.go b/pkg/kubectl/cmd/explain.go index 5a298dbb1ea..ec9d07ba53e 100644 --- a/pkg/kubectl/cmd/explain.go +++ b/pkg/kubectl/cmd/explain.go @@ -23,10 +23,10 @@ import ( "github.com/spf13/cobra" "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/explain" + "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/util/i18n" ) @@ -99,7 +99,7 @@ func RunExplain(f cmdutil.Factory, out, cmdErr io.Writer, cmd *cobra.Command, ar } if len(apiVersionString) == 0 { - groupMeta, err := legacyscheme.Registry.Group(gvk.Group) + groupMeta, err := scheme.Registry.Group(gvk.Group) if err != nil { return err } diff --git a/pkg/kubectl/cmd/expose_test.go b/pkg/kubectl/cmd/expose_test.go index e2f62be3d56..9dbd6976635 100644 --- a/pkg/kubectl/cmd/expose_test.go +++ b/pkg/kubectl/cmd/expose_test.go @@ -25,14 +25,20 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/intstr" "k8s.io/client-go/rest/fake" "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" + "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/printers" ) +// This init should be removed after switching this command and its tests to user external types. +func init() { + api.AddToScheme(scheme.Scheme) +} + func TestRunExposeService(t *testing.T) { tests := []struct { name string @@ -463,7 +469,7 @@ func TestRunExposeService(t *testing.T) { f, tf, codec, ns := cmdtesting.NewAPIFactory() tf.Printer = &printers.JSONPrinter{} tf.Client = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, + GroupVersion: schema.GroupVersion{Version: "v1"}, NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { diff --git a/pkg/kubectl/cmd/get_test.go b/pkg/kubectl/cmd/get_test.go index 624d5721c06..bc5b5569cb6 100644 --- a/pkg/kubectl/cmd/get_test.go +++ b/pkg/kubectl/cmd/get_test.go @@ -40,13 +40,21 @@ import ( restclientwatch "k8s.io/client-go/rest/watch" "k8s.io/kube-openapi/pkg/util/proto" "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/api/testapi" apitesting "k8s.io/kubernetes/pkg/api/testing" + "k8s.io/kubernetes/pkg/api/v1" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" "k8s.io/kubernetes/pkg/kubectl/cmd/util/openapi" + "k8s.io/kubernetes/pkg/kubectl/scheme" ) +// This init should be removed after switching this command and its tests to user external types. +func init() { + api.AddToScheme(scheme.Scheme) + scheme.Scheme.AddConversionFuncs(v1.Convert_api_PodSpec_To_v1_PodSpec) + scheme.Scheme.AddConversionFuncs(v1.Convert_v1_PodSecurityContext_To_api_PodSecurityContext) +} + func testData() (*api.PodList, *api.ServiceList, *api.ReplicationControllerList) { pods := &api.PodList{ ListMeta: metav1.ListMeta{ @@ -126,12 +134,11 @@ func TestGetUnknownSchemaObject(t *testing.T) { _, _, codec, _ := cmdtesting.NewTestFactory() tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Resp: &http.Response{StatusCode: 200, Header: defaultHeader(), Body: objBody(codec, cmdtesting.NewInternalType("", "", "foo"))}, } tf.Namespace = "test" - tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: &legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion}} + tf.ClientConfig = defaultClientConfig() buf := bytes.NewBuffer([]byte{}) errBuf := bytes.NewBuffer([]byte{}) @@ -151,7 +158,7 @@ func TestGetUnknownSchemaObject(t *testing.T) { t.Fatal(err) } - actualJSON := runtime.EncodeOrDie(legacyscheme.Codecs.LegacyCodec(), obj) + actualJSON := runtime.EncodeOrDie(scheme.Codecs.LegacyCodec(), obj) actualMap := map[string]interface{}{} if err := encjson.Unmarshal([]byte(actualJSON), &actualMap); err != nil { t.Fatal(err) @@ -167,16 +174,15 @@ func TestGetUnknownSchemaObject(t *testing.T) { func TestGetSchemaObject(t *testing.T) { f, tf, _, _ := cmdtesting.NewAPIFactory() tf.Mapper = testapi.Default.RESTMapper() - tf.Typer = legacyscheme.Scheme + tf.Typer = scheme.Scheme codec := testapi.Default.Codec() tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Resp: &http.Response{StatusCode: 200, Header: defaultHeader(), Body: objBody(codec, &api.ReplicationController{ObjectMeta: metav1.ObjectMeta{Name: "foo"}})}, } tf.Namespace = "test" - tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: &schema.GroupVersion{Version: "v1"}}} + tf.ClientConfig = defaultClientConfig() buf := bytes.NewBuffer([]byte{}) errBuf := bytes.NewBuffer([]byte{}) @@ -197,7 +203,6 @@ func TestGetObjectsWithOpenAPIOutputFormatPresent(t *testing.T) { // for Pod type. tf.OpenAPISchemaFunc = testOpenAPISchemaData tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Resp: &http.Response{StatusCode: 200, Header: defaultHeader(), Body: objBody(codec, &pods.Items[0])}, } @@ -251,7 +256,6 @@ func TestGetObjects(t *testing.T) { f, tf, codec, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Resp: &http.Response{StatusCode: 200, Header: defaultHeader(), Body: objBody(codec, &pods.Items[0])}, } @@ -303,7 +307,7 @@ func TestGetObjectsFiltered(t *testing.T) { f, tf, codec, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{GenericPrinter: test.genericPrinter} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, + GroupVersion: schema.GroupVersion{Version: "v1"}, NegotiatedSerializer: unstructuredSerializer, Resp: &http.Response{StatusCode: 200, Header: defaultHeader(), Body: objBody(codec, test.resp)}, } @@ -344,7 +348,6 @@ func TestGetObjectIgnoreNotFound(t *testing.T) { f, tf, codec, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{GenericPrinter: true} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { @@ -397,7 +400,6 @@ func TestGetSortedObjects(t *testing.T) { f, tf, codec, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Resp: &http.Response{StatusCode: 200, Header: defaultHeader(), Body: objBody(codec, pods)}, } @@ -434,8 +436,8 @@ func verifyObjects(t *testing.T, expected, actual []runtime.Object) { switch obj.(type) { case runtime.Unstructured, *runtime.Unknown: actualObj, err = runtime.Decode( - legacyscheme.Codecs.UniversalDecoder(), - []byte(runtime.EncodeOrDie(legacyscheme.Codecs.LegacyCodec(), obj))) + scheme.Codecs.UniversalDecoder(), + []byte(runtime.EncodeOrDie(scheme.Codecs.LegacyCodec(), obj))) default: actualObj = obj err = nil @@ -456,7 +458,6 @@ func TestGetObjectsIdentifiedByFile(t *testing.T) { f, tf, codec, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{GenericPrinter: true} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Resp: &http.Response{StatusCode: 200, Header: defaultHeader(), Body: objBody(codec, &pods.Items[0])}, } @@ -483,7 +484,6 @@ func TestGetListObjects(t *testing.T) { f, tf, codec, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Resp: &http.Response{StatusCode: 200, Header: defaultHeader(), Body: objBody(codec, pods)}, } @@ -524,7 +524,6 @@ func TestGetAllListObjects(t *testing.T) { f, tf, codec, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Resp: &http.Response{StatusCode: 200, Header: defaultHeader(), Body: objBody(codec, pods)}, } @@ -554,7 +553,6 @@ func TestGetListComponentStatus(t *testing.T) { f, tf, codec, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Resp: &http.Response{StatusCode: 200, Header: defaultHeader(), Body: objBody(codec, statuses)}, } @@ -596,7 +594,6 @@ func TestGetMixedGenericObjects(t *testing.T) { f, tf, codec, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{GenericPrinter: true} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch req.URL.Path { @@ -609,7 +606,7 @@ func TestGetMixedGenericObjects(t *testing.T) { }), } tf.Namespace = "test" - tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: &legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion}} + tf.ClientConfig = defaultClientConfig() buf := bytes.NewBuffer([]byte{}) errBuf := bytes.NewBuffer([]byte{}) @@ -624,7 +621,7 @@ func TestGetMixedGenericObjects(t *testing.T) { actual := tf.Printer.(*testPrinter).Objects fn := func(obj runtime.Object) unstructured.Unstructured { - data, err := runtime.Encode(legacyscheme.Codecs.LegacyCodec(schema.GroupVersion{Version: "v1"}), obj) + data, err := runtime.Encode(scheme.Codecs.LegacyCodec(schema.GroupVersion{Version: "v1"}), obj) if err != nil { panic(err) } @@ -660,7 +657,6 @@ func TestGetMultipleTypeObjects(t *testing.T) { f, tf, codec, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch req.URL.Path { @@ -699,7 +695,6 @@ func TestGetMultipleTypeObjectsAsList(t *testing.T) { f, tf, codec, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{GenericPrinter: true} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch req.URL.Path { @@ -714,7 +709,7 @@ func TestGetMultipleTypeObjectsAsList(t *testing.T) { }), } tf.Namespace = "test" - tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: &legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion}} + tf.ClientConfig = defaultClientConfig() buf := bytes.NewBuffer([]byte{}) errBuf := bytes.NewBuffer([]byte{}) @@ -726,7 +721,7 @@ func TestGetMultipleTypeObjectsAsList(t *testing.T) { actual := tf.Printer.(*testPrinter).Objects fn := func(obj runtime.Object) unstructured.Unstructured { - data, err := runtime.Encode(legacyscheme.Codecs.LegacyCodec(schema.GroupVersion{Version: "v1"}), obj) + data, err := runtime.Encode(scheme.Codecs.LegacyCodec(schema.GroupVersion{Version: "v1"}), obj) if err != nil { t.Fatal(err) } @@ -764,10 +759,9 @@ func TestGetMultipleTypeObjectsWithSelector(t *testing.T) { f, tf, codec, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { - if req.URL.Query().Get(metav1.LabelSelectorQueryParam(legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion.String())) != "a=b" { + if req.URL.Query().Get(metav1.LabelSelectorQueryParam("v1")) != "a=b" { t.Fatalf("request url: %#v,and request: %#v", req.URL, req) } switch req.URL.Path { @@ -816,7 +810,6 @@ func TestGetMultipleTypeObjectsWithDirectReference(t *testing.T) { f, tf, codec, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch req.URL.Path { @@ -853,7 +846,6 @@ func TestGetByFormatForcesFlag(t *testing.T) { f, tf, codec, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{GenericPrinter: true} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Resp: &http.Response{StatusCode: 200, Header: defaultHeader(), Body: objBody(codec, &pods.Items[0])}, } @@ -954,10 +946,9 @@ func TestWatchSelector(t *testing.T) { }, } tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { - if req.URL.Query().Get(metav1.LabelSelectorQueryParam(legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion.String())) != "a=b" { + if req.URL.Query().Get(metav1.LabelSelectorQueryParam("v1")) != "a=b" { t.Fatalf("request url: %#v,and request: %#v", req.URL, req) } switch req.URL.Path { @@ -998,7 +989,6 @@ func TestWatchResource(t *testing.T) { f, tf, codec, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch req.URL.Path { @@ -1040,7 +1030,6 @@ func TestWatchResourceIdentifiedByFile(t *testing.T) { f, tf, codec, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch req.URL.Path { @@ -1083,7 +1072,6 @@ func TestWatchOnlyResource(t *testing.T) { f, tf, codec, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch req.URL.Path { @@ -1131,7 +1119,6 @@ func TestWatchOnlyList(t *testing.T) { }, } tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch req.URL.Path { diff --git a/pkg/kubectl/cmd/label_test.go b/pkg/kubectl/cmd/label_test.go index ee591d459fc..18e60fbbc55 100644 --- a/pkg/kubectl/cmd/label_test.go +++ b/pkg/kubectl/cmd/label_test.go @@ -25,10 +25,8 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" - restclient "k8s.io/client-go/rest" "k8s.io/client-go/rest/fake" "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" "k8s.io/kubernetes/pkg/kubectl/resource" ) @@ -324,7 +322,7 @@ func TestLabelErrors(t *testing.T) { f, tf, _, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.Namespace = "test" - tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: &legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion}} + tf.ClientConfig = defaultClientConfig() buf := bytes.NewBuffer([]byte{}) cmd := NewCmdLabel(f, buf) @@ -358,7 +356,6 @@ func TestLabelForResourceFromFile(t *testing.T) { pods, _, _ := testData() f, tf, codec, _ := cmdtesting.NewAPIFactory() tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch req.Method { @@ -385,7 +382,7 @@ func TestLabelForResourceFromFile(t *testing.T) { }), } tf.Namespace = "test" - tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: &legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion}} + tf.ClientConfig = defaultClientConfig() buf := bytes.NewBuffer([]byte{}) cmd := NewCmdLabel(f, buf) @@ -409,7 +406,6 @@ func TestLabelForResourceFromFile(t *testing.T) { func TestLabelLocal(t *testing.T) { f, tf, _, _ := cmdtesting.NewAPIFactory() tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { t.Fatalf("unexpected request: %s %#v\n%#v", req.Method, req.URL, req) @@ -417,7 +413,7 @@ func TestLabelLocal(t *testing.T) { }), } tf.Namespace = "test" - tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: &legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion}} + tf.ClientConfig = defaultClientConfig() buf := bytes.NewBuffer([]byte{}) cmd := NewCmdLabel(f, buf) @@ -443,7 +439,6 @@ func TestLabelMultipleObjects(t *testing.T) { pods, _, _ := testData() f, tf, codec, _ := cmdtesting.NewAPIFactory() tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch req.Method { @@ -472,7 +467,7 @@ func TestLabelMultipleObjects(t *testing.T) { }), } tf.Namespace = "test" - tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: &legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion}} + tf.ClientConfig = defaultClientConfig() buf := bytes.NewBuffer([]byte{}) cmd := NewCmdLabel(f, buf) diff --git a/pkg/kubectl/cmd/logs_test.go b/pkg/kubectl/cmd/logs_test.go index 65c06bcbdc8..ed7100fd0fd 100644 --- a/pkg/kubectl/cmd/logs_test.go +++ b/pkg/kubectl/cmd/logs_test.go @@ -27,11 +27,8 @@ import ( "github.com/spf13/cobra" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime/schema" - restclient "k8s.io/client-go/rest" "k8s.io/client-go/rest/fake" "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" ) @@ -52,7 +49,6 @@ func TestLog(t *testing.T) { logContent := "test log content" f, tf, codec, ns := cmdtesting.NewAPIFactory() tf.Client = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { @@ -70,7 +66,7 @@ func TestLog(t *testing.T) { }), } tf.Namespace = "test" - tf.ClientConfig = &restclient.Config{APIPath: "/api", ContentConfig: restclient.ContentConfig{NegotiatedSerializer: legacyscheme.Codecs, GroupVersion: &schema.GroupVersion{Version: test.version}}} + tf.ClientConfig = defaultClientConfig() buf := bytes.NewBuffer([]byte{}) cmd := NewCmdLogs(f, buf) diff --git a/pkg/kubectl/cmd/patch.go b/pkg/kubectl/cmd/patch.go index 6fc924bb617..ddd4e130a75 100644 --- a/pkg/kubectl/cmd/patch.go +++ b/pkg/kubectl/cmd/patch.go @@ -34,11 +34,11 @@ import ( "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/strategicpatch" "k8s.io/apimachinery/pkg/util/yaml" - "k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/kubectl" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/resource" + "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/printers" ) @@ -249,7 +249,7 @@ func RunPatch(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []strin return err } - originalPatchedObjJS, err := getPatchedJSON(patchType, originalObjJS, patchBytes, mapping.GroupVersionKind, legacyscheme.Scheme) + originalPatchedObjJS, err := getPatchedJSON(patchType, originalObjJS, patchBytes, mapping.GroupVersionKind, scheme.Scheme) if err != nil { return err } diff --git a/pkg/kubectl/cmd/patch_test.go b/pkg/kubectl/cmd/patch_test.go index 0b46aed160b..f9692a9770c 100644 --- a/pkg/kubectl/cmd/patch_test.go +++ b/pkg/kubectl/cmd/patch_test.go @@ -23,8 +23,6 @@ import ( "testing" "k8s.io/client-go/rest/fake" - "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" "k8s.io/kubernetes/pkg/printers" ) @@ -34,7 +32,6 @@ func TestPatchObject(t *testing.T) { f, tf, codec, _ := cmdtesting.NewAPIFactory() tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { @@ -73,7 +70,6 @@ func TestPatchObjectFromFile(t *testing.T) { f, tf, codec, _ := cmdtesting.NewAPIFactory() tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { @@ -108,7 +104,6 @@ func TestPatchNoop(t *testing.T) { f, tf, codec, _ := cmdtesting.NewAPIFactory() tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { @@ -154,7 +149,6 @@ func TestPatchObjectFromFileOutput(t *testing.T) { f, tf, codec, _ := cmdtesting.NewAPIFactory() tf.Printer = &printers.YAMLPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { diff --git a/pkg/kubectl/cmd/portforward_test.go b/pkg/kubectl/cmd/portforward_test.go index dfae45575a0..e92eb91b159 100644 --- a/pkg/kubectl/cmd/portforward_test.go +++ b/pkg/kubectl/cmd/portforward_test.go @@ -25,9 +25,9 @@ import ( "github.com/spf13/cobra" + "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/rest/fake" "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" ) @@ -44,7 +44,7 @@ func (f *fakePortForwarder) ForwardPorts(method string, url *url.URL, opts PortF } func testPortForward(t *testing.T, flags map[string]string, args []string) { - version := legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion.Version + version := "v1" tests := []struct { name string @@ -70,7 +70,7 @@ func testPortForward(t *testing.T, flags map[string]string, args []string) { var err error f, tf, codec, ns := cmdtesting.NewAPIFactory() tf.Client = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, + GroupVersion: schema.GroupVersion{Group: ""}, NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { diff --git a/pkg/kubectl/cmd/replace_test.go b/pkg/kubectl/cmd/replace_test.go index 86a87e02c9d..b00c8b7932c 100644 --- a/pkg/kubectl/cmd/replace_test.go +++ b/pkg/kubectl/cmd/replace_test.go @@ -24,7 +24,6 @@ import ( "k8s.io/client-go/rest/fake" "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" ) @@ -35,7 +34,6 @@ func TestReplaceObject(t *testing.T) { tf.Printer = &testPrinter{} deleted := false tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { @@ -92,7 +90,6 @@ func TestReplaceMultipleObject(t *testing.T) { redisMasterDeleted := false frontendDeleted := false tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { @@ -161,7 +158,6 @@ func TestReplaceDirectory(t *testing.T) { tf.Printer = &testPrinter{} created := map[string]bool{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { @@ -217,7 +213,6 @@ func TestForceReplaceObjectNotFound(t *testing.T) { f, tf, codec, _ := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.UnstructuredClient = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { diff --git a/pkg/kubectl/cmd/run_test.go b/pkg/kubectl/cmd/run_test.go index a9360c744e5..de6fcee8270 100644 --- a/pkg/kubectl/cmd/run_test.go +++ b/pkg/kubectl/cmd/run_test.go @@ -36,12 +36,17 @@ import ( restclient "k8s.io/client-go/rest" "k8s.io/client-go/rest/fake" "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" + "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/util/i18n" ) +// This init should be removed after switching this command and its tests to user external types. +func init() { + api.AddToScheme(scheme.Scheme) +} + func TestGetRestartPolicy(t *testing.T) { tests := []struct { input string @@ -164,7 +169,7 @@ func TestRunArgsFollowDashRules(t *testing.T) { for _, test := range tests { f, tf, codec, ns := cmdtesting.NewAPIFactory() tf.Client = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, + GroupVersion: schema.GroupVersion{Version: "v1"}, NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { if req.URL.Path == "/namespaces/test/replicationcontrollers" { @@ -285,10 +290,10 @@ func TestGenerateService(t *testing.T) { for _, test := range tests { sawPOST := false f, tf, codec, ns := cmdtesting.NewAPIFactory() - tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: &legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion}} + tf.ClientConfig = defaultClientConfig() tf.Printer = &testPrinter{} tf.Client = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, + GroupVersion: schema.GroupVersion{Version: "v1"}, NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { @@ -429,12 +434,11 @@ func TestRunValidations(t *testing.T) { f, tf, codec, ns := cmdtesting.NewTestFactory() tf.Printer = &testPrinter{} tf.Client = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: ns, Resp: &http.Response{StatusCode: 200, Header: defaultHeader(), Body: objBody(codec, cmdtesting.NewInternalType("", "", ""))}, } tf.Namespace = "test" - tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: &schema.GroupVersion{Version: "v1"}}} + tf.ClientConfig = defaultClientConfig() inBuf := bytes.NewReader([]byte{}) outBuf := bytes.NewBuffer([]byte{}) errBuf := bytes.NewBuffer([]byte{}) diff --git a/pkg/kubectl/cmd/taint_test.go b/pkg/kubectl/cmd/taint_test.go index cc2b43e7035..8e901364943 100644 --- a/pkg/kubectl/cmd/taint_test.go +++ b/pkg/kubectl/cmd/taint_test.go @@ -29,8 +29,6 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/strategicpatch" "k8s.io/client-go/rest/fake" - "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" ) @@ -243,7 +241,6 @@ func TestTaint(t *testing.T) { f, tf, codec, ns := cmdtesting.NewAPIFactory() tf.Client = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { m := &MyReq{req} diff --git a/pkg/kubectl/cmd/top_node_test.go b/pkg/kubectl/cmd/top_node_test.go index b7da9ae493d..0d13a409c6a 100644 --- a/pkg/kubectl/cmd/top_node_test.go +++ b/pkg/kubectl/cmd/top_node_test.go @@ -27,7 +27,6 @@ import ( "k8s.io/client-go/rest/fake" "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" "k8s.io/metrics/pkg/apis/metrics/v1alpha1" ) @@ -46,7 +45,6 @@ func TestTopNodeAllMetrics(t *testing.T) { f, tf, codec, ns := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.Client = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { @@ -92,7 +90,6 @@ func TestTopNodeAllMetricsCustomDefaults(t *testing.T) { f, tf, codec, ns := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.Client = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { @@ -148,7 +145,6 @@ func TestTopNodeWithNameMetrics(t *testing.T) { f, tf, codec, ns := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.Client = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m := req.URL.Path, req.Method; { @@ -208,7 +204,6 @@ func TestTopNodeWithLabelSelectorMetrics(t *testing.T) { f, tf, codec, ns := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.Client = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m, q := req.URL.Path, req.Method, req.URL.RawQuery; { diff --git a/pkg/kubectl/cmd/top_pod_test.go b/pkg/kubectl/cmd/top_pod_test.go index 43d0666855a..94bca7ec3ed 100644 --- a/pkg/kubectl/cmd/top_pod_test.go +++ b/pkg/kubectl/cmd/top_pod_test.go @@ -29,8 +29,6 @@ import ( "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/rest/fake" - "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" metricsapi "k8s.io/metrics/pkg/apis/metrics/v1alpha1" ) @@ -119,7 +117,6 @@ func TestTopPod(t *testing.T) { f, tf, _, ns := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.Client = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m, q := req.URL.Path, req.Method, req.URL.RawQuery; { @@ -255,7 +252,6 @@ func TestTopPodCustomDefaults(t *testing.T) { f, tf, _, ns := cmdtesting.NewAPIFactory() tf.Printer = &testPrinter{} tf.Client = &fake.RESTClient{ - GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { switch p, m, q := req.URL.Path, req.Method, req.URL.RawQuery; { diff --git a/pkg/kubectl/cmd/util/editor/BUILD b/pkg/kubectl/cmd/util/editor/BUILD index 3a11ffd1c67..0e1c430d14b 100644 --- a/pkg/kubectl/cmd/util/editor/BUILD +++ b/pkg/kubectl/cmd/util/editor/BUILD @@ -16,10 +16,10 @@ go_library( ], deps = [ "//pkg/api:go_default_library", - "//pkg/api/legacyscheme:go_default_library", "//pkg/kubectl:go_default_library", "//pkg/kubectl/cmd/util:go_default_library", "//pkg/kubectl/resource:go_default_library", + "//pkg/kubectl/scheme:go_default_library", "//pkg/kubectl/util/crlf:go_default_library", "//pkg/kubectl/util/term:go_default_library", "//pkg/printers:go_default_library", diff --git a/pkg/kubectl/cmd/util/editor/editoptions.go b/pkg/kubectl/cmd/util/editor/editoptions.go index 0014dec74c0..a17e502f113 100644 --- a/pkg/kubectl/cmd/util/editor/editoptions.go +++ b/pkg/kubectl/cmd/util/editor/editoptions.go @@ -42,10 +42,10 @@ import ( "k8s.io/apimachinery/pkg/util/validation/field" "k8s.io/apimachinery/pkg/util/yaml" "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/kubectl" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/resource" + "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/util/crlf" "k8s.io/kubernetes/pkg/printers" ) @@ -548,7 +548,7 @@ func (o *EditOptions) visitToPatch(originalInfos []*resource.Info, patchVisitor // Create the versioned struct from the type defined in the mapping // (which is the API version we'll be submitting the patch to) - versionedObject, err := legacyscheme.Scheme.New(info.Mapping.GroupVersionKind) + versionedObject, err := scheme.Scheme.New(info.Mapping.GroupVersionKind) var patchType types.PatchType var patch []byte switch { diff --git a/pkg/kubectl/configmap.go b/pkg/kubectl/configmap.go index cc73d690adb..8d1ef5281ed 100644 --- a/pkg/kubectl/configmap.go +++ b/pkg/kubectl/configmap.go @@ -23,9 +23,9 @@ import ( "path" "strings" + "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/validation" - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/kubectl/util" "k8s.io/kubernetes/pkg/kubectl/util/hash" ) @@ -127,7 +127,7 @@ func (s ConfigMapGeneratorV1) StructuredGenerate() (runtime.Object, error) { if err := s.validate(); err != nil { return nil, err } - configMap := &api.ConfigMap{} + configMap := &v1.ConfigMap{} configMap.Name = s.Name configMap.Data = map[string]string{} if len(s.FileSources) > 0 { @@ -168,7 +168,7 @@ func (s ConfigMapGeneratorV1) validate() error { // handleConfigMapFromLiteralSources adds the specified literal source // information into the provided configMap. -func handleConfigMapFromLiteralSources(configMap *api.ConfigMap, literalSources []string) error { +func handleConfigMapFromLiteralSources(configMap *v1.ConfigMap, literalSources []string) error { for _, literalSource := range literalSources { keyName, value, err := util.ParseLiteralSource(literalSource) if err != nil { @@ -184,7 +184,7 @@ func handleConfigMapFromLiteralSources(configMap *api.ConfigMap, literalSources // handleConfigMapFromFileSources adds the specified file source information // into the provided configMap -func handleConfigMapFromFileSources(configMap *api.ConfigMap, fileSources []string) error { +func handleConfigMapFromFileSources(configMap *v1.ConfigMap, fileSources []string) error { for _, fileSource := range fileSources { keyName, filePath, err := util.ParseFileSource(fileSource) if err != nil { @@ -229,7 +229,7 @@ func handleConfigMapFromFileSources(configMap *api.ConfigMap, fileSources []stri // handleConfigMapFromEnvFileSource adds the specified env file source information // into the provided configMap -func handleConfigMapFromEnvFileSource(configMap *api.ConfigMap, envFileSource string) error { +func handleConfigMapFromEnvFileSource(configMap *v1.ConfigMap, envFileSource string) error { info, err := os.Stat(envFileSource) if err != nil { switch err := err.(type) { @@ -250,7 +250,7 @@ func handleConfigMapFromEnvFileSource(configMap *api.ConfigMap, envFileSource st // addKeyFromFileToConfigMap adds a key with the given name to a ConfigMap, populating // the value with the content of the given file path, or returns an error. -func addKeyFromFileToConfigMap(configMap *api.ConfigMap, keyName, filePath string) error { +func addKeyFromFileToConfigMap(configMap *v1.ConfigMap, keyName, filePath string) error { data, err := ioutil.ReadFile(filePath) if err != nil { return err @@ -260,7 +260,7 @@ func addKeyFromFileToConfigMap(configMap *api.ConfigMap, keyName, filePath strin // addKeyFromLiteralToConfigMap adds the given key and data to the given config map, // returning an error if the key is not valid or if the key already exists. -func addKeyFromLiteralToConfigMap(configMap *api.ConfigMap, keyName, data string) error { +func addKeyFromLiteralToConfigMap(configMap *v1.ConfigMap, keyName, data string) error { // Note, the rules for ConfigMap keys are the exact same as the ones for SecretKeys. if errs := validation.IsConfigMapKey(keyName); len(errs) != 0 { return fmt.Errorf("%q is not a valid key name for a ConfigMap: %s", keyName, strings.Join(errs, ";")) diff --git a/pkg/kubectl/configmap_test.go b/pkg/kubectl/configmap_test.go index 74a85a89eb9..05007dfb4af 100644 --- a/pkg/kubectl/configmap_test.go +++ b/pkg/kubectl/configmap_test.go @@ -22,22 +22,22 @@ import ( "reflect" "testing" + "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/kubernetes/pkg/api" ) func TestConfigMapGenerate(t *testing.T) { tests := []struct { setup func(t *testing.T, params map[string]interface{}) func() params map[string]interface{} - expected *api.ConfigMap + expected *v1.ConfigMap expectErr bool }{ { params: map[string]interface{}{ "name": "foo", }, - expected: &api.ConfigMap{ + expected: &v1.ConfigMap{ ObjectMeta: metav1.ObjectMeta{ Name: "foo", }, @@ -50,7 +50,7 @@ func TestConfigMapGenerate(t *testing.T) { "name": "foo", "append-hash": true, }, - expected: &api.ConfigMap{ + expected: &v1.ConfigMap{ ObjectMeta: metav1.ObjectMeta{ Name: "foo-867km9574f", }, @@ -63,7 +63,7 @@ func TestConfigMapGenerate(t *testing.T) { "name": "foo", "type": "my-type", }, - expected: &api.ConfigMap{ + expected: &v1.ConfigMap{ ObjectMeta: metav1.ObjectMeta{ Name: "foo", }, @@ -77,7 +77,7 @@ func TestConfigMapGenerate(t *testing.T) { "type": "my-type", "append-hash": true, }, - expected: &api.ConfigMap{ + expected: &v1.ConfigMap{ ObjectMeta: metav1.ObjectMeta{ Name: "foo-867km9574f", }, @@ -90,7 +90,7 @@ func TestConfigMapGenerate(t *testing.T) { "name": "foo", "from-literal": []string{"key1=value1", "key2=value2"}, }, - expected: &api.ConfigMap{ + expected: &v1.ConfigMap{ ObjectMeta: metav1.ObjectMeta{ Name: "foo", }, @@ -107,7 +107,7 @@ func TestConfigMapGenerate(t *testing.T) { "from-literal": []string{"key1=value1", "key2=value2"}, "append-hash": true, }, - expected: &api.ConfigMap{ + expected: &v1.ConfigMap{ ObjectMeta: metav1.ObjectMeta{ Name: "foo-gcb75dd9gb", }, @@ -144,7 +144,7 @@ func TestConfigMapGenerate(t *testing.T) { "name": "foo", "from-literal": []string{"key1==value1"}, }, - expected: &api.ConfigMap{ + expected: &v1.ConfigMap{ ObjectMeta: metav1.ObjectMeta{ Name: "foo", }, @@ -160,7 +160,7 @@ func TestConfigMapGenerate(t *testing.T) { "from-literal": []string{"key1==value1"}, "append-hash": true, }, - expected: &api.ConfigMap{ + expected: &v1.ConfigMap{ ObjectMeta: metav1.ObjectMeta{ Name: "foo-bdgk9ttt7m", }, @@ -176,7 +176,7 @@ func TestConfigMapGenerate(t *testing.T) { "name": "valid_env", "from-env-file": "file.env", }, - expected: &api.ConfigMap{ + expected: &v1.ConfigMap{ ObjectMeta: metav1.ObjectMeta{ Name: "valid_env", }, @@ -194,7 +194,7 @@ func TestConfigMapGenerate(t *testing.T) { "from-env-file": "file.env", "append-hash": true, }, - expected: &api.ConfigMap{ + expected: &v1.ConfigMap{ ObjectMeta: metav1.ObjectMeta{ Name: "valid_env-2cgh8552ch", }, @@ -215,7 +215,7 @@ func TestConfigMapGenerate(t *testing.T) { "name": "getenv", "from-env-file": "file.env", }, - expected: &api.ConfigMap{ + expected: &v1.ConfigMap{ ObjectMeta: metav1.ObjectMeta{ Name: "getenv", }, @@ -237,7 +237,7 @@ func TestConfigMapGenerate(t *testing.T) { "from-env-file": "file.env", "append-hash": true, }, - expected: &api.ConfigMap{ + expected: &v1.ConfigMap{ ObjectMeta: metav1.ObjectMeta{ Name: "getenv-b4hh92hgdk", }, @@ -270,7 +270,7 @@ func TestConfigMapGenerate(t *testing.T) { "name": "with_spaces", "from-env-file": "file.env", }, - expected: &api.ConfigMap{ + expected: &v1.ConfigMap{ ObjectMeta: metav1.ObjectMeta{ Name: "with_spaces", }, @@ -287,7 +287,7 @@ func TestConfigMapGenerate(t *testing.T) { "from-env-file": "file.env", "append-hash": true, }, - expected: &api.ConfigMap{ + expected: &v1.ConfigMap{ ObjectMeta: metav1.ObjectMeta{ Name: "with_spaces-bfc558b4ct", }, @@ -312,8 +312,8 @@ func TestConfigMapGenerate(t *testing.T) { if test.expectErr && err != nil { continue } - if !reflect.DeepEqual(obj.(*api.ConfigMap), test.expected) { - t.Errorf("\ncase %d, expected:\n%#v\nsaw:\n%#v", i, test.expected, obj.(*api.ConfigMap)) + if !reflect.DeepEqual(obj.(*v1.ConfigMap), test.expected) { + t.Errorf("\ncase %d, expected:\n%#v\nsaw:\n%#v", i, test.expected, obj.(*v1.ConfigMap)) } } } diff --git a/pkg/kubectl/pdb.go b/pkg/kubectl/pdb.go index 08d8a74b875..0c93b27b57c 100644 --- a/pkg/kubectl/pdb.go +++ b/pkg/kubectl/pdb.go @@ -20,10 +20,10 @@ import ( "fmt" "os" + policy "k8s.io/api/policy/v1beta1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/intstr" - "k8s.io/kubernetes/pkg/apis/policy" ) // PodDisruptionBudgetV1Generator supports stable generation of a pod disruption budget. diff --git a/pkg/kubectl/quota.go b/pkg/kubectl/quota.go index 173f568c671..d51b74af951 100644 --- a/pkg/kubectl/quota.go +++ b/pkg/kubectl/quota.go @@ -20,8 +20,8 @@ import ( "fmt" "strings" + "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" - "k8s.io/kubernetes/pkg/api" ) // ResourceQuotaGeneratorV1 supports stable generation of a resource quota @@ -79,7 +79,7 @@ func (g *ResourceQuotaGeneratorV1) StructuredGenerate() (runtime.Object, error) return nil, err } - resourceList, err := populateResourceList(g.Hard) + resourceList, err := populateResourceListV1(g.Hard) if err != nil { return nil, err } @@ -89,7 +89,7 @@ func (g *ResourceQuotaGeneratorV1) StructuredGenerate() (runtime.Object, error) return nil, err } - resourceQuota := &api.ResourceQuota{} + resourceQuota := &v1.ResourceQuota{} resourceQuota.Name = g.Name resourceQuota.Spec.Hard = resourceList resourceQuota.Spec.Scopes = scopes @@ -104,14 +104,14 @@ func (r *ResourceQuotaGeneratorV1) validate() error { return nil } -func parseScopes(spec string) ([]api.ResourceQuotaScope, error) { +func parseScopes(spec string) ([]v1.ResourceQuotaScope, error) { // empty input gets a nil response to preserve generator test expected behaviors if spec == "" { return nil, nil } scopes := strings.Split(spec, ",") - result := make([]api.ResourceQuotaScope, 0, len(scopes)) + result := make([]v1.ResourceQuotaScope, 0, len(scopes)) for _, scope := range scopes { // intentionally do not verify the scope against the valid scope list. This is done by the apiserver anyway. @@ -119,7 +119,7 @@ func parseScopes(spec string) ([]api.ResourceQuotaScope, error) { return nil, fmt.Errorf("invalid resource quota scope \"\"") } - result = append(result, api.ResourceQuotaScope(scope)) + result = append(result, v1.ResourceQuotaScope(scope)) } return result, nil } diff --git a/pkg/kubectl/quota_test.go b/pkg/kubectl/quota_test.go index 8529dd676a2..990a9379d7e 100644 --- a/pkg/kubectl/quota_test.go +++ b/pkg/kubectl/quota_test.go @@ -20,20 +20,20 @@ import ( "reflect" "testing" + "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/kubernetes/pkg/api" ) func TestQuotaGenerate(t *testing.T) { hard := "cpu=10,memory=5G,pods=10,services=7" - resourceQuotaSpecList, err := populateResourceList(hard) + resourceQuotaSpecList, err := populateResourceListV1(hard) if err != nil { t.Errorf("unexpected error: %v", err) } tests := map[string]struct { params map[string]interface{} - expected *api.ResourceQuota + expected *v1.ResourceQuota expectErr bool }{ "test-valid-use": { @@ -41,11 +41,11 @@ func TestQuotaGenerate(t *testing.T) { "name": "foo", "hard": hard, }, - expected: &api.ResourceQuota{ + expected: &v1.ResourceQuota{ ObjectMeta: metav1.ObjectMeta{ Name: "foo", }, - Spec: api.ResourceQuotaSpec{Hard: resourceQuotaSpecList}, + Spec: v1.ResourceQuotaSpec{Hard: resourceQuotaSpecList}, }, expectErr: false, }, @@ -61,15 +61,15 @@ func TestQuotaGenerate(t *testing.T) { "hard": hard, "scopes": "BestEffort,NotTerminating", }, - expected: &api.ResourceQuota{ + expected: &v1.ResourceQuota{ ObjectMeta: metav1.ObjectMeta{ Name: "foo", }, - Spec: api.ResourceQuotaSpec{ + Spec: v1.ResourceQuotaSpec{ Hard: resourceQuotaSpecList, - Scopes: []api.ResourceQuotaScope{ - api.ResourceQuotaScopeBestEffort, - api.ResourceQuotaScopeNotTerminating, + Scopes: []v1.ResourceQuotaScope{ + v1.ResourceQuotaScopeBestEffort, + v1.ResourceQuotaScopeNotTerminating, }, }, }, @@ -81,11 +81,11 @@ func TestQuotaGenerate(t *testing.T) { "hard": hard, "scopes": "", }, - expected: &api.ResourceQuota{ + expected: &v1.ResourceQuota{ ObjectMeta: metav1.ObjectMeta{ Name: "foo", }, - Spec: api.ResourceQuotaSpec{Hard: resourceQuotaSpecList}, + Spec: v1.ResourceQuotaSpec{Hard: resourceQuotaSpecList}, }, expectErr: false, }, @@ -108,8 +108,8 @@ func TestQuotaGenerate(t *testing.T) { if test.expectErr && err != nil { continue } - if !reflect.DeepEqual(obj.(*api.ResourceQuota), test.expected) { - t.Errorf("%s:\nexpected:\n%#v\nsaw:\n%#v", name, test.expected, obj.(*api.ResourceQuota)) + if !reflect.DeepEqual(obj.(*v1.ResourceQuota), test.expected) { + t.Errorf("%s:\nexpected:\n%#v\nsaw:\n%#v", name, test.expected, obj.(*v1.ResourceQuota)) } } } diff --git a/pkg/kubectl/rolebinding.go b/pkg/kubectl/rolebinding.go index 6d1ae4ddaa0..0eddb1e0342 100644 --- a/pkg/kubectl/rolebinding.go +++ b/pkg/kubectl/rolebinding.go @@ -21,9 +21,9 @@ import ( "strings" + rbacv1 "k8s.io/api/rbac/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/kubernetes/pkg/apis/rbac" ) // RoleBindingGeneratorV1 supports stable generation of a roleBinding. @@ -113,35 +113,35 @@ func (s RoleBindingGeneratorV1) StructuredGenerate() (runtime.Object, error) { if err := s.validate(); err != nil { return nil, err } - roleBinding := &rbac.RoleBinding{} + roleBinding := &rbacv1.RoleBinding{} roleBinding.Name = s.Name switch { case len(s.Role) > 0: - roleBinding.RoleRef = rbac.RoleRef{ - APIGroup: rbac.GroupName, + roleBinding.RoleRef = rbacv1.RoleRef{ + APIGroup: rbacv1.GroupName, Kind: "Role", Name: s.Role, } case len(s.ClusterRole) > 0: - roleBinding.RoleRef = rbac.RoleRef{ - APIGroup: rbac.GroupName, + roleBinding.RoleRef = rbacv1.RoleRef{ + APIGroup: rbacv1.GroupName, Kind: "ClusterRole", Name: s.ClusterRole, } } for _, user := range sets.NewString(s.Users...).List() { - roleBinding.Subjects = append(roleBinding.Subjects, rbac.Subject{ - Kind: rbac.UserKind, - APIGroup: rbac.GroupName, + roleBinding.Subjects = append(roleBinding.Subjects, rbacv1.Subject{ + Kind: rbacv1.UserKind, + APIGroup: rbacv1.GroupName, Name: user, }) } for _, group := range sets.NewString(s.Groups...).List() { - roleBinding.Subjects = append(roleBinding.Subjects, rbac.Subject{ - Kind: rbac.GroupKind, - APIGroup: rbac.GroupName, + roleBinding.Subjects = append(roleBinding.Subjects, rbacv1.Subject{ + Kind: rbacv1.GroupKind, + APIGroup: rbacv1.GroupName, Name: group, }) } @@ -150,8 +150,8 @@ func (s RoleBindingGeneratorV1) StructuredGenerate() (runtime.Object, error) { if len(tokens) != 2 || tokens[1] == "" { return nil, fmt.Errorf("serviceaccount must be :") } - roleBinding.Subjects = append(roleBinding.Subjects, rbac.Subject{ - Kind: rbac.ServiceAccountKind, + roleBinding.Subjects = append(roleBinding.Subjects, rbacv1.Subject{ + Kind: rbacv1.ServiceAccountKind, APIGroup: "", Namespace: tokens[0], Name: tokens[1], diff --git a/pkg/kubectl/rolebinding_test.go b/pkg/kubectl/rolebinding_test.go index 8fedb1e00cb..01504f26805 100644 --- a/pkg/kubectl/rolebinding_test.go +++ b/pkg/kubectl/rolebinding_test.go @@ -20,8 +20,8 @@ import ( "reflect" "testing" + rbac "k8s.io/api/rbac/v1" "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/kubernetes/pkg/apis/rbac" ) func TestRoleBindingGenerate(t *testing.T) { diff --git a/pkg/kubectl/secret.go b/pkg/kubectl/secret.go index 6ad8e7a2593..04c5ced232e 100644 --- a/pkg/kubectl/secret.go +++ b/pkg/kubectl/secret.go @@ -23,9 +23,9 @@ import ( "path" "strings" + "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/validation" - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/kubectl/util" "k8s.io/kubernetes/pkg/kubectl/util/hash" ) @@ -129,11 +129,11 @@ func (s SecretGeneratorV1) StructuredGenerate() (runtime.Object, error) { if err := s.validate(); err != nil { return nil, err } - secret := &api.Secret{} + secret := &v1.Secret{} secret.Name = s.Name secret.Data = map[string][]byte{} if len(s.Type) > 0 { - secret.Type = api.SecretType(s.Type) + secret.Type = v1.SecretType(s.Type) } if len(s.FileSources) > 0 { if err := handleFromFileSources(secret, s.FileSources); err != nil { @@ -172,7 +172,7 @@ func (s SecretGeneratorV1) validate() error { } // handleFromLiteralSources adds the specified literal source information into the provided secret -func handleFromLiteralSources(secret *api.Secret, literalSources []string) error { +func handleFromLiteralSources(secret *v1.Secret, literalSources []string) error { for _, literalSource := range literalSources { keyName, value, err := util.ParseLiteralSource(literalSource) if err != nil { @@ -186,7 +186,7 @@ func handleFromLiteralSources(secret *api.Secret, literalSources []string) error } // handleFromFileSources adds the specified file source information into the provided secret -func handleFromFileSources(secret *api.Secret, fileSources []string) error { +func handleFromFileSources(secret *v1.Secret, fileSources []string) error { for _, fileSource := range fileSources { keyName, filePath, err := util.ParseFileSource(fileSource) if err != nil { @@ -230,7 +230,7 @@ func handleFromFileSources(secret *api.Secret, fileSources []string) error { // handleFromEnvFileSource adds the specified env file source information // into the provided secret -func handleFromEnvFileSource(secret *api.Secret, envFileSource string) error { +func handleFromEnvFileSource(secret *v1.Secret, envFileSource string) error { info, err := os.Stat(envFileSource) if err != nil { switch err := err.(type) { @@ -249,7 +249,7 @@ func handleFromEnvFileSource(secret *api.Secret, envFileSource string) error { }) } -func addKeyFromFileToSecret(secret *api.Secret, keyName, filePath string) error { +func addKeyFromFileToSecret(secret *v1.Secret, keyName, filePath string) error { data, err := ioutil.ReadFile(filePath) if err != nil { return err @@ -257,7 +257,7 @@ func addKeyFromFileToSecret(secret *api.Secret, keyName, filePath string) error return addKeyFromLiteralToSecret(secret, keyName, data) } -func addKeyFromLiteralToSecret(secret *api.Secret, keyName string, data []byte) error { +func addKeyFromLiteralToSecret(secret *v1.Secret, keyName string, data []byte) error { if errs := validation.IsConfigMapKey(keyName); len(errs) != 0 { return fmt.Errorf("%q is not a valid key name for a Secret: %s", keyName, strings.Join(errs, ";")) } diff --git a/pkg/kubectl/secret_for_docker_registry.go b/pkg/kubectl/secret_for_docker_registry.go index d7a4154ed38..fc1e15b6b91 100644 --- a/pkg/kubectl/secret_for_docker_registry.go +++ b/pkg/kubectl/secret_for_docker_registry.go @@ -20,8 +20,8 @@ import ( "encoding/json" "fmt" + "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/credentialprovider" "k8s.io/kubernetes/pkg/kubectl/util/hash" ) @@ -89,11 +89,11 @@ func (s SecretForDockerRegistryGeneratorV1) StructuredGenerate() (runtime.Object if err != nil { return nil, err } - secret := &api.Secret{} + secret := &v1.Secret{} secret.Name = s.Name - secret.Type = api.SecretTypeDockercfg + secret.Type = v1.SecretTypeDockercfg secret.Data = map[string][]byte{} - secret.Data[api.DockerConfigKey] = dockercfgContent + secret.Data[v1.DockerConfigKey] = dockercfgContent if s.AppendHash { h, err := hash.SecretHash(secret) if err != nil { diff --git a/pkg/kubectl/secret_for_docker_registry_test.go b/pkg/kubectl/secret_for_docker_registry_test.go index e9cb0abf159..66d1ec12feb 100644 --- a/pkg/kubectl/secret_for_docker_registry_test.go +++ b/pkg/kubectl/secret_for_docker_registry_test.go @@ -20,8 +20,8 @@ import ( "reflect" "testing" + "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/kubernetes/pkg/api" ) func TestSecretForDockerRegistryGenerate(t *testing.T) { @@ -37,7 +37,7 @@ func TestSecretForDockerRegistryGenerate(t *testing.T) { tests := map[string]struct { params map[string]interface{} - expected *api.Secret + expected *v1.Secret expectErr bool }{ "test-valid-use": { @@ -48,14 +48,14 @@ func TestSecretForDockerRegistryGenerate(t *testing.T) { "docker-password": password, "docker-email": email, }, - expected: &api.Secret{ + expected: &v1.Secret{ ObjectMeta: metav1.ObjectMeta{ Name: "foo", }, Data: map[string][]byte{ - api.DockerConfigKey: secretData, + v1.DockerConfigKey: secretData, }, - Type: api.SecretTypeDockercfg, + Type: v1.SecretTypeDockercfg, }, expectErr: false, }, @@ -68,14 +68,14 @@ func TestSecretForDockerRegistryGenerate(t *testing.T) { "docker-email": email, "append-hash": true, }, - expected: &api.Secret{ + expected: &v1.Secret{ ObjectMeta: metav1.ObjectMeta{ Name: "foo-94759gc65b", }, Data: map[string][]byte{ - api.DockerConfigKey: secretData, + v1.DockerConfigKey: secretData, }, - Type: api.SecretTypeDockercfg, + Type: v1.SecretTypeDockercfg, }, expectErr: false, }, @@ -86,14 +86,14 @@ func TestSecretForDockerRegistryGenerate(t *testing.T) { "docker-username": username, "docker-password": password, }, - expected: &api.Secret{ + expected: &v1.Secret{ ObjectMeta: metav1.ObjectMeta{ Name: "foo", }, Data: map[string][]byte{ - api.DockerConfigKey: secretDataNoEmail, + v1.DockerConfigKey: secretDataNoEmail, }, - Type: api.SecretTypeDockercfg, + Type: v1.SecretTypeDockercfg, }, expectErr: false, }, @@ -117,8 +117,8 @@ func TestSecretForDockerRegistryGenerate(t *testing.T) { if test.expectErr && err != nil { continue } - if !reflect.DeepEqual(obj.(*api.Secret), test.expected) { - t.Errorf("\nexpected:\n%#v\nsaw:\n%#v", test.expected, obj.(*api.Secret)) + if !reflect.DeepEqual(obj.(*v1.Secret), test.expected) { + t.Errorf("\nexpected:\n%#v\nsaw:\n%#v", test.expected, obj.(*v1.Secret)) } } } diff --git a/pkg/kubectl/secret_for_tls.go b/pkg/kubectl/secret_for_tls.go index aeb6d8863a9..1c3fffd0456 100644 --- a/pkg/kubectl/secret_for_tls.go +++ b/pkg/kubectl/secret_for_tls.go @@ -21,8 +21,8 @@ import ( "fmt" "io/ioutil" + "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/kubectl/util/hash" ) @@ -87,12 +87,12 @@ func (s SecretForTLSGeneratorV1) StructuredGenerate() (runtime.Object, error) { if err != nil { return nil, err } - secret := &api.Secret{} + secret := &v1.Secret{} secret.Name = s.Name - secret.Type = api.SecretTypeTLS + secret.Type = v1.SecretTypeTLS secret.Data = map[string][]byte{} - secret.Data[api.TLSCertKey] = []byte(tlsCrt) - secret.Data[api.TLSPrivateKeyKey] = []byte(tlsKey) + secret.Data[v1.TLSCertKey] = []byte(tlsCrt) + secret.Data[v1.TLSPrivateKeyKey] = []byte(tlsKey) if s.AppendHash { h, err := hash.SecretHash(secret) if err != nil { diff --git a/pkg/kubectl/secret_for_tls_test.go b/pkg/kubectl/secret_for_tls_test.go index 252f84913e0..9f296a88840 100644 --- a/pkg/kubectl/secret_for_tls_test.go +++ b/pkg/kubectl/secret_for_tls_test.go @@ -23,9 +23,9 @@ import ( "reflect" "testing" + "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" utiltesting "k8s.io/client-go/util/testing" - "k8s.io/kubernetes/pkg/api" ) var rsaCertPEM = `-----BEGIN CERTIFICATE----- @@ -124,7 +124,7 @@ func TestSecretForTLSGenerate(t *testing.T) { tests := map[string]struct { params map[string]interface{} - expected *api.Secret + expected *v1.Secret expectErr bool }{ "test-valid-tls-secret": { @@ -133,15 +133,15 @@ func TestSecretForTLSGenerate(t *testing.T) { "key": validKeyPath, "cert": validCertPath, }, - expected: &api.Secret{ + expected: &v1.Secret{ ObjectMeta: metav1.ObjectMeta{ Name: "foo", }, Data: map[string][]byte{ - api.TLSCertKey: []byte(rsaCertPEM), - api.TLSPrivateKeyKey: []byte(rsaKeyPEM), + v1.TLSCertKey: []byte(rsaCertPEM), + v1.TLSPrivateKeyKey: []byte(rsaKeyPEM), }, - Type: api.SecretTypeTLS, + Type: v1.SecretTypeTLS, }, expectErr: false, }, @@ -152,15 +152,15 @@ func TestSecretForTLSGenerate(t *testing.T) { "cert": validCertPath, "append-hash": true, }, - expected: &api.Secret{ + expected: &v1.Secret{ ObjectMeta: metav1.ObjectMeta{ Name: "foo-272h6tt825", }, Data: map[string][]byte{ - api.TLSCertKey: []byte(rsaCertPEM), - api.TLSPrivateKeyKey: []byte(rsaKeyPEM), + v1.TLSCertKey: []byte(rsaCertPEM), + v1.TLSPrivateKeyKey: []byte(rsaKeyPEM), }, - Type: api.SecretTypeTLS, + Type: v1.SecretTypeTLS, }, expectErr: false, }, @@ -170,15 +170,15 @@ func TestSecretForTLSGenerate(t *testing.T) { "key": invalidKeyPath, "cert": invalidCertPath, }, - expected: &api.Secret{ + expected: &v1.Secret{ ObjectMeta: metav1.ObjectMeta{ Name: "foo", }, Data: map[string][]byte{ - api.TLSCertKey: []byte("test"), - api.TLSPrivateKeyKey: []byte("test"), + v1.TLSCertKey: []byte("test"), + v1.TLSPrivateKeyKey: []byte("test"), }, - Type: api.SecretTypeTLS, + Type: v1.SecretTypeTLS, }, expectErr: true, }, @@ -188,15 +188,15 @@ func TestSecretForTLSGenerate(t *testing.T) { "key": mismatchKeyPath, "cert": mismatchCertPath, }, - expected: &api.Secret{ + expected: &v1.Secret{ ObjectMeta: metav1.ObjectMeta{ Name: "foo", }, Data: map[string][]byte{ - api.TLSCertKey: []byte(rsaCertPEM), - api.TLSPrivateKeyKey: []byte(mismatchRSAKeyPEM), + v1.TLSCertKey: []byte(rsaCertPEM), + v1.TLSPrivateKeyKey: []byte(mismatchRSAKeyPEM), }, - Type: api.SecretTypeTLS, + Type: v1.SecretTypeTLS, }, expectErr: true, }, @@ -218,8 +218,8 @@ func TestSecretForTLSGenerate(t *testing.T) { if test.expectErr && err != nil { continue } - if !reflect.DeepEqual(obj.(*api.Secret), test.expected) { - t.Errorf("\nexpected:\n%#v\nsaw:\n%#v", test.expected, obj.(*api.Secret)) + if !reflect.DeepEqual(obj.(*v1.Secret), test.expected) { + t.Errorf("\nexpected:\n%#v\nsaw:\n%#v", test.expected, obj.(*v1.Secret)) } } } diff --git a/pkg/kubectl/secret_test.go b/pkg/kubectl/secret_test.go index a9777cd1bac..15f3db0b4ff 100644 --- a/pkg/kubectl/secret_test.go +++ b/pkg/kubectl/secret_test.go @@ -21,22 +21,22 @@ import ( "reflect" "testing" + "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/kubernetes/pkg/api" ) func TestSecretGenerate(t *testing.T) { tests := []struct { setup func(t *testing.T, params map[string]interface{}) func() params map[string]interface{} - expected *api.Secret + expected *v1.Secret expectErr bool }{ { params: map[string]interface{}{ "name": "foo", }, - expected: &api.Secret{ + expected: &v1.Secret{ ObjectMeta: metav1.ObjectMeta{ Name: "foo", }, @@ -49,7 +49,7 @@ func TestSecretGenerate(t *testing.T) { "name": "foo", "append-hash": true, }, - expected: &api.Secret{ + expected: &v1.Secret{ ObjectMeta: metav1.ObjectMeta{ Name: "foo-949tdgdkgg", }, @@ -62,7 +62,7 @@ func TestSecretGenerate(t *testing.T) { "name": "foo", "type": "my-type", }, - expected: &api.Secret{ + expected: &v1.Secret{ ObjectMeta: metav1.ObjectMeta{ Name: "foo", }, @@ -77,7 +77,7 @@ func TestSecretGenerate(t *testing.T) { "type": "my-type", "append-hash": true, }, - expected: &api.Secret{ + expected: &v1.Secret{ ObjectMeta: metav1.ObjectMeta{ Name: "foo-dg474f9t76", }, @@ -91,7 +91,7 @@ func TestSecretGenerate(t *testing.T) { "name": "foo", "from-literal": []string{"key1=value1", "key2=value2"}, }, - expected: &api.Secret{ + expected: &v1.Secret{ ObjectMeta: metav1.ObjectMeta{ Name: "foo", }, @@ -108,7 +108,7 @@ func TestSecretGenerate(t *testing.T) { "from-literal": []string{"key1=value1", "key2=value2"}, "append-hash": true, }, - expected: &api.Secret{ + expected: &v1.Secret{ ObjectMeta: metav1.ObjectMeta{ Name: "foo-tf72c228m4", }, @@ -145,7 +145,7 @@ func TestSecretGenerate(t *testing.T) { "name": "foo", "from-literal": []string{"key1==value1"}, }, - expected: &api.Secret{ + expected: &v1.Secret{ ObjectMeta: metav1.ObjectMeta{ Name: "foo", }, @@ -161,7 +161,7 @@ func TestSecretGenerate(t *testing.T) { "from-literal": []string{"key1==value1"}, "append-hash": true, }, - expected: &api.Secret{ + expected: &v1.Secret{ ObjectMeta: metav1.ObjectMeta{ Name: "foo-fdcc8tkhh5", }, @@ -177,7 +177,7 @@ func TestSecretGenerate(t *testing.T) { "name": "valid_env", "from-env-file": "file.env", }, - expected: &api.Secret{ + expected: &v1.Secret{ ObjectMeta: metav1.ObjectMeta{ Name: "valid_env", }, @@ -195,7 +195,7 @@ func TestSecretGenerate(t *testing.T) { "from-env-file": "file.env", "append-hash": true, }, - expected: &api.Secret{ + expected: &v1.Secret{ ObjectMeta: metav1.ObjectMeta{ Name: "valid_env-bkb2m2965h", }, @@ -216,7 +216,7 @@ func TestSecretGenerate(t *testing.T) { "name": "getenv", "from-env-file": "file.env", }, - expected: &api.Secret{ + expected: &v1.Secret{ ObjectMeta: metav1.ObjectMeta{ Name: "getenv", }, @@ -238,7 +238,7 @@ func TestSecretGenerate(t *testing.T) { "from-env-file": "file.env", "append-hash": true, }, - expected: &api.Secret{ + expected: &v1.Secret{ ObjectMeta: metav1.ObjectMeta{ Name: "getenv-m7kg2khdb4", }, @@ -271,7 +271,7 @@ func TestSecretGenerate(t *testing.T) { "name": "with_spaces", "from-env-file": "file.env", }, - expected: &api.Secret{ + expected: &v1.Secret{ ObjectMeta: metav1.ObjectMeta{ Name: "with_spaces", }, @@ -288,7 +288,7 @@ func TestSecretGenerate(t *testing.T) { "from-env-file": "file.env", "append-hash": true, }, - expected: &api.Secret{ + expected: &v1.Secret{ ObjectMeta: metav1.ObjectMeta{ Name: "with_spaces-4488d5b57d", }, @@ -314,8 +314,8 @@ func TestSecretGenerate(t *testing.T) { if test.expectErr && err != nil { continue } - if !reflect.DeepEqual(obj.(*api.Secret), test.expected) { - t.Errorf("\ncase %d, expected:\n%#v\nsaw:\n%#v", i, test.expected, obj.(*api.Secret)) + if !reflect.DeepEqual(obj.(*v1.Secret), test.expected) { + t.Errorf("\ncase %d, expected:\n%#v\nsaw:\n%#v", i, test.expected, obj.(*v1.Secret)) } } } diff --git a/pkg/kubectl/service_basic.go b/pkg/kubectl/service_basic.go index d53cc60fcd2..b7e91687732 100644 --- a/pkg/kubectl/service_basic.go +++ b/pkg/kubectl/service_basic.go @@ -21,17 +21,17 @@ import ( "strconv" "strings" + "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/intstr" "k8s.io/apimachinery/pkg/util/validation" - "k8s.io/kubernetes/pkg/api" ) type ServiceCommonGeneratorV1 struct { Name string TCP []string - Type api.ServiceType + Type v1.ServiceType ClusterIP string NodePort int ExternalName string @@ -131,7 +131,7 @@ func (s ServiceLoadBalancerGeneratorV1) Generate(params map[string]interface{}) if err != nil { return nil, err } - delegate := &ServiceCommonGeneratorV1{Type: api.ServiceTypeLoadBalancer, ClusterIP: ""} + delegate := &ServiceCommonGeneratorV1{Type: v1.ServiceTypeLoadBalancer, ClusterIP: ""} err = delegate.GenerateCommon(params) if err != nil { return nil, err @@ -144,7 +144,7 @@ func (s ServiceNodePortGeneratorV1) Generate(params map[string]interface{}) (run if err != nil { return nil, err } - delegate := &ServiceCommonGeneratorV1{Type: api.ServiceTypeNodePort, ClusterIP: ""} + delegate := &ServiceCommonGeneratorV1{Type: v1.ServiceTypeNodePort, ClusterIP: ""} err = delegate.GenerateCommon(params) if err != nil { return nil, err @@ -157,7 +157,7 @@ func (s ServiceClusterIPGeneratorV1) Generate(params map[string]interface{}) (ru if err != nil { return nil, err } - delegate := &ServiceCommonGeneratorV1{Type: api.ServiceTypeClusterIP, ClusterIP: ""} + delegate := &ServiceCommonGeneratorV1{Type: v1.ServiceTypeClusterIP, ClusterIP: ""} err = delegate.GenerateCommon(params) if err != nil { return nil, err @@ -170,7 +170,7 @@ func (s ServiceExternalNameGeneratorV1) Generate(params map[string]interface{}) if err != nil { return nil, err } - delegate := &ServiceCommonGeneratorV1{Type: api.ServiceTypeExternalName, ClusterIP: ""} + delegate := &ServiceCommonGeneratorV1{Type: v1.ServiceTypeExternalName, ClusterIP: ""} err = delegate.GenerateCommon(params) if err != nil { return nil, err @@ -187,13 +187,13 @@ func (s ServiceCommonGeneratorV1) validate() error { if len(s.Type) == 0 { return fmt.Errorf("type must be specified") } - if s.ClusterIP == api.ClusterIPNone && s.Type != api.ServiceTypeClusterIP { + if s.ClusterIP == v1.ClusterIPNone && s.Type != v1.ServiceTypeClusterIP { return fmt.Errorf("ClusterIP=None can only be used with ClusterIP service type") } - if s.ClusterIP != api.ClusterIPNone && len(s.TCP) == 0 && s.Type != api.ServiceTypeExternalName { + if s.ClusterIP != v1.ClusterIPNone && len(s.TCP) == 0 && s.Type != v1.ServiceTypeExternalName { return fmt.Errorf("at least one tcp port specifier must be provided") } - if s.Type == api.ServiceTypeExternalName { + if s.Type == v1.ServiceTypeExternalName { if errs := validation.IsDNS1123Subdomain(s.ExternalName); len(errs) != 0 { return fmt.Errorf("invalid service external name %s", s.ExternalName) } @@ -206,7 +206,7 @@ func (s ServiceCommonGeneratorV1) StructuredGenerate() (runtime.Object, error) { if err != nil { return nil, err } - ports := []api.ServicePort{} + ports := []v1.ServicePort{} for _, tcpString := range s.TCP { port, targetPort, err := parsePorts(tcpString) if err != nil { @@ -214,11 +214,11 @@ func (s ServiceCommonGeneratorV1) StructuredGenerate() (runtime.Object, error) { } portName := strings.Replace(tcpString, ":", "-", -1) - ports = append(ports, api.ServicePort{ + ports = append(ports, v1.ServicePort{ Name: portName, Port: port, TargetPort: targetPort, - Protocol: api.Protocol("TCP"), + Protocol: v1.Protocol("TCP"), NodePort: int32(s.NodePort), }) } @@ -229,13 +229,13 @@ func (s ServiceCommonGeneratorV1) StructuredGenerate() (runtime.Object, error) { selector := map[string]string{} selector["app"] = s.Name - service := api.Service{ + service := v1.Service{ ObjectMeta: metav1.ObjectMeta{ Name: s.Name, Labels: labels, }, - Spec: api.ServiceSpec{ - Type: api.ServiceType(s.Type), + Spec: v1.ServiceSpec{ + Type: v1.ServiceType(s.Type), Selector: selector, Ports: ports, ExternalName: s.ExternalName, diff --git a/pkg/kubectl/service_basic_test.go b/pkg/kubectl/service_basic_test.go index a7fea486085..44875817e65 100644 --- a/pkg/kubectl/service_basic_test.go +++ b/pkg/kubectl/service_basic_test.go @@ -20,32 +20,32 @@ import ( "reflect" "testing" + "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" - "k8s.io/kubernetes/pkg/api" ) func TestServiceBasicGenerate(t *testing.T) { tests := []struct { name string - serviceType api.ServiceType + serviceType v1.ServiceType tcp []string clusterip string - expected *api.Service + expected *v1.Service expectErr bool }{ { name: "clusterip-ok", tcp: []string{"456", "321:908"}, clusterip: "", - serviceType: api.ServiceTypeClusterIP, - expected: &api.Service{ + serviceType: v1.ServiceTypeClusterIP, + expected: &v1.Service{ ObjectMeta: metav1.ObjectMeta{ Name: "clusterip-ok", Labels: map[string]string{"app": "clusterip-ok"}, }, - Spec: api.ServiceSpec{Type: "ClusterIP", - Ports: []api.ServicePort{{Name: "456", Protocol: "TCP", Port: 456, TargetPort: intstr.IntOrString{Type: 0, IntVal: 456, StrVal: ""}, NodePort: 0}, + Spec: v1.ServiceSpec{Type: "ClusterIP", + Ports: []v1.ServicePort{{Name: "456", Protocol: "TCP", Port: 456, TargetPort: intstr.IntOrString{Type: 0, IntVal: 456, StrVal: ""}, NodePort: 0}, {Name: "321-908", Protocol: "TCP", Port: 321, TargetPort: intstr.IntOrString{Type: 0, IntVal: 908, StrVal: ""}, NodePort: 0}}, Selector: map[string]string{"app": "clusterip-ok"}, ClusterIP: "", ExternalIPs: []string(nil), LoadBalancerIP: ""}, @@ -54,28 +54,28 @@ func TestServiceBasicGenerate(t *testing.T) { }, { name: "clusterip-missing", - serviceType: api.ServiceTypeClusterIP, + serviceType: v1.ServiceTypeClusterIP, expectErr: true, }, { name: "clusterip-none-wrong-type", tcp: []string{}, clusterip: "None", - serviceType: api.ServiceTypeNodePort, + serviceType: v1.ServiceTypeNodePort, expectErr: true, }, { name: "clusterip-none-ok", tcp: []string{}, clusterip: "None", - serviceType: api.ServiceTypeClusterIP, - expected: &api.Service{ + serviceType: v1.ServiceTypeClusterIP, + expected: &v1.Service{ ObjectMeta: metav1.ObjectMeta{ Name: "clusterip-none-ok", Labels: map[string]string{"app": "clusterip-none-ok"}, }, - Spec: api.ServiceSpec{Type: "ClusterIP", - Ports: []api.ServicePort{}, + Spec: v1.ServiceSpec{Type: "ClusterIP", + Ports: []v1.ServicePort{}, Selector: map[string]string{"app": "clusterip-none-ok"}, ClusterIP: "None", ExternalIPs: []string(nil), LoadBalancerIP: ""}, }, @@ -85,14 +85,14 @@ func TestServiceBasicGenerate(t *testing.T) { name: "clusterip-none-and-port-mapping", tcp: []string{"456:9898"}, clusterip: "None", - serviceType: api.ServiceTypeClusterIP, - expected: &api.Service{ + serviceType: v1.ServiceTypeClusterIP, + expected: &v1.Service{ ObjectMeta: metav1.ObjectMeta{ Name: "clusterip-none-and-port-mapping", Labels: map[string]string{"app": "clusterip-none-and-port-mapping"}, }, - Spec: api.ServiceSpec{Type: "ClusterIP", - Ports: []api.ServicePort{{Name: "456-9898", Protocol: "TCP", Port: 456, TargetPort: intstr.IntOrString{Type: 0, IntVal: 9898, StrVal: ""}, NodePort: 0}}, + Spec: v1.ServiceSpec{Type: "ClusterIP", + Ports: []v1.ServicePort{{Name: "456-9898", Protocol: "TCP", Port: 456, TargetPort: intstr.IntOrString{Type: 0, IntVal: 9898, StrVal: ""}, NodePort: 0}}, Selector: map[string]string{"app": "clusterip-none-and-port-mapping"}, ClusterIP: "None", ExternalIPs: []string(nil), LoadBalancerIP: ""}, }, @@ -102,14 +102,14 @@ func TestServiceBasicGenerate(t *testing.T) { name: "loadbalancer-ok", tcp: []string{"456:9898"}, clusterip: "", - serviceType: api.ServiceTypeLoadBalancer, - expected: &api.Service{ + serviceType: v1.ServiceTypeLoadBalancer, + expected: &v1.Service{ ObjectMeta: metav1.ObjectMeta{ Name: "loadbalancer-ok", Labels: map[string]string{"app": "loadbalancer-ok"}, }, - Spec: api.ServiceSpec{Type: "LoadBalancer", - Ports: []api.ServicePort{{Name: "456-9898", Protocol: "TCP", Port: 456, TargetPort: intstr.IntOrString{Type: 0, IntVal: 9898, StrVal: ""}, NodePort: 0}}, + Spec: v1.ServiceSpec{Type: "LoadBalancer", + Ports: []v1.ServicePort{{Name: "456-9898", Protocol: "TCP", Port: 456, TargetPort: intstr.IntOrString{Type: 0, IntVal: 9898, StrVal: ""}, NodePort: 0}}, Selector: map[string]string{"app": "loadbalancer-ok"}, ClusterIP: "", ExternalIPs: []string(nil), LoadBalancerIP: ""}, }, @@ -133,8 +133,8 @@ func TestServiceBasicGenerate(t *testing.T) { if test.expectErr && err != nil { continue } - if !reflect.DeepEqual(obj.(*api.Service), test.expected) { - t.Errorf("test: %v\nexpected:\n%#v\nsaw:\n%#v", test.name, test.expected, obj.(*api.Service)) + if !reflect.DeepEqual(obj.(*v1.Service), test.expected) { + t.Errorf("test: %v\nexpected:\n%#v\nsaw:\n%#v", test.name, test.expected, obj.(*v1.Service)) } } } diff --git a/pkg/kubectl/serviceaccount.go b/pkg/kubectl/serviceaccount.go index 08b84fb6fda..fa701e140a2 100644 --- a/pkg/kubectl/serviceaccount.go +++ b/pkg/kubectl/serviceaccount.go @@ -19,8 +19,8 @@ package kubectl import ( "fmt" + "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" - "k8s.io/kubernetes/pkg/api" ) // ServiceAccountGeneratorV1 supports stable generation of a service account @@ -37,7 +37,7 @@ func (g *ServiceAccountGeneratorV1) StructuredGenerate() (runtime.Object, error) if err := g.validate(); err != nil { return nil, err } - serviceAccount := &api.ServiceAccount{} + serviceAccount := &v1.ServiceAccount{} serviceAccount.Name = g.Name return serviceAccount, nil } diff --git a/pkg/kubectl/serviceaccount_test.go b/pkg/kubectl/serviceaccount_test.go index e8223914269..ec232f4a6d3 100644 --- a/pkg/kubectl/serviceaccount_test.go +++ b/pkg/kubectl/serviceaccount_test.go @@ -20,19 +20,19 @@ import ( "reflect" "testing" + "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/kubernetes/pkg/api" ) func TestServiceAccountGenerate(t *testing.T) { tests := []struct { name string - expected *api.ServiceAccount + expected *v1.ServiceAccount expectErr bool }{ { name: "foo", - expected: &api.ServiceAccount{ + expected: &v1.ServiceAccount{ ObjectMeta: metav1.ObjectMeta{ Name: "foo", }, @@ -54,8 +54,8 @@ func TestServiceAccountGenerate(t *testing.T) { if test.expectErr && err != nil { continue } - if !reflect.DeepEqual(obj.(*api.ServiceAccount), test.expected) { - t.Errorf("\nexpected:\n%#v\nsaw:\n%#v", test.expected, obj.(*api.ServiceAccount)) + if !reflect.DeepEqual(obj.(*v1.ServiceAccount), test.expected) { + t.Errorf("\nexpected:\n%#v\nsaw:\n%#v", test.expected, obj.(*v1.ServiceAccount)) } } } diff --git a/pkg/kubectl/util/hash/BUILD b/pkg/kubectl/util/hash/BUILD index b302b079767..7e8885b6535 100644 --- a/pkg/kubectl/util/hash/BUILD +++ b/pkg/kubectl/util/hash/BUILD @@ -11,14 +11,14 @@ go_test( srcs = ["hash_test.go"], importpath = "k8s.io/kubernetes/pkg/kubectl/util/hash", library = ":go_default_library", - deps = ["//pkg/api:go_default_library"], + deps = ["//vendor/k8s.io/api/core/v1:go_default_library"], ) go_library( name = "go_default_library", srcs = ["hash.go"], importpath = "k8s.io/kubernetes/pkg/kubectl/util/hash", - deps = ["//pkg/api:go_default_library"], + deps = ["//vendor/k8s.io/api/core/v1:go_default_library"], ) filegroup( diff --git a/pkg/kubectl/util/hash/hash.go b/pkg/kubectl/util/hash/hash.go index 137e1804540..d7afaab7d7c 100644 --- a/pkg/kubectl/util/hash/hash.go +++ b/pkg/kubectl/util/hash/hash.go @@ -21,12 +21,12 @@ import ( "encoding/json" "fmt" - "k8s.io/kubernetes/pkg/api" + "k8s.io/api/core/v1" ) // ConfigMapHash returns a hash of the ConfigMap. // The Data, Kind, and Name are taken into account. -func ConfigMapHash(cm *api.ConfigMap) (string, error) { +func ConfigMapHash(cm *v1.ConfigMap) (string, error) { encoded, err := encodeConfigMap(cm) if err != nil { return "", err @@ -40,7 +40,7 @@ func ConfigMapHash(cm *api.ConfigMap) (string, error) { // SecretHash returns a hash of the Secret. // The Data, Kind, Name, and Type are taken into account. -func SecretHash(sec *api.Secret) (string, error) { +func SecretHash(sec *v1.Secret) (string, error) { encoded, err := encodeSecret(sec) if err != nil { return "", err @@ -54,7 +54,7 @@ func SecretHash(sec *api.Secret) (string, error) { // encodeConfigMap encodes a ConfigMap. // Data, Kind, and Name are taken into account. -func encodeConfigMap(cm *api.ConfigMap) (string, error) { +func encodeConfigMap(cm *v1.ConfigMap) (string, error) { // json.Marshal sorts the keys in a stable order in the encoding data, err := json.Marshal(map[string]interface{}{"kind": "ConfigMap", "name": cm.Name, "data": cm.Data}) if err != nil { @@ -65,7 +65,7 @@ func encodeConfigMap(cm *api.ConfigMap) (string, error) { // encodeSecret encodes a Secret. // Data, Kind, Name, and Type are taken into account. -func encodeSecret(sec *api.Secret) (string, error) { +func encodeSecret(sec *v1.Secret) (string, error) { // json.Marshal sorts the keys in a stable order in the encoding data, err := json.Marshal(map[string]interface{}{"kind": "Secret", "type": sec.Type, "name": sec.Name, "data": sec.Data}) if err != nil { diff --git a/pkg/kubectl/util/hash/hash_test.go b/pkg/kubectl/util/hash/hash_test.go index ee344a35428..15a0bd20e14 100644 --- a/pkg/kubectl/util/hash/hash_test.go +++ b/pkg/kubectl/util/hash/hash_test.go @@ -21,22 +21,22 @@ import ( "strings" "testing" - "k8s.io/kubernetes/pkg/api" + "k8s.io/api/core/v1" ) func TestConfigMapHash(t *testing.T) { cases := []struct { desc string - cm *api.ConfigMap + cm *v1.ConfigMap hash string err string }{ // empty map - {"empty data", &api.ConfigMap{Data: map[string]string{}}, "42745tchd9", ""}, + {"empty data", &v1.ConfigMap{Data: map[string]string{}}, "42745tchd9", ""}, // one key - {"one key", &api.ConfigMap{Data: map[string]string{"one": ""}}, "9g67k2htb6", ""}, + {"one key", &v1.ConfigMap{Data: map[string]string{"one": ""}}, "9g67k2htb6", ""}, // three keys (tests sorting order) - {"three keys", &api.ConfigMap{Data: map[string]string{"two": "2", "one": "", "three": "3"}}, "f5h7t85m9b", ""}, + {"three keys", &v1.ConfigMap{Data: map[string]string{"two": "2", "one": "", "three": "3"}}, "f5h7t85m9b", ""}, } for _, c := range cases { @@ -53,16 +53,16 @@ func TestConfigMapHash(t *testing.T) { func TestSecretHash(t *testing.T) { cases := []struct { desc string - secret *api.Secret + secret *v1.Secret hash string err string }{ // empty map - {"empty data", &api.Secret{Type: "my-type", Data: map[string][]byte{}}, "t75bgf6ctb", ""}, + {"empty data", &v1.Secret{Type: "my-type", Data: map[string][]byte{}}, "t75bgf6ctb", ""}, // one key - {"one key", &api.Secret{Type: "my-type", Data: map[string][]byte{"one": []byte("")}}, "74bd68bm66", ""}, + {"one key", &v1.Secret{Type: "my-type", Data: map[string][]byte{"one": []byte("")}}, "74bd68bm66", ""}, // three keys (tests sorting order) - {"three keys", &api.Secret{Type: "my-type", Data: map[string][]byte{"two": []byte("2"), "one": []byte(""), "three": []byte("3")}}, "dgcb6h9tmk", ""}, + {"three keys", &v1.Secret{Type: "my-type", Data: map[string][]byte{"two": []byte("2"), "one": []byte(""), "three": []byte("3")}}, "dgcb6h9tmk", ""}, } for _, c := range cases { @@ -79,16 +79,16 @@ func TestSecretHash(t *testing.T) { func TestEncodeConfigMap(t *testing.T) { cases := []struct { desc string - cm *api.ConfigMap + cm *v1.ConfigMap expect string err string }{ // empty map - {"empty data", &api.ConfigMap{Data: map[string]string{}}, `{"data":{},"kind":"ConfigMap","name":""}`, ""}, + {"empty data", &v1.ConfigMap{Data: map[string]string{}}, `{"data":{},"kind":"ConfigMap","name":""}`, ""}, // one key - {"one key", &api.ConfigMap{Data: map[string]string{"one": ""}}, `{"data":{"one":""},"kind":"ConfigMap","name":""}`, ""}, + {"one key", &v1.ConfigMap{Data: map[string]string{"one": ""}}, `{"data":{"one":""},"kind":"ConfigMap","name":""}`, ""}, // three keys (tests sorting order) - {"three keys", &api.ConfigMap{Data: map[string]string{"two": "2", "one": "", "three": "3"}}, `{"data":{"one":"","three":"3","two":"2"},"kind":"ConfigMap","name":""}`, ""}, + {"three keys", &v1.ConfigMap{Data: map[string]string{"two": "2", "one": "", "three": "3"}}, `{"data":{"one":"","three":"3","two":"2"},"kind":"ConfigMap","name":""}`, ""}, } for _, c := range cases { s, err := encodeConfigMap(c.cm) @@ -104,16 +104,16 @@ func TestEncodeConfigMap(t *testing.T) { func TestEncodeSecret(t *testing.T) { cases := []struct { desc string - secret *api.Secret + secret *v1.Secret expect string err string }{ // empty map - {"empty data", &api.Secret{Type: "my-type", Data: map[string][]byte{}}, `{"data":{},"kind":"Secret","name":"","type":"my-type"}`, ""}, + {"empty data", &v1.Secret{Type: "my-type", Data: map[string][]byte{}}, `{"data":{},"kind":"Secret","name":"","type":"my-type"}`, ""}, // one key - {"one key", &api.Secret{Type: "my-type", Data: map[string][]byte{"one": []byte("")}}, `{"data":{"one":""},"kind":"Secret","name":"","type":"my-type"}`, ""}, + {"one key", &v1.Secret{Type: "my-type", Data: map[string][]byte{"one": []byte("")}}, `{"data":{"one":""},"kind":"Secret","name":"","type":"my-type"}`, ""}, // three keys (tests sorting order) - note json.Marshal base64 encodes the values because they come in as []byte - {"three keys", &api.Secret{Type: "my-type", Data: map[string][]byte{"two": []byte("2"), "one": []byte(""), "three": []byte("3")}}, `{"data":{"one":"","three":"Mw==","two":"Mg=="},"kind":"Secret","name":"","type":"my-type"}`, ""}, + {"three keys", &v1.Secret{Type: "my-type", Data: map[string][]byte{"two": []byte("2"), "one": []byte(""), "three": []byte("3")}}, `{"data":{"one":"","three":"Mw==","two":"Mg=="},"kind":"Secret","name":"","type":"my-type"}`, ""}, } for _, c := range cases { s, err := encodeSecret(c.secret) @@ -148,8 +148,8 @@ not their metadata (e.g. the Data of a ConfigMap, but nothing in ObjectMeta). obj interface{} expect int }{ - {"ConfigMap", api.ConfigMap{}, 3}, - {"Secret", api.Secret{}, 4}, + {"ConfigMap", v1.ConfigMap{}, 3}, + {"Secret", v1.Secret{}, 5}, } for _, c := range cases { val := reflect.ValueOf(c.obj)