Skip to content

Commit d469456

Browse files
committed
Refactor reconcilation of resources
1 parent 3e538a5 commit d469456

File tree

4 files changed

+734
-551
lines changed

4 files changed

+734
-551
lines changed

api/v1beta2/ibmpowervscluster_webhook.go

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,11 +102,36 @@ 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+
isPublic := false
111+
for _, loadbalancer := range r.Spec.LoadBalancers {
112+
if *loadbalancer.Public {
113+
isPublic = true
114+
break
115+
}
116+
}
117+
118+
if !isPublic {
119+
allErrs = append(allErrs, field.Invalid(field.NewPath("spec.LoadBalancers"), r.Spec.LoadBalancers, "Expect atleast one of the load balancer to be public"))
120+
}
121+
122+
return allErrs
123+
}
124+
105125
func (r *IBMPowerVSCluster) validateIBMPowerVSClusterLoadBalancerNames() (allErrs field.ErrorList) {
106126
found := make(map[string]bool)
107127
for i, loadbalancer := range r.Spec.LoadBalancers {
128+
if loadbalancer.Name == "" {
129+
continue
130+
}
131+
108132
if found[loadbalancer.Name] {
109133
allErrs = append(allErrs, field.Duplicate(field.NewPath("spec", fmt.Sprintf("loadbalancers[%d]", i)), map[string]interface{}{"Name": loadbalancer.Name}))
134+
continue
110135
}
111136
found[loadbalancer.Name] = true
112137
}
@@ -117,8 +142,12 @@ func (r *IBMPowerVSCluster) validateIBMPowerVSClusterLoadBalancerNames() (allErr
117142
func (r *IBMPowerVSCluster) validateIBMPowerVSClusterVPCSubnetNames() (allErrs field.ErrorList) {
118143
found := make(map[string]bool)
119144
for i, subnet := range r.Spec.VPCSubnets {
145+
if subnet.Name == nil {
146+
continue
147+
}
120148
if found[*subnet.Name] {
121149
allErrs = append(allErrs, field.Duplicate(field.NewPath("spec", fmt.Sprintf("vpcSubnets[%d]", i)), map[string]interface{}{"Name": *subnet.Name}))
150+
continue
122151
}
123152
found[*subnet.Name] = true
124153
}
@@ -130,6 +159,9 @@ func (r *IBMPowerVSCluster) validateIBMPowerVSClusterTransitGateway() *field.Err
130159
if r.Spec.Zone == nil && r.Spec.VPC == nil {
131160
return nil
132161
}
162+
if r.Spec.TransitGateway == nil {
163+
return nil
164+
}
133165
if _, globalRouting, _ := genUtil.GetTransitGatewayLocationAndRouting(r.Spec.Zone, r.Spec.VPC.Region); r.Spec.TransitGateway.GlobalRouting != nil && !*r.Spec.TransitGateway.GlobalRouting && globalRouting != nil && *globalRouting {
134166
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")
135167
}
@@ -183,7 +215,7 @@ func (r *IBMPowerVSCluster) validateIBMPowerVSClusterCreateInfraPrereq() (allErr
183215
allErrs = append(allErrs, err...)
184216
}
185217

186-
if err := r.validateIBMPowerVSClusterLoadBalancerNames(); err != nil {
218+
if err := r.validateIBMPowerVSClusterLoadBalancers(); err != nil {
187219
allErrs = append(allErrs, err...)
188220
}
189221

0 commit comments

Comments
 (0)