@@ -19,7 +19,7 @@ limitations under the License.
19
19
//
20
20
// The markers take the form:
21
21
//
22
- // +kubebuilder:webhook:webhookVersions=<[]string>,failurePolicy=<string>,matchPolicy=<string>,groups=<[]string>,resources=<[]string>,verbs=<[]string>,versions=<[]string>,name=<string>,path=<string>,mutating=<bool>,sideEffects=<string>
22
+ // +kubebuilder:webhook:webhookVersions=<[]string>,failurePolicy=<string>,matchPolicy=<string>,groups=<[]string>,resources=<[]string>,verbs=<[]string>,versions=<[]string>,name=<string>,path=<string>,mutating=<bool>,sideEffects=<string>,admissionReviewVersions=<[]string>
23
23
package webhook
24
24
25
25
import (
@@ -107,6 +107,12 @@ type Config struct {
107
107
// WebhookVersions specifies the target API versions of the {Mutating,Validating}WebhookConfiguration objects
108
108
// itself to generate. Defaults to v1.
109
109
WebhookVersions []string `marker:"webhookVersions,optional"`
110
+
111
+ // AdmissionReviewVersions is an ordered list of preferred `AdmissionReview`
112
+ // versions the Webhook expects.
113
+ // For generating v1 {Mutating,Validating}WebhookConfiguration, this is mandatory.
114
+ // For generating v1beta1 {Mutating,Validating}WebhookConfiguration, this is optional, and default to v1beta1.
115
+ AdmissionReviewVersions []string `marker:"admissionReviewVersions,optional"`
110
116
}
111
117
112
118
// verbToAPIVariant converts a marker's verb to the proper value for the API.
@@ -140,15 +146,13 @@ func (c Config) ToMutatingWebhook() (admissionregv1.MutatingWebhook, error) {
140
146
}
141
147
142
148
return admissionregv1.MutatingWebhook {
143
- Name : c .Name ,
144
- Rules : c .rules (),
145
- FailurePolicy : c .failurePolicy (),
146
- MatchPolicy : matchPolicy ,
147
- ClientConfig : c .clientConfig (),
148
- SideEffects : c .sideEffects (),
149
- // TODO(jiachengxu): AdmissionReviewVersions becomes required in admissionregistration/v1, here we default it
150
- // to `v1` and `v1beta1`, and we should support to config the `AdmissionReviewVersions` as a marker.
151
- AdmissionReviewVersions : []string {defaultWebhookVersion , "v1beta1" },
149
+ Name : c .Name ,
150
+ Rules : c .rules (),
151
+ FailurePolicy : c .failurePolicy (),
152
+ MatchPolicy : matchPolicy ,
153
+ ClientConfig : c .clientConfig (),
154
+ SideEffects : c .sideEffects (),
155
+ AdmissionReviewVersions : c .AdmissionReviewVersions ,
152
156
}, nil
153
157
}
154
158
@@ -164,15 +168,13 @@ func (c Config) ToValidatingWebhook() (admissionregv1.ValidatingWebhook, error)
164
168
}
165
169
166
170
return admissionregv1.ValidatingWebhook {
167
- Name : c .Name ,
168
- Rules : c .rules (),
169
- FailurePolicy : c .failurePolicy (),
170
- MatchPolicy : matchPolicy ,
171
- ClientConfig : c .clientConfig (),
172
- SideEffects : c .sideEffects (),
173
- // TODO(jiachengxu): AdmissionReviewVersions becomes required in admissionregistration/v1, here we default it
174
- // to `v1` and `v1beta1`, and we should support to config the `AdmissionReviewVersions` as a marker.
175
- AdmissionReviewVersions : []string {defaultWebhookVersion , "v1beta1" },
171
+ Name : c .Name ,
172
+ Rules : c .rules (),
173
+ FailurePolicy : c .failurePolicy (),
174
+ MatchPolicy : matchPolicy ,
175
+ ClientConfig : c .clientConfig (),
176
+ SideEffects : c .sideEffects (),
177
+ AdmissionReviewVersions : c .AdmissionReviewVersions ,
176
178
}, nil
177
179
}
178
180
@@ -344,29 +346,26 @@ func (Generator) Generate(ctx *genall.GenerationContext) error {
344
346
},
345
347
Webhooks : cfgs ,
346
348
}
347
- // SideEffects in required in admissionregistration/v1, if this is not set or set to `Some` or `Known`,
348
- // we return an error
349
349
if version == defaultWebhookVersion {
350
350
for i := range objRaw .Webhooks {
351
+ // SideEffects is required in admissionregistration/v1, if this is not set or set to `Some` or `Known`,
352
+ // we return an error
351
353
if err := checkSideEffectsForV1 (objRaw .Webhooks [i ].SideEffects ); err != nil {
352
354
return err
353
355
}
356
+ // AdmissionReviewVersions is required in admissionregistration/v1, if this is not set,
357
+ // we return an error
358
+ if len (objRaw .Webhooks [i ].AdmissionReviewVersions ) == 0 {
359
+ return fmt .Errorf ("AdmissionReviewVersions is mandatory for v1 {Mutating,Validating}WebhookConfiguration" )
360
+ }
354
361
}
355
- }
356
- // AdmissionReviewVersions is optional in admissionregistration/v1beta1, so let kubernetes to default it.
357
- if version == "v1beta1" {
358
- for i := range objRaw .Webhooks {
359
- objRaw .Webhooks [i ].AdmissionReviewVersions = nil
360
- }
361
- }
362
- if version != defaultWebhookVersion {
362
+ versionedWebhooks [version ] = append (versionedWebhooks [version ], objRaw )
363
+ } else {
363
364
conv , err := MutatingWebhookConfigurationAsVersion (objRaw , schema.GroupVersion {Group : admissionregv1 .SchemeGroupVersion .Group , Version : version })
364
- versionedWebhooks [version ] = append (versionedWebhooks [version ], conv )
365
365
if err != nil {
366
366
return err
367
367
}
368
- } else {
369
- versionedWebhooks [version ] = append (versionedWebhooks [version ], objRaw )
368
+ versionedWebhooks [version ] = append (versionedWebhooks [version ], conv )
370
369
}
371
370
}
372
371
@@ -381,29 +380,26 @@ func (Generator) Generate(ctx *genall.GenerationContext) error {
381
380
},
382
381
Webhooks : cfgs ,
383
382
}
384
- // SideEffects in required in admissionregistration/v1, if this is not set or set to `Some` or `Known`,
385
- // we return an error
386
383
if version == defaultWebhookVersion {
387
384
for i := range objRaw .Webhooks {
385
+ // SideEffects is required in admissionregistration/v1, if this is not set or set to `Some` or `Known`,
386
+ // we return an error
388
387
if err := checkSideEffectsForV1 (objRaw .Webhooks [i ].SideEffects ); err != nil {
389
388
return err
390
389
}
390
+ // AdmissionReviewVersions is required in admissionregistration/v1, if this is not set,
391
+ // we return an error
392
+ if len (objRaw .Webhooks [i ].AdmissionReviewVersions ) == 0 {
393
+ return fmt .Errorf ("AdmissionReviewVersions is mandatory for v1 {Mutating,Validating}WebhookConfiguration" )
394
+ }
391
395
}
392
- }
393
- // AdmissionReviewVersions is optional in admissionregistration/v1beta1, so let kubernetes to default it.
394
- if version == "v1beta1" {
395
- for i := range objRaw .Webhooks {
396
- objRaw .Webhooks [i ].AdmissionReviewVersions = nil
397
- }
398
- }
399
- if version != defaultWebhookVersion {
396
+ versionedWebhooks [version ] = append (versionedWebhooks [version ], objRaw )
397
+ } else {
400
398
conv , err := ValidatingWebhookConfigurationAsVersion (objRaw , schema.GroupVersion {Group : admissionregv1 .SchemeGroupVersion .Group , Version : version })
401
- versionedWebhooks [version ] = append (versionedWebhooks [version ], conv )
402
399
if err != nil {
403
400
return err
404
401
}
405
- } else {
406
- versionedWebhooks [version ] = append (versionedWebhooks [version ], objRaw )
402
+ versionedWebhooks [version ] = append (versionedWebhooks [version ], conv )
407
403
}
408
404
}
409
405
}
0 commit comments