Skip to content

Commit 88becfc

Browse files
author
Alexander Zielenski
committed
api: add v1beta1 ValidatingAdmissionPolicy/Binding types and storage
1 parent 5766947 commit 88becfc

File tree

8 files changed

+757
-0
lines changed

8 files changed

+757
-0
lines changed

cmd/kube-apiserver/app/aggregator.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,7 @@ var apiVersionPriorities = map[schema.GroupVersion]priority{
289289
{Group: "storage.k8s.io", Version: "v1alpha1"}: {group: 16800, version: 1},
290290
{Group: "apiextensions.k8s.io", Version: "v1"}: {group: 16700, version: 15},
291291
{Group: "admissionregistration.k8s.io", Version: "v1"}: {group: 16700, version: 15},
292+
{Group: "admissionregistration.k8s.io", Version: "v1beta1"}: {group: 16700, version: 12},
292293
{Group: "admissionregistration.k8s.io", Version: "v1alpha1"}: {group: 16700, version: 9},
293294
{Group: "scheduling.k8s.io", Version: "v1"}: {group: 16600, version: 15},
294295
{Group: "coordination.k8s.io", Version: "v1"}: {group: 16500, version: 15},

pkg/apis/admissionregistration/v1beta1/defaults.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,30 @@ func addDefaultingFuncs(scheme *runtime.Scheme) error {
2727
return RegisterDefaults(scheme)
2828
}
2929

30+
// SetDefaults_ValidatingAdmissionPolicySpec sets defaults for ValidatingAdmissionPolicySpec
31+
func SetDefaults_ValidatingAdmissionPolicySpec(obj *admissionregistrationv1beta1.ValidatingAdmissionPolicySpec) {
32+
if obj.FailurePolicy == nil {
33+
policy := admissionregistrationv1beta1.Fail
34+
obj.FailurePolicy = &policy
35+
}
36+
}
37+
38+
// SetDefaults_MatchResources sets defaults for MatchResources
39+
func SetDefaults_MatchResources(obj *admissionregistrationv1beta1.MatchResources) {
40+
if obj.MatchPolicy == nil {
41+
policy := admissionregistrationv1beta1.Equivalent
42+
obj.MatchPolicy = &policy
43+
}
44+
if obj.NamespaceSelector == nil {
45+
selector := metav1.LabelSelector{}
46+
obj.NamespaceSelector = &selector
47+
}
48+
if obj.ObjectSelector == nil {
49+
selector := metav1.LabelSelector{}
50+
obj.ObjectSelector = &selector
51+
}
52+
}
53+
3054
// SetDefaults_ValidatingWebhook sets defaults for webhook validating
3155
func SetDefaults_ValidatingWebhook(obj *admissionregistrationv1beta1.ValidatingWebhook) {
3256
if obj.FailurePolicy == nil {

pkg/apis/admissionregistration/v1beta1/defaults_test.go

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,3 +141,91 @@ func TestDefaultAdmissionWebhook(t *testing.T) {
141141
})
142142
}
143143
}
144+
145+
func TestDefaultAdmissionPolicy(t *testing.T) {
146+
fail := v1beta1.Fail
147+
equivalent := v1beta1.Equivalent
148+
allScopes := v1beta1.AllScopes
149+
150+
tests := []struct {
151+
name string
152+
original runtime.Object
153+
expected runtime.Object
154+
}{
155+
{
156+
name: "ValidatingAdmissionPolicy",
157+
original: &v1beta1.ValidatingAdmissionPolicy{
158+
Spec: v1beta1.ValidatingAdmissionPolicySpec{
159+
MatchConstraints: &v1beta1.MatchResources{},
160+
},
161+
},
162+
expected: &v1beta1.ValidatingAdmissionPolicy{
163+
Spec: v1beta1.ValidatingAdmissionPolicySpec{
164+
MatchConstraints: &v1beta1.MatchResources{
165+
MatchPolicy: &equivalent,
166+
NamespaceSelector: &metav1.LabelSelector{},
167+
ObjectSelector: &metav1.LabelSelector{},
168+
},
169+
FailurePolicy: &fail,
170+
},
171+
},
172+
},
173+
{
174+
name: "ValidatingAdmissionPolicyBinding",
175+
original: &v1beta1.ValidatingAdmissionPolicyBinding{
176+
Spec: v1beta1.ValidatingAdmissionPolicyBindingSpec{
177+
MatchResources: &v1beta1.MatchResources{},
178+
},
179+
},
180+
expected: &v1beta1.ValidatingAdmissionPolicyBinding{
181+
Spec: v1beta1.ValidatingAdmissionPolicyBindingSpec{
182+
MatchResources: &v1beta1.MatchResources{
183+
MatchPolicy: &equivalent,
184+
NamespaceSelector: &metav1.LabelSelector{},
185+
ObjectSelector: &metav1.LabelSelector{},
186+
},
187+
},
188+
},
189+
},
190+
{
191+
name: "scope=*",
192+
original: &v1beta1.ValidatingAdmissionPolicy{
193+
Spec: v1beta1.ValidatingAdmissionPolicySpec{
194+
MatchConstraints: &v1beta1.MatchResources{
195+
ResourceRules: []v1beta1.NamedRuleWithOperations{{}},
196+
},
197+
},
198+
},
199+
expected: &v1beta1.ValidatingAdmissionPolicy{
200+
Spec: v1beta1.ValidatingAdmissionPolicySpec{
201+
MatchConstraints: &v1beta1.MatchResources{
202+
MatchPolicy: &equivalent,
203+
NamespaceSelector: &metav1.LabelSelector{},
204+
ObjectSelector: &metav1.LabelSelector{},
205+
ResourceRules: []v1beta1.NamedRuleWithOperations{
206+
{
207+
RuleWithOperations: v1beta1.RuleWithOperations{
208+
Rule: v1beta1.Rule{
209+
Scope: &allScopes, // defaulted
210+
},
211+
},
212+
},
213+
},
214+
},
215+
FailurePolicy: &fail,
216+
},
217+
},
218+
},
219+
}
220+
221+
for _, test := range tests {
222+
t.Run(test.name, func(t *testing.T) {
223+
original := test.original
224+
expected := test.expected
225+
legacyscheme.Scheme.Default(original)
226+
if !apiequality.Semantic.DeepEqual(original, expected) {
227+
t.Error(cmp.Diff(expected, original))
228+
}
229+
})
230+
}
231+
}

