@@ -20,6 +20,7 @@ import (
20
20
"github.com/google/go-cmp/cmp"
21
21
apierrors "k8s.io/apimachinery/pkg/api/errors"
22
22
"k8s.io/apimachinery/pkg/runtime"
23
+ kerrors "k8s.io/apimachinery/pkg/util/errors"
23
24
"k8s.io/apimachinery/pkg/util/validation/field"
24
25
ctrl "sigs.k8s.io/controller-runtime"
25
26
logf "sigs.k8s.io/controller-runtime/pkg/log"
@@ -53,7 +54,7 @@ var _ webhook.Validator = &GCPManagedCluster{}
53
54
func (r * GCPManagedCluster ) ValidateCreate () (admission.Warnings , error ) {
54
55
gcpmanagedclusterlog .Info ("validate create" , "name" , r .Name )
55
56
56
- return nil , nil
57
+ return r . validate ()
57
58
}
58
59
59
60
// ValidateUpdate implements webhook.Validator so a webhook will be registered for the type.
@@ -96,3 +97,36 @@ func (r *GCPManagedCluster) ValidateDelete() (admission.Warnings, error) {
96
97
97
98
return nil , nil
98
99
}
100
+
101
+ func (r * GCPManagedCluster ) validate () (admission.Warnings , error ) {
102
+ validators := []func () error {
103
+ r .validateCustomSubnet ,
104
+ }
105
+
106
+ var errs []error
107
+ for _ , validator := range validators {
108
+ if err := validator (); err != nil {
109
+ errs = append (errs , err )
110
+ }
111
+ }
112
+
113
+ return nil , kerrors .NewAggregate (errs )
114
+ }
115
+
116
+ func (r * GCPManagedCluster ) validateCustomSubnet () error {
117
+ gcpmanagedclusterlog .Info ("validate custom subnet" , "name" , r .Name )
118
+ if r .Spec .Network .AutoCreateSubnetworks == nil || * r .Spec .Network .AutoCreateSubnetworks {
119
+ return nil
120
+ }
121
+ var isSubnetExistInClusterRegion = false
122
+ for _ , subnet := range r .Spec .Network .Subnets {
123
+ if subnet .Region == r .Spec .Region {
124
+ isSubnetExistInClusterRegion = true
125
+ }
126
+ }
127
+
128
+ if ! isSubnetExistInClusterRegion {
129
+ return field .Required (field .NewPath ("spec" , "network" , "subnet" ), "at least one given subnets region should be same as spec.network.region when spec.network.autoCreateSubnetworks is false" )
130
+ }
131
+ return nil
132
+ }
0 commit comments