@@ -17,9 +17,12 @@ limitations under the License.
17
17
package v1alpha4
18
18
19
19
import (
20
+ "k8s.io/apimachinery/pkg/runtime"
21
+ "k8s.io/apimachinery/pkg/util/validation/field"
20
22
"sigs.k8s.io/controller-runtime/pkg/builder"
21
23
logf "sigs.k8s.io/controller-runtime/pkg/log"
22
24
"sigs.k8s.io/controller-runtime/pkg/manager"
25
+ "sigs.k8s.io/controller-runtime/pkg/webhook"
23
26
)
24
27
25
28
// log is for logging in this package.
@@ -30,3 +33,45 @@ func (r *OpenStackCluster) SetupWebhookWithManager(mgr manager.Manager) error {
30
33
For (r ).
31
34
Complete ()
32
35
}
36
+
37
+ // +kubebuilder:webhook:verbs=create;update,path=/validate-infrastructure-cluster-x-k8s-io-v1alpha4-openstackcluster,mutating=false,failurePolicy=fail,matchPolicy=Equivalent,groups=infrastructure.cluster.x-k8s.io,resources=openstackcluster,versions=v1alpha4,name=validation.openstackcluster.infrastructure.x-k8s.io,sideEffects=None,admissionReviewVersions=v1beta1
38
+ // +kubebuilder:webhook:verbs=create;update,path=/mutate-infrastructure-cluster-x-k8s-io-v1alpha4-openstackcluster,mutating=true,failurePolicy=fail,matchPolicy=Equivalent,groups=infrastructure.cluster.x-k8s.io,resources=openstackcluster,versions=v1alpha4,name=default.openstackcluster.infrastructure.x-k8s.io,sideEffects=None,admissionReviewVersions=v1beta1
39
+
40
+ var (
41
+ _ webhook.Defaulter = & OpenStackCluster {}
42
+ _ webhook.Validator = & OpenStackCluster {}
43
+ )
44
+
45
+ // Default satisfies the defaulting webhook interface.
46
+ func (r * OpenStackCluster ) Default () {
47
+ if r .Spec .IdentityRef != nil && r .Spec .IdentityRef .Kind == "" {
48
+ r .Spec .IdentityRef .Kind = defaultIdentityRefKind
49
+ }
50
+ }
51
+
52
+ // ValidateCreate implements webhook.Validator so a webhook will be registered for the type.
53
+ func (r * OpenStackCluster ) ValidateCreate () error {
54
+ var allErrs field.ErrorList
55
+
56
+ if r .Spec .IdentityRef != nil && r .Spec .IdentityRef .Kind != defaultIdentityRefKind {
57
+ allErrs = append (allErrs , field .Forbidden (field .NewPath ("spec" , "identityRef" , "kind" ), "must be a Secret" ))
58
+ }
59
+
60
+ return aggregateObjErrors (r .GroupVersionKind ().GroupKind (), r .Name , allErrs )
61
+ }
62
+
63
+ // ValidateUpdate implements webhook.Validator so a webhook will be registered for the type.
64
+ func (r * OpenStackCluster ) ValidateUpdate (old runtime.Object ) error {
65
+ var allErrs field.ErrorList
66
+
67
+ if r .Spec .IdentityRef != nil && r .Spec .IdentityRef .Kind != defaultIdentityRefKind {
68
+ allErrs = append (allErrs , field .Forbidden (field .NewPath ("spec" , "identityRef" , "kind" ), "must be a Secret" ))
69
+ }
70
+
71
+ return aggregateObjErrors (r .GroupVersionKind ().GroupKind (), r .Name , allErrs )
72
+ }
73
+
74
+ // ValidateDelete implements webhook.Validator so a webhook will be registered for the type.
75
+ func (r * OpenStackCluster ) ValidateDelete () error {
76
+ return nil
77
+ }
0 commit comments