From e24377f1908a1c206a2d85031e9d758e2e23605d Mon Sep 17 00:00:00 2001 From: Jordan Liggitt Date: Fri, 28 Jun 2019 15:24:56 -0700 Subject: [PATCH] Install/register v1 admission registration types --- hack/.golint_failures | 2 ++ hack/.import-aliases | 1 + hack/lib/init.sh | 1 + pkg/api/testing/defaulting_test.go | 6 +++++- .../admissionregistration/install/install.go | 4 +++- pkg/controller/.import-restrictions | 1 + pkg/kubectl/scheme/install.go | 3 ++- pkg/master/master.go | 2 ++ pkg/master/storageversionhashdata/data.go | 2 ++ .../rest/storage_apiserver.go | 17 +++++++++++++++++ staging/src/k8s.io/api/roundtrip_test.go | 2 ++ .../admissionwebhook/admission_test.go | 2 ++ test/integration/etcd/data.go | 13 +++++++++++++ 13 files changed, 53 insertions(+), 3 deletions(-) diff --git a/hack/.golint_failures b/hack/.golint_failures index dec185def3f..a4e8a44523f 100644 --- a/hack/.golint_failures +++ b/hack/.golint_failures @@ -3,6 +3,7 @@ cmd/kube-apiserver/app cmd/kubeadm/app/apis/kubeadm/v1beta1 cmd/kubeadm/app/apis/kubeadm/v1beta2 pkg/apis/admission +pkg/apis/admissionregistration/v1 pkg/apis/admissionregistration/v1beta1 pkg/apis/admissionregistration/validation pkg/apis/apps @@ -311,6 +312,7 @@ plugin/pkg/auth/authorizer/node plugin/pkg/auth/authorizer/rbac plugin/pkg/auth/authorizer/rbac/bootstrappolicy staging/src/k8s.io/api/admission/v1beta1 +staging/src/k8s.io/api/admissionregistration/v1 staging/src/k8s.io/api/admissionregistration/v1beta1 staging/src/k8s.io/api/apps/v1 staging/src/k8s.io/api/apps/v1beta1 diff --git a/hack/.import-aliases b/hack/.import-aliases index c4925d763fc..ef9fd163569 100644 --- a/hack/.import-aliases +++ b/hack/.import-aliases @@ -1,4 +1,5 @@ { + "k8s.io/api/admissionregistration/v1": "admissionregistrationv1", "k8s.io/api/admissionregistration/v1beta1": "admissionregistrationv1beta1", "k8s.io/api/admission/v1beta1": "admissionv1beta1", "k8s.io/api/apps/v1": "appsv1", diff --git a/hack/lib/init.sh b/hack/lib/init.sh index 46b69836efa..3564550ab3b 100755 --- a/hack/lib/init.sh +++ b/hack/lib/init.sh @@ -63,6 +63,7 @@ export KUBE_OUTPUT_HOSTBIN # most preferred version for a group should appear first KUBE_AVAILABLE_GROUP_VERSIONS="${KUBE_AVAILABLE_GROUP_VERSIONS:-\ v1 \ +admissionregistration.k8s.io/v1 \ admissionregistration.k8s.io/v1beta1 \ admission.k8s.io/v1beta1 \ apps/v1 \ diff --git a/pkg/api/testing/defaulting_test.go b/pkg/api/testing/defaulting_test.go index e906adcc42f..35bd92470f5 100644 --- a/pkg/api/testing/defaulting_test.go +++ b/pkg/api/testing/defaulting_test.go @@ -22,7 +22,7 @@ import ( "sort" "testing" - "github.com/google/gofuzz" + fuzz "github.com/google/gofuzz" apiv1 "k8s.io/api/core/v1" extensionsv1beta1 "k8s.io/api/extensions/v1beta1" @@ -136,6 +136,10 @@ func TestDefaulting(t *testing.T) { {Group: "admissionregistration.k8s.io", Version: "v1beta1", Kind: "ValidatingWebhookConfigurationList"}: {}, {Group: "admissionregistration.k8s.io", Version: "v1beta1", Kind: "MutatingWebhookConfiguration"}: {}, {Group: "admissionregistration.k8s.io", Version: "v1beta1", Kind: "MutatingWebhookConfigurationList"}: {}, + {Group: "admissionregistration.k8s.io", Version: "v1", Kind: "ValidatingWebhookConfiguration"}: {}, + {Group: "admissionregistration.k8s.io", Version: "v1", Kind: "ValidatingWebhookConfigurationList"}: {}, + {Group: "admissionregistration.k8s.io", Version: "v1", Kind: "MutatingWebhookConfiguration"}: {}, + {Group: "admissionregistration.k8s.io", Version: "v1", Kind: "MutatingWebhookConfigurationList"}: {}, {Group: "auditregistration.k8s.io", Version: "v1alpha1", Kind: "AuditSink"}: {}, {Group: "auditregistration.k8s.io", Version: "v1alpha1", Kind: "AuditSinkList"}: {}, {Group: "networking.k8s.io", Version: "v1", Kind: "NetworkPolicy"}: {}, diff --git a/pkg/apis/admissionregistration/install/install.go b/pkg/apis/admissionregistration/install/install.go index e36aa7ea026..86b5402739e 100644 --- a/pkg/apis/admissionregistration/install/install.go +++ b/pkg/apis/admissionregistration/install/install.go @@ -21,6 +21,7 @@ import ( utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/apis/admissionregistration" + "k8s.io/kubernetes/pkg/apis/admissionregistration/v1" "k8s.io/kubernetes/pkg/apis/admissionregistration/v1beta1" ) @@ -32,5 +33,6 @@ func init() { func Install(scheme *runtime.Scheme) { utilruntime.Must(admissionregistration.AddToScheme(scheme)) utilruntime.Must(v1beta1.AddToScheme(scheme)) - utilruntime.Must(scheme.SetVersionPriority(v1beta1.SchemeGroupVersion)) + utilruntime.Must(v1.AddToScheme(scheme)) + utilruntime.Must(scheme.SetVersionPriority(v1beta1.SchemeGroupVersion, v1.SchemeGroupVersion)) } diff --git a/pkg/controller/.import-restrictions b/pkg/controller/.import-restrictions index a47e51a2b16..0da9bad2cc4 100644 --- a/pkg/controller/.import-restrictions +++ b/pkg/controller/.import-restrictions @@ -77,6 +77,7 @@ "k8s.io/api/batch/v2alpha1", "k8s.io/apiserver/pkg/registry/rest", "k8s.io/api/scheduling/v1alpha1", + "k8s.io/api/admissionregistration/v1", "k8s.io/api/admissionregistration/v1beta1", "k8s.io/api/authorization/v1", "k8s.io/api/settings/v1alpha1", diff --git a/pkg/kubectl/scheme/install.go b/pkg/kubectl/scheme/install.go index 76a0578dc19..83beb3da289 100644 --- a/pkg/kubectl/scheme/install.go +++ b/pkg/kubectl/scheme/install.go @@ -18,6 +18,7 @@ package scheme import ( admissionv1alpha1 "k8s.io/api/admission/v1beta1" + admissionregistrationv1 "k8s.io/api/admissionregistration/v1" admissionregistrationv1beta1 "k8s.io/api/admissionregistration/v1beta1" appsv1 "k8s.io/api/apps/v1" appsv1beta1 "k8s.io/api/apps/v1beta1" @@ -63,7 +64,7 @@ func init() { utilruntime.Must(Scheme.SetVersionPriority(corev1.SchemeGroupVersion)) utilruntime.Must(Scheme.SetVersionPriority(admissionv1alpha1.SchemeGroupVersion)) - utilruntime.Must(Scheme.SetVersionPriority(admissionregistrationv1beta1.SchemeGroupVersion)) + utilruntime.Must(Scheme.SetVersionPriority(admissionregistrationv1beta1.SchemeGroupVersion, admissionregistrationv1.SchemeGroupVersion)) utilruntime.Must(Scheme.SetVersionPriority(appsv1beta1.SchemeGroupVersion, appsv1beta2.SchemeGroupVersion, appsv1.SchemeGroupVersion)) utilruntime.Must(Scheme.SetVersionPriority(authenticationv1.SchemeGroupVersion, authenticationv1beta1.SchemeGroupVersion)) utilruntime.Must(Scheme.SetVersionPriority(authorizationv1.SchemeGroupVersion, authorizationv1beta1.SchemeGroupVersion)) diff --git a/pkg/master/master.go b/pkg/master/master.go index 5fe02353659..48b74bb6104 100644 --- a/pkg/master/master.go +++ b/pkg/master/master.go @@ -24,6 +24,7 @@ import ( "strconv" "time" + admissionregistrationv1 "k8s.io/api/admissionregistration/v1" admissionregistrationv1beta1 "k8s.io/api/admissionregistration/v1beta1" appsv1 "k8s.io/api/apps/v1" appsv1beta1 "k8s.io/api/apps/v1beta1" @@ -479,6 +480,7 @@ func DefaultAPIResourceConfigSource() *serverstorage.ResourceConfig { ret := serverstorage.NewResourceConfig() // NOTE: GroupVersions listed here will be enabled by default. Don't put alpha versions in the list. ret.EnableVersions( + admissionregistrationv1.SchemeGroupVersion, admissionregistrationv1beta1.SchemeGroupVersion, apiv1.SchemeGroupVersion, appsv1.SchemeGroupVersion, diff --git a/pkg/master/storageversionhashdata/data.go b/pkg/master/storageversionhashdata/data.go index e30b81fbbf5..b1dd1c3ece7 100644 --- a/pkg/master/storageversionhashdata/data.go +++ b/pkg/master/storageversionhashdata/data.go @@ -94,5 +94,7 @@ var GVRToStorageVersionHash = map[string]string{ "apps/v1/statefulsets": "H+vl74LkKdo=", "admissionregistration.k8s.io/v1beta1/mutatingwebhookconfigurations": "yxW1cpLtfp8=", "admissionregistration.k8s.io/v1beta1/validatingwebhookconfigurations": "P9NhrezfnWE=", + "admissionregistration.k8s.io/v1/mutatingwebhookconfigurations": "yxW1cpLtfp8=", + "admissionregistration.k8s.io/v1/validatingwebhookconfigurations": "P9NhrezfnWE=", "events.k8s.io/v1beta1/events": "r2yiGXH7wu8=", } diff --git a/pkg/registry/admissionregistration/rest/storage_apiserver.go b/pkg/registry/admissionregistration/rest/storage_apiserver.go index 535c2317d03..f0ea9f95028 100644 --- a/pkg/registry/admissionregistration/rest/storage_apiserver.go +++ b/pkg/registry/admissionregistration/rest/storage_apiserver.go @@ -17,6 +17,7 @@ limitations under the License. package rest import ( + admissionregistrationv1 "k8s.io/api/admissionregistration/v1" admissionregistrationv1beta1 "k8s.io/api/admissionregistration/v1beta1" "k8s.io/apiserver/pkg/registry/generic" "k8s.io/apiserver/pkg/registry/rest" @@ -38,6 +39,9 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag if apiResourceConfigSource.VersionEnabled(admissionregistrationv1beta1.SchemeGroupVersion) { apiGroupInfo.VersionedResourcesStorageMap[admissionregistrationv1beta1.SchemeGroupVersion.Version] = p.v1beta1Storage(apiResourceConfigSource, restOptionsGetter) } + if apiResourceConfigSource.VersionEnabled(admissionregistrationv1.SchemeGroupVersion) { + apiGroupInfo.VersionedResourcesStorageMap[admissionregistrationv1.SchemeGroupVersion.Version] = p.v1Storage(apiResourceConfigSource, restOptionsGetter) + } return apiGroupInfo, true } @@ -54,6 +58,19 @@ func (p RESTStorageProvider) v1beta1Storage(apiResourceConfigSource serverstorag return storage } +func (p RESTStorageProvider) v1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage { + storage := map[string]rest.Storage{} + // validatingwebhookconfigurations + validatingStorage := validatingwebhookconfigurationstorage.NewREST(restOptionsGetter) + storage["validatingwebhookconfigurations"] = validatingStorage + + // mutatingwebhookconfigurations + mutatingStorage := mutatingwebhookconfigurationstorage.NewREST(restOptionsGetter) + storage["mutatingwebhookconfigurations"] = mutatingStorage + + return storage +} + func (p RESTStorageProvider) GroupName() string { return admissionregistration.GroupName } diff --git a/staging/src/k8s.io/api/roundtrip_test.go b/staging/src/k8s.io/api/roundtrip_test.go index f7c52ede571..bf5b2bec822 100644 --- a/staging/src/k8s.io/api/roundtrip_test.go +++ b/staging/src/k8s.io/api/roundtrip_test.go @@ -21,6 +21,7 @@ import ( "testing" admissionv1beta1 "k8s.io/api/admission/v1beta1" + admissionregv1 "k8s.io/api/admissionregistration/v1" admissionregv1beta1 "k8s.io/api/admissionregistration/v1beta1" appsv1 "k8s.io/api/apps/v1" appsv1beta1 "k8s.io/api/apps/v1beta1" @@ -69,6 +70,7 @@ import ( var groups = []runtime.SchemeBuilder{ admissionv1beta1.SchemeBuilder, admissionregv1beta1.SchemeBuilder, + admissionregv1.SchemeBuilder, appsv1beta1.SchemeBuilder, appsv1beta2.SchemeBuilder, appsv1.SchemeBuilder, diff --git a/test/integration/apiserver/admissionwebhook/admission_test.go b/test/integration/apiserver/admissionwebhook/admission_test.go index b243f5a24df..7e7075f2fb3 100644 --- a/test/integration/apiserver/admissionwebhook/admission_test.go +++ b/test/integration/apiserver/admissionwebhook/admission_test.go @@ -124,6 +124,8 @@ var ( admissionExemptResources = map[schema.GroupVersionResource]bool{ gvr("admissionregistration.k8s.io", "v1beta1", "mutatingwebhookconfigurations"): true, gvr("admissionregistration.k8s.io", "v1beta1", "validatingwebhookconfigurations"): true, + gvr("admissionregistration.k8s.io", "v1", "mutatingwebhookconfigurations"): true, + gvr("admissionregistration.k8s.io", "v1", "validatingwebhookconfigurations"): true, } parentResources = map[schema.GroupVersionResource]schema.GroupVersionResource{ diff --git a/test/integration/etcd/data.go b/test/integration/etcd/data.go index 2f96aceaf3e..eafd44abe15 100644 --- a/test/integration/etcd/data.go +++ b/test/integration/etcd/data.go @@ -413,6 +413,19 @@ func GetEtcdStorageDataForNamespace(namespace string) map[schema.GroupVersionRes }, // -- + // k8s.io/kubernetes/pkg/apis/admissionregistration/v1 + gvr("admissionregistration.k8s.io", "v1", "validatingwebhookconfigurations"): { + Stub: `{"metadata":{"name":"hook2","creationTimestamp":null},"webhooks":[{"name":"externaladmissionhook.k8s.io","clientConfig":{"service":{"namespace":"ns","name":"n"},"caBundle":null},"rules":[{"operations":["CREATE"],"apiGroups":["group"],"apiVersions":["version"],"resources":["resource"]}],"failurePolicy":"Ignore","sideEffects":"Unknown","admissionReviewVersions":["v1beta1"]}]}`, + ExpectedEtcdPath: "/registry/validatingwebhookconfigurations/hook2", + ExpectedGVK: gvkP("admissionregistration.k8s.io", "v1beta1", "ValidatingWebhookConfiguration"), + }, + gvr("admissionregistration.k8s.io", "v1", "mutatingwebhookconfigurations"): { + Stub: `{"metadata":{"name":"hook2","creationTimestamp":null},"webhooks":[{"name":"externaladmissionhook.k8s.io","clientConfig":{"service":{"namespace":"ns","name":"n"},"caBundle":null},"rules":[{"operations":["CREATE"],"apiGroups":["group"],"apiVersions":["version"],"resources":["resource"]}],"failurePolicy":"Ignore","sideEffects":"Unknown","admissionReviewVersions":["v1beta1"]}]}`, + ExpectedEtcdPath: "/registry/mutatingwebhookconfigurations/hook2", + ExpectedGVK: gvkP("admissionregistration.k8s.io", "v1beta1", "MutatingWebhookConfiguration"), + }, + // -- + // k8s.io/kubernetes/pkg/apis/admissionregistration/v1beta1 gvr("admissionregistration.k8s.io", "v1beta1", "validatingwebhookconfigurations"): { Stub: `{"metadata":{"name":"hook1","creationTimestamp":null},"webhooks":[{"name":"externaladmissionhook.k8s.io","clientConfig":{"service":{"namespace":"ns","name":"n"},"caBundle":null},"rules":[{"operations":["CREATE"],"apiGroups":["group"],"apiVersions":["version"],"resources":["resource"]}],"failurePolicy":"Ignore"}]}`,