pkg/controlplane/instance.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727

2828
admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
2929
admissionregistrationv1alpha1 "k8s.io/api/admissionregistration/v1alpha1"
30+
admissionregistrationv1beta1 "k8s.io/api/admissionregistration/v1beta1"
3031
apiserverinternalv1alpha1 "k8s.io/api/apiserverinternal/v1alpha1"
3132
appsv1 "k8s.io/api/apps/v1"
3233
authenticationv1 "k8s.io/api/authentication/v1"
@@ -780,6 +781,7 @@ var (
780781
}
781782
// betaAPIGroupVersionsDisabledByDefault is for all future beta groupVersions.
782783
betaAPIGroupVersionsDisabledByDefault = []schema.GroupVersion{
784+
admissionregistrationv1beta1.SchemeGroupVersion,
783785
authenticationv1beta1.SchemeGroupVersion,
784786
storageapiv1beta1.SchemeGroupVersion,
785787
flowcontrolv1beta1.SchemeGroupVersion,

pkg/registry/admissionregistration/rest/storage_apiserver.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package rest
1919
import (
2020
admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
2121
admissionregistrationv1alpha1 "k8s.io/api/admissionregistration/v1alpha1"
22+
admissionregistrationv1beta1 "k8s.io/api/admissionregistration/v1beta1"
2223
"k8s.io/apiserver/pkg/authorization/authorizer"
2324
"k8s.io/apiserver/pkg/registry/generic"
2425
"k8s.io/apiserver/pkg/registry/rest"
@@ -50,6 +51,12 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag
5051
apiGroupInfo.VersionedResourcesStorageMap[admissionregistrationv1.SchemeGroupVersion.Version] = storageMap
5152
}
5253

54+
if storageMap, err := p.v1beta1Storage(apiResourceConfigSource, restOptionsGetter); err != nil {
55+
return genericapiserver.APIGroupInfo{}, err
56+
} else if len(storageMap) > 0 {
57+
apiGroupInfo.VersionedResourcesStorageMap[admissionregistrationv1beta1.SchemeGroupVersion.Version] = storageMap
58+
}
59+
5360
if storageMap, err := p.v1alpha1Storage(apiResourceConfigSource, restOptionsGetter); err != nil {
5461
return genericapiserver.APIGroupInfo{}, err
5562
} else if len(storageMap) > 0 {
@@ -116,6 +123,40 @@ func (p RESTStorageProvider) v1alpha1Storage(apiResourceConfigSource serverstora
116123
return storage, nil
117124
}
118125

126+
func (p RESTStorageProvider) v1beta1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (map[string]rest.Storage, error) {
127+
storage := map[string]rest.Storage{}
128+
129+
// use a simple wrapper so that initialization order won't cause a nil getter
130+
var policyGetter rest.Getter
131+
132+
r, err := resolver.NewDiscoveryResourceResolver(p.DiscoveryClient)
133+
if err != nil {
134+
return storage, err
135+
}
136+
137+
// validatingadmissionpolicies
138+
if resource := "validatingadmissionpolicies"; apiResourceConfigSource.ResourceEnabled(admissionregistrationv1beta1.SchemeGroupVersion.WithResource(resource)) {
139+
policyStorage, policyStatusStorage, err := validatingadmissionpolicystorage.NewREST(restOptionsGetter, p.Authorizer, r)
140+
if err != nil {
141+
return storage, err
142+
}
143+
policyGetter = policyStorage
144+
storage[resource] = policyStorage
145+
storage[resource+"/status"] = policyStatusStorage
146+
}
147+
148+
// validatingadmissionpolicybindings
149+
if resource := "validatingadmissionpolicybindings"; apiResourceConfigSource.ResourceEnabled(admissionregistrationv1beta1.SchemeGroupVersion.WithResource(resource)) {
150+
policyBindingStorage, err := policybindingstorage.NewREST(restOptionsGetter, p.Authorizer, &policybindingstorage.DefaultPolicyGetter{Getter: policyGetter}, r)
151+
if err != nil {
152+
return storage, err
153+
}
154+
storage[resource] = policyBindingStorage
155+
}
156+
157+
return storage, nil
158+
}
159+
119160
func (p RESTStorageProvider) GroupName() string {
120161
return admissionregistration.GroupName
121162
}

pkg/registry/admissionregistration/validatingadmissionpolicy/strategy.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,9 @@ func (v *validatingAdmissionPolicyStrategy) GetResetFields() map[fieldpath.APIVe
135135
"admissionregistration.k8s.io/v1alpha1": fieldpath.NewSet(
136136
fieldpath.MakePathOrDie("status"),
137137
),
138+
"admissionregistration.k8s.io/v1beta1": fieldpath.NewSet(
139+
fieldpath.MakePathOrDie("status"),
140+
),
138141
}
139142

140143
return fields
@@ -170,6 +173,10 @@ func (s *validatingAdmissionPolicyStatusStrategy) GetResetFields() map[fieldpath
170173
fieldpath.MakePathOrDie("spec"),
171174
fieldpath.MakePathOrDie("metadata"),
172175
),
176+
"admissionregistration.k8s.io/v1beta1": fieldpath.NewSet(
177+
fieldpath.MakePathOrDie("spec"),
178+
fieldpath.MakePathOrDie("metadata"),
179+
),
173180
}
174181
}
175182

staging/src/k8s.io/api/admissionregistration/v1beta1/register.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,10 @@ func addKnownTypes(scheme *runtime.Scheme) error {
5050
&ValidatingWebhookConfigurationList{},
5151
&MutatingWebhookConfiguration{},
5252
&MutatingWebhookConfigurationList{},
53+
&ValidatingAdmissionPolicy{},
54+
&ValidatingAdmissionPolicyList{},
55+
&ValidatingAdmissionPolicyBinding{},
56+
&ValidatingAdmissionPolicyBindingList{},
5357
)
5458
metav1.AddToGroupVersion(scheme, SchemeGroupVersion)
5559
return nil

0 commit comments

Comments
 (0)