Skip to content

Commit 3b04934

Browse files
authored
Fix tf subnets status (#1552)
* Fix tf subnets status * Adjust to comments * Make use of slices.Sorted * Fix typo in error message
1 parent cabe13c commit 3b04934

File tree

1 file changed

+23
-10
lines changed

1 file changed

+23
-10
lines changed

pkg/controller/infrastructure/tf_reconciler.go

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"bytes"
1010
"context"
1111
"fmt"
12+
"maps"
1213
"slices"
1314
"strconv"
1415
"strings"
@@ -322,7 +323,7 @@ func (t *TerraformReconciler) computeTerraformStatusState(ctx context.Context, t
322323
return nil, nil, err
323324
}
324325

325-
subnets, err := computeProviderStatusSubnets(infrastructureConfig, output)
326+
subnets, err := computeProviderStatusSubnets(t.log, infrastructureConfig, output)
326327
if err != nil {
327328
return nil, nil, err
328329
}
@@ -556,32 +557,44 @@ func generateTerraformInfraConfig(ctx context.Context, infrastructure *extension
556557
return terraformInfraConfig, nil
557558
}
558559

559-
func computeProviderStatusSubnets(infrastructure *api.InfrastructureConfig, values map[string]string) ([]v1alpha1.Subnet, error) {
560+
func computeProviderStatusSubnets(logger logr.Logger, infrastructure *api.InfrastructureConfig, values map[string]string) ([]v1alpha1.Subnet, error) {
560561
var subnetsToReturn []v1alpha1.Subnet
561562

562-
for key, value := range values {
563+
for _, key := range slices.Sorted(maps.Keys(values)) {
564+
value := values[key]
563565
var prefix, purpose string
564-
if strings.HasPrefix(key, aws.SubnetPublicPrefix) {
566+
switch {
567+
case strings.HasPrefix(key, aws.SubnetPublicPrefix):
565568
prefix = aws.SubnetPublicPrefix
566569
purpose = api.PurposePublic
567-
}
568-
if strings.HasPrefix(key, aws.SubnetNodesPrefix) {
570+
case strings.HasPrefix(key, aws.SubnetNodesPrefix):
569571
prefix = aws.SubnetNodesPrefix
570572
purpose = v1alpha1.PurposeNodes
571-
}
572-
573-
if len(prefix) == 0 {
573+
default:
574574
continue
575575
}
576576

577577
zoneID, err := strconv.Atoi(strings.TrimPrefix(key, prefix))
578578
if err != nil {
579579
return nil, err
580580
}
581+
if zoneID < 0 || zoneID >= len(infrastructure.Networks.Zones) {
582+
return nil, fmt.Errorf("zone index %d out of range", zoneID)
583+
}
584+
zone := infrastructure.Networks.Zones[zoneID].Name
585+
586+
zoneExists := slices.ContainsFunc(subnetsToReturn, func(s v1alpha1.Subnet) bool {
587+
return s.Zone == zone && s.Purpose == purpose
588+
})
589+
if zoneExists {
590+
logger.Info("Skipping subnet addition to status as zone is already present", "zone", zone, "purpose", purpose)
591+
continue
592+
}
593+
581594
subnetsToReturn = append(subnetsToReturn, v1alpha1.Subnet{
582595
ID: value,
583596
Purpose: purpose,
584-
Zone: infrastructure.Networks.Zones[zoneID].Name,
597+
Zone: zone,
585598
})
586599
}
587600

0 commit comments

Comments
 (0)