5
5
package v1alpha3
6
6
7
7
import (
8
+ "fmt"
8
9
"strings"
9
10
11
+ apierrors "k8s.io/apimachinery/pkg/api/errors"
12
+ runtime "k8s.io/apimachinery/pkg/runtime"
13
+ "k8s.io/apimachinery/pkg/runtime/schema"
10
14
"k8s.io/apimachinery/pkg/util/intstr"
15
+ "k8s.io/apimachinery/pkg/util/validation/field"
11
16
ctrl "sigs.k8s.io/controller-runtime"
12
17
"sigs.k8s.io/controller-runtime/pkg/webhook"
13
18
)
@@ -20,8 +25,12 @@ func (r *TalosControlPlane) SetupWebhookWithManager(mgr ctrl.Manager) error {
20
25
}
21
26
22
27
// +kubebuilder:webhook:verbs=create;update,path=/mutate-controlplane-cluster-x-k8s-io-v1alpha3-taloscontrolplane,mutating=true,failurePolicy=fail,matchPolicy=Equivalent,groups=controlplane.cluster.x-k8s.io,resources=taloscontrolplanes,versions=v1alpha3,name=default.taloscontrolplane.controlplane.cluster.x-k8s.io,sideEffects=None,admissionReviewVersions=v1;v1beta1
28
+ //+kubebuilder:webhook:verbs=create;update;delete,path=/validate-controlplane-cluster-x-k8s-io-v1alpha3-taloscontrolplane,mutating=false,failurePolicy=fail,groups=controlplane.cluster.x-k8s.io,resources=taloscontrolplanes,versions=v1alpha3,name=validate.taloscontrolplane.controlplane.cluster.x-k8s.io,sideEffects=None,admissionReviewVersions=v1
23
29
24
- var _ webhook.Defaulter = & TalosControlPlane {}
30
+ var (
31
+ _ webhook.Defaulter = & TalosControlPlane {}
32
+ _ webhook.Validator = & TalosControlPlane {}
33
+ )
25
34
26
35
// Default implements webhook.Defaulter so a webhook will be registered for the type.
27
36
func (r * TalosControlPlane ) Default () {
@@ -63,3 +72,46 @@ func defaultRolloutStrategy(rolloutStrategy *RolloutStrategy) *RolloutStrategy {
63
72
64
73
return rolloutStrategy
65
74
}
75
+
76
+ // ValidateCreate implements webhook.Validator so a webhook will be registered for the type
77
+ func (r * TalosControlPlane ) ValidateCreate () error {
78
+ return r .validate ()
79
+ }
80
+
81
+ // ValidateUpdate implements webhook.Validator so a webhook will be registered for the type
82
+ func (r * TalosControlPlane ) ValidateUpdate (old runtime.Object ) error {
83
+ return r .validate ()
84
+ }
85
+
86
+ // ValidateDelete implements webhook.Validator so a webhook will be registered for the type
87
+ func (r * TalosControlPlane ) ValidateDelete () error {
88
+ return nil
89
+ }
90
+
91
+ func (r * TalosControlPlane ) validate () error {
92
+ var allErrs field.ErrorList
93
+
94
+ if r .Spec .RolloutStrategy == nil {
95
+ return nil
96
+ }
97
+
98
+ switch r .Spec .RolloutStrategy .Type {
99
+ case "" :
100
+ case RollingUpdateStrategyType :
101
+ case OnDeleteStrategyType :
102
+ default :
103
+ allErrs = append (allErrs ,
104
+ field .Invalid (field .NewPath ("spec" ).Child ("rolloutStrategy" ), r .Spec .RolloutStrategy .Type ,
105
+ fmt .Sprintf ("valid values are: %q" , []RolloutStrategyType {RollingUpdateStrategyType , OnDeleteStrategyType }),
106
+ ),
107
+ )
108
+ }
109
+
110
+ if len (allErrs ) == 0 {
111
+ return nil
112
+ }
113
+
114
+ return apierrors .NewInvalid (
115
+ schema.GroupKind {Group : GroupVersion .Group , Kind : "TalosControlPlane" },
116
+ r .Name , allErrs )
117
+ }
0 commit comments