Skip to content

Commit 9aae7c9

Browse files
authored
Merge pull request #2798 from nikParasyr/lbNetworkStatus
🌱 Set osc lb status when default networks are used
2 parents f12882d + 222b50b commit 9aae7c9

File tree

1 file changed

+53
-45
lines changed

1 file changed

+53
-45
lines changed

controllers/openstackcluster_controller.go

Lines changed: 53 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -623,60 +623,68 @@ func getBastionSecurityGroupID(openStackCluster *infrav1.OpenStackCluster) *stri
623623

624624
func resolveLoadBalancerNetwork(openStackCluster *infrav1.OpenStackCluster, networkingService *networking.Service) error {
625625
lbSpec := openStackCluster.Spec.APIServerLoadBalancer
626-
if lbSpec.IsEnabled() {
627-
lbStatus := openStackCluster.Status.APIServerLoadBalancer
628-
if lbStatus == nil {
629-
lbStatus = &infrav1.LoadBalancer{}
630-
openStackCluster.Status.APIServerLoadBalancer = lbStatus
631-
}
632626

633-
lbNetStatus := lbStatus.LoadBalancerNetwork
634-
if lbNetStatus == nil {
635-
lbNetStatus = &infrav1.NetworkStatusWithSubnets{
636-
NetworkStatus: infrav1.NetworkStatus{},
637-
}
627+
// if lb is not enabled, return early
628+
if !lbSpec.IsEnabled() {
629+
return nil
630+
}
631+
632+
lbStatus := openStackCluster.Status.APIServerLoadBalancer
633+
if lbStatus == nil {
634+
lbStatus = &infrav1.LoadBalancer{}
635+
openStackCluster.Status.APIServerLoadBalancer = lbStatus
636+
}
637+
638+
lbNetStatus := lbStatus.LoadBalancerNetwork
639+
if lbNetStatus == nil {
640+
lbNetStatus = &infrav1.NetworkStatusWithSubnets{
641+
NetworkStatus: infrav1.NetworkStatus{},
638642
}
643+
}
639644

640-
if lbSpec.Network != nil {
641-
lbNet, err := networkingService.GetNetworkByParam(lbSpec.Network)
642-
if err != nil {
643-
if errors.Is(err, capoerrors.ErrFilterMatch) {
644-
handleUpdateOSCError(openStackCluster, fmt.Errorf("failed to find loadbalancer network: %w", err), true)
645-
}
646-
return fmt.Errorf("failed to find network: %w", err)
645+
if lbSpec.Network != nil {
646+
lbNet, err := networkingService.GetNetworkByParam(lbSpec.Network)
647+
if err != nil {
648+
if errors.Is(err, capoerrors.ErrFilterMatch) {
649+
handleUpdateOSCError(openStackCluster, fmt.Errorf("failed to find loadbalancer network: %w", err), true)
647650
}
648-
649-
lbNetStatus.Name = lbNet.Name
650-
lbNetStatus.ID = lbNet.ID
651-
lbNetStatus.Tags = lbNet.Tags
652-
653-
// Filter out only relevant subnets specified by the spec
654-
lbNetStatus.Subnets = []infrav1.Subnet{}
655-
for _, s := range lbSpec.Subnets {
656-
matchFound := false
657-
for _, subnetID := range lbNet.Subnets {
658-
subnet, err := networkingService.GetSubnetByParam(&s)
659-
if s.ID != nil && subnetID == *s.ID && err == nil {
660-
matchFound = true
661-
lbNetStatus.Subnets = append(
662-
lbNetStatus.Subnets, infrav1.Subnet{
663-
ID: subnet.ID,
664-
Name: subnet.Name,
665-
CIDR: subnet.CIDR,
666-
Tags: subnet.Tags,
667-
})
668-
}
669-
}
670-
if !matchFound {
671-
handleUpdateOSCError(openStackCluster, fmt.Errorf("no subnet match was found in the specified network (specified subnet: %v, available subnets: %v)", s, lbNet.Subnets), false)
672-
return fmt.Errorf("no subnet match was found in the specified network (specified subnet: %v, available subnets: %v)", s, lbNet.Subnets)
651+
return fmt.Errorf("failed to find network: %w", err)
652+
}
653+
654+
lbNetStatus.Name = lbNet.Name
655+
lbNetStatus.ID = lbNet.ID
656+
lbNetStatus.Tags = lbNet.Tags
657+
658+
// Filter out only relevant subnets specified by the spec
659+
lbNetStatus.Subnets = []infrav1.Subnet{}
660+
for _, s := range lbSpec.Subnets {
661+
matchFound := false
662+
for _, subnetID := range lbNet.Subnets {
663+
subnet, err := networkingService.GetSubnetByParam(&s)
664+
if s.ID != nil && subnetID == *s.ID && err == nil {
665+
matchFound = true
666+
lbNetStatus.Subnets = append(
667+
lbNetStatus.Subnets, infrav1.Subnet{
668+
ID: subnet.ID,
669+
Name: subnet.Name,
670+
CIDR: subnet.CIDR,
671+
Tags: subnet.Tags,
672+
})
673673
}
674674
}
675-
676-
openStackCluster.Status.APIServerLoadBalancer.LoadBalancerNetwork = lbNetStatus
675+
if !matchFound {
676+
handleUpdateOSCError(openStackCluster, fmt.Errorf("no subnet match was found in the specified network (specified subnet: %v, available subnets: %v)", s, lbNet.Subnets), false)
677+
return fmt.Errorf("no subnet match was found in the specified network (specified subnet: %v, available subnets: %v)", s, lbNet.Subnets)
678+
}
677679
}
680+
} else {
681+
lbNetStatus.ID = openStackCluster.Status.Network.ID
682+
lbNetStatus.Name = openStackCluster.Status.Network.Name
683+
lbNetStatus.Subnets = openStackCluster.Status.Network.Subnets
678684
}
679685

686+
openStackCluster.Status.APIServerLoadBalancer.LoadBalancerNetwork = lbNetStatus
687+
680688
return nil
681689
}
682690

0 commit comments

Comments
 (0)