@@ -102,11 +102,34 @@ func (r *IBMPowerVSCluster) validateIBMPowerVSClusterNetwork() *field.Error {
102
102
return nil
103
103
}
104
104
105
+ func (r * IBMPowerVSCluster ) validateIBMPowerVSClusterLoadBalancers () (allErrs field.ErrorList ) {
106
+ if err := r .validateIBMPowerVSClusterLoadBalancerNames (); err != nil {
107
+ allErrs = append (allErrs , err ... )
108
+ }
109
+
110
+ if len (r .Spec .LoadBalancers ) == 0 {
111
+ return allErrs
112
+ }
113
+
114
+ for _ , loadbalancer := range r .Spec .LoadBalancers {
115
+ if * loadbalancer .Public {
116
+ return allErrs
117
+ }
118
+ }
119
+
120
+ return append (allErrs , field .Invalid (field .NewPath ("spec.LoadBalancers" ), r .Spec .LoadBalancers , "Expect atleast one of the load balancer to be public" ))
121
+ }
122
+
105
123
func (r * IBMPowerVSCluster ) validateIBMPowerVSClusterLoadBalancerNames () (allErrs field.ErrorList ) {
106
124
found := make (map [string ]bool )
107
125
for i , loadbalancer := range r .Spec .LoadBalancers {
126
+ if loadbalancer .Name == "" {
127
+ continue
128
+ }
129
+
108
130
if found [loadbalancer .Name ] {
109
131
allErrs = append (allErrs , field .Duplicate (field .NewPath ("spec" , fmt .Sprintf ("loadbalancers[%d]" , i )), map [string ]interface {}{"Name" : loadbalancer .Name }))
132
+ continue
110
133
}
111
134
found [loadbalancer .Name ] = true
112
135
}
@@ -117,8 +140,12 @@ func (r *IBMPowerVSCluster) validateIBMPowerVSClusterLoadBalancerNames() (allErr
117
140
func (r * IBMPowerVSCluster ) validateIBMPowerVSClusterVPCSubnetNames () (allErrs field.ErrorList ) {
118
141
found := make (map [string ]bool )
119
142
for i , subnet := range r .Spec .VPCSubnets {
143
+ if subnet .Name == nil {
144
+ continue
145
+ }
120
146
if found [* subnet .Name ] {
121
147
allErrs = append (allErrs , field .Duplicate (field .NewPath ("spec" , fmt .Sprintf ("vpcSubnets[%d]" , i )), map [string ]interface {}{"Name" : * subnet .Name }))
148
+ continue
122
149
}
123
150
found [* subnet .Name ] = true
124
151
}
@@ -130,6 +157,9 @@ func (r *IBMPowerVSCluster) validateIBMPowerVSClusterTransitGateway() *field.Err
130
157
if r .Spec .Zone == nil && r .Spec .VPC == nil {
131
158
return nil
132
159
}
160
+ if r .Spec .TransitGateway == nil {
161
+ return nil
162
+ }
133
163
if _ , globalRouting , _ := genUtil .GetTransitGatewayLocationAndRouting (r .Spec .Zone , r .Spec .VPC .Region ); r .Spec .TransitGateway .GlobalRouting != nil && ! * r .Spec .TransitGateway .GlobalRouting && globalRouting != nil && * globalRouting {
134
164
return field .Invalid (field .NewPath ("spec.transitGateway.globalRouting" ), r .Spec .TransitGateway .GlobalRouting , "global routing is required since PowerVS and VPC region are from different region" )
135
165
}
@@ -183,7 +213,7 @@ func (r *IBMPowerVSCluster) validateIBMPowerVSClusterCreateInfraPrereq() (allErr
183
213
allErrs = append (allErrs , err ... )
184
214
}
185
215
186
- if err := r .validateIBMPowerVSClusterLoadBalancerNames (); err != nil {
216
+ if err := r .validateIBMPowerVSClusterLoadBalancers (); err != nil {
187
217
allErrs = append (allErrs , err ... )
188
218
}
189
219
0 commit comments