Skip to content

Commit 3edcccb

Browse files
authored
Refactor reconcilation of resources (#1937)
1 parent a10f44e commit 3edcccb

File tree

4 files changed

+743
-563
lines changed

4 files changed

+743
-563
lines changed

api/v1beta2/ibmpowervscluster_webhook.go

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,11 +102,34 @@ func (r *IBMPowerVSCluster) validateIBMPowerVSClusterNetwork() *field.Error {
102102
return nil
103103
}
104104

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+
105123
func (r *IBMPowerVSCluster) validateIBMPowerVSClusterLoadBalancerNames() (allErrs field.ErrorList) {
106124
found := make(map[string]bool)
107125
for i, loadbalancer := range r.Spec.LoadBalancers {
126+
if loadbalancer.Name == "" {
127+
continue
128+
}
129+
108130
if found[loadbalancer.Name] {
109131
allErrs = append(allErrs, field.Duplicate(field.NewPath("spec", fmt.Sprintf("loadbalancers[%d]", i)), map[string]interface{}{"Name": loadbalancer.Name}))
132+
continue
110133
}
111134
found[loadbalancer.Name] = true
112135
}
@@ -117,8 +140,12 @@ func (r *IBMPowerVSCluster) validateIBMPowerVSClusterLoadBalancerNames() (allErr
117140
func (r *IBMPowerVSCluster) validateIBMPowerVSClusterVPCSubnetNames() (allErrs field.ErrorList) {
118141
found := make(map[string]bool)
119142
for i, subnet := range r.Spec.VPCSubnets {
143+
if subnet.Name == nil {
144+
continue
145+
}
120146
if found[*subnet.Name] {
121147
allErrs = append(allErrs, field.Duplicate(field.NewPath("spec", fmt.Sprintf("vpcSubnets[%d]", i)), map[string]interface{}{"Name": *subnet.Name}))
148+
continue
122149
}
123150
found[*subnet.Name] = true
124151
}
@@ -130,6 +157,9 @@ func (r *IBMPowerVSCluster) validateIBMPowerVSClusterTransitGateway() *field.Err
130157
if r.Spec.Zone == nil && r.Spec.VPC == nil {
131158
return nil
132159
}
160+
if r.Spec.TransitGateway == nil {
161+
return nil
162+
}
133163
if _, globalRouting, _ := genUtil.GetTransitGatewayLocationAndRouting(r.Spec.Zone, r.Spec.VPC.Region); r.Spec.TransitGateway.GlobalRouting != nil && !*r.Spec.TransitGateway.GlobalRouting && globalRouting != nil && *globalRouting {
134164
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")
135165
}
@@ -183,7 +213,7 @@ func (r *IBMPowerVSCluster) validateIBMPowerVSClusterCreateInfraPrereq() (allErr
183213
allErrs = append(allErrs, err...)
184214
}
185215

186-
if err := r.validateIBMPowerVSClusterLoadBalancerNames(); err != nil {
216+
if err := r.validateIBMPowerVSClusterLoadBalancers(); err != nil {
187217
allErrs = append(allErrs, err...)
188218
}
189219

0 commit comments

Comments
 (0)