From 83d3d59ce023c7076ef4337695f79204ef4a52d2 Mon Sep 17 00:00:00 2001 From: Jeremy Whitlock Date: Tue, 23 May 2017 11:52:11 -0600 Subject: [PATCH] add "install" package for admission API group To properly register the types in the admission API group we need to create an "install" package and wire it up. This is required by the webhook admission controller being developed as part of https://github.com/kubernetes/community/pull/132 --- hack/lib/init.sh | 1 + pkg/api/testapi/testapi.go | 13 +++++++ pkg/apis/admission/install/install.go | 51 +++++++++++++++++++++++++++ pkg/master/import_known_versions.go | 1 + 4 files changed, 66 insertions(+) create mode 100644 pkg/apis/admission/install/install.go diff --git a/hack/lib/init.sh b/hack/lib/init.sh index 41967e1c8ea..02aba9eeddd 100755 --- a/hack/lib/init.sh +++ b/hack/lib/init.sh @@ -53,6 +53,7 @@ KUBE_OUTPUT_HOSTBIN="${KUBE_OUTPUT_BINPATH}/$(kube::util::host_platform)" KUBE_AVAILABLE_GROUP_VERSIONS="${KUBE_AVAILABLE_GROUP_VERSIONS:-\ v1 \ admissionregistration.k8s.io/v1alpha1 \ +admission.k8s.io/v1alpha1 \ apps/v1beta1 \ authentication.k8s.io/v1 \ authentication.k8s.io/v1beta1 \ diff --git a/pkg/api/testapi/testapi.go b/pkg/api/testapi/testapi.go index d36efa95670..3a08f575bf9 100644 --- a/pkg/api/testapi/testapi.go +++ b/pkg/api/testapi/testapi.go @@ -36,6 +36,7 @@ import ( "k8s.io/apimachinery/pkg/runtime/serializer/recognizer" "k8s.io/kubernetes/federation/apis/federation" "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/apis/admission" "k8s.io/kubernetes/pkg/apis/admissionregistration" "k8s.io/kubernetes/pkg/apis/apps" "k8s.io/kubernetes/pkg/apis/authorization" @@ -52,6 +53,7 @@ import ( _ "k8s.io/kubernetes/federation/apis/federation/install" _ "k8s.io/kubernetes/pkg/api/install" + _ "k8s.io/kubernetes/pkg/apis/admission/install" _ "k8s.io/kubernetes/pkg/apis/admissionregistration/install" _ "k8s.io/kubernetes/pkg/apis/apps/install" _ "k8s.io/kubernetes/pkg/apis/authentication/install" @@ -84,6 +86,7 @@ var ( Settings TestGroup Storage TestGroup ImagePolicy TestGroup + Admission TestGroup Networking TestGroup serializer runtime.SerializerInfo @@ -292,6 +295,15 @@ func init() { externalTypes: api.Scheme.KnownTypes(externalGroupVersion), } } + if _, ok := Groups[admission.GroupName]; !ok { + externalGroupVersion := schema.GroupVersion{Group: admission.GroupName, Version: api.Registry.GroupOrDie(admission.GroupName).GroupVersion.Version} + Groups[admission.GroupName] = TestGroup{ + externalGroupVersion: externalGroupVersion, + internalGroupVersion: admission.SchemeGroupVersion, + internalTypes: api.Scheme.KnownTypes(admission.SchemeGroupVersion), + externalTypes: api.Scheme.KnownTypes(externalGroupVersion), + } + } if _, ok := Groups[networking.GroupName]; !ok { externalGroupVersion := schema.GroupVersion{Group: networking.GroupName, Version: api.Registry.GroupOrDie(networking.GroupName).GroupVersion.Version} Groups[networking.GroupName] = TestGroup{ @@ -315,6 +327,7 @@ func init() { Storage = Groups[storage.GroupName] ImagePolicy = Groups[imagepolicy.GroupName] Authorization = Groups[authorization.GroupName] + Admission = Groups[admission.GroupName] Networking = Groups[networking.GroupName] } diff --git a/pkg/apis/admission/install/install.go b/pkg/apis/admission/install/install.go new file mode 100644 index 00000000000..fca70e225e0 --- /dev/null +++ b/pkg/apis/admission/install/install.go @@ -0,0 +1,51 @@ +/* +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 install installs the experimental API group, making it available as +// an option to all of the API encoding/decoding machinery. +package install + +import ( + "k8s.io/apimachinery/pkg/apimachinery/announced" + "k8s.io/apimachinery/pkg/apimachinery/registered" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/apis/admission" + "k8s.io/kubernetes/pkg/apis/admission/v1alpha1" +) + +func init() { + Install(api.GroupFactoryRegistry, api.Registry, api.Scheme) +} + +// Install registers the API group and adds types to a scheme +func Install(groupFactoryRegistry announced.APIGroupFactoryRegistry, registry *registered.APIRegistrationManager, scheme *runtime.Scheme) { + if err := announced.NewGroupMetaFactory( + &announced.GroupMetaFactoryArgs{ + GroupName: admission.GroupName, + VersionPreferenceOrder: []string{v1alpha1.SchemeGroupVersion.Version}, + ImportPrefix: "k8s.io/kubernetes/pkg/apis/admission", + RootScopedKinds: sets.NewString("AdmissionReview"), + AddInternalObjectsToScheme: admission.AddToScheme, + }, + announced.VersionToSchemeFunc{ + v1alpha1.SchemeGroupVersion.Version: v1alpha1.AddToScheme, + }, + ).Announce(groupFactoryRegistry).RegisterAndEnable(registry, scheme); err != nil { + panic(err) + } +} diff --git a/pkg/master/import_known_versions.go b/pkg/master/import_known_versions.go index 076b9889372..5176dba5638 100644 --- a/pkg/master/import_known_versions.go +++ b/pkg/master/import_known_versions.go @@ -22,6 +22,7 @@ import ( "k8s.io/kubernetes/pkg/api" _ "k8s.io/kubernetes/pkg/api/install" + _ "k8s.io/kubernetes/pkg/apis/admission/install" _ "k8s.io/kubernetes/pkg/apis/admissionregistration/install" _ "k8s.io/kubernetes/pkg/apis/apps/install" _ "k8s.io/kubernetes/pkg/apis/authentication/install"