Skip to content

Commit 1a0628b

Browse files
committed
more check and re order
1 parent 11f75d0 commit 1a0628b

File tree

1 file changed

+45
-18
lines changed

1 file changed

+45
-18
lines changed

cloud/services/container/clusters/reconcile.go

Lines changed: 45 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import (
3333
"github.com/google/go-cmp/cmp/cmpopts"
3434
"github.com/googleapis/gax-go/v2/apierror"
3535
"github.com/pkg/errors"
36+
"google.golang.org/api/iterator"
3637
"google.golang.org/grpc/codes"
3738
infrav1exp "sigs.k8s.io/cluster-api-provider-gcp/exp/api/v1beta1"
3839
"sigs.k8s.io/cluster-api-provider-gcp/util/reconciler"
@@ -171,7 +172,7 @@ func (s *Service) Reconcile(ctx context.Context) (ctrl.Result, error) {
171172

172173
identityServiceServer, err := s.getIdentityServiceServer(ctx, &log)
173174
if err != nil {
174-
log.Error(err, "Failed to retrieve identity service server")
175+
log.Error(fmt.Errorf("Failed to retrieve identity service: [%w]", err), "Failed to set identity service server, skipping until next reconciliation")
175176
} else if identityServiceServer != "" {
176177
s.scope.GCPManagedControlPlane.Status.IdentityServiceServer = identityServiceServer
177178
}
@@ -494,27 +495,29 @@ func compareMasterAuthorizedNetworksConfig(a, b *containerpb.MasterAuthorizedNet
494495
}
495496

496497
func (s *Service) getIdentityServiceServer(ctx context.Context, log *logr.Logger) (string, error) {
497-
if s.scope.GCPManagedControlPlane.Spec.EnableIdentityService == nil || !*s.scope.GCPManagedControlPlane.Spec.EnableIdentityService {
498+
if !s.scope.GCPManagedControlPlane.Spec.EnableIdentityService {
498499
// Identity service is not enabled, return empty string
499500
return "", nil
500501
}
501502

502-
nodePools, _, err := s.scope.GetAllNodePools(ctx)
503-
if err != nil {
504-
return "", err
505-
}
506503
const (
507504
indentityServiceFilter = "description:anthos-identity-service"
508505
instanceFilterFormat = "instance:https://www.googleapis.com/compute/v1/projects/%s/zones/%s/instances/%s"
509506
)
510507

508+
nodePools, _, err := s.scope.GetAllNodePools(ctx)
509+
if err != nil {
510+
return "", err
511+
}
512+
511513
instanceFilters := []string{}
512514
for _, np := range nodePools {
513515
for _, providerID := range np.Spec.ProviderIDList {
514516
parsedProviderID, err := providerid.NewFromResourceURL(providerID)
515517
if err != nil {
516518
return "", err
517519
}
520+
518521
instanceFilters = append(instanceFilters, fmt.Sprintf(instanceFilterFormat, parsedProviderID.Project, parsedProviderID.Location, parsedProviderID.Name))
519522
}
520523
}
@@ -523,31 +526,55 @@ func (s *Service) getIdentityServiceServer(ctx context.Context, log *logr.Logger
523526
return "", errors.New("no instances found")
524527
}
525528

526-
targetPoolName := ""
527-
req := &computepb.ListTargetPoolsRequest{Filter: indentityServiceFilter + " AND (" + strings.Join(instanceFilters, " OR ") + ")"}
528-
for resp, err := range s.scope.TargetPoolsClient().List(ctx, req).All() {
529-
if err != nil {
529+
var (
530+
targetPoolName string
531+
listTargetPoolsRequest = &computepb.ListTargetPoolsRequest{Filter: indentityServiceFilter + " AND (" + strings.Join(instanceFilters, " OR ") + ")"}
532+
targetPoolsIT = s.scope.TargetPoolsClient().List(ctx, listTargetPoolsRequest)
533+
)
534+
535+
for {
536+
resp, err := targetPoolsIT.Next()
537+
if err == iterator.Done {
538+
break
539+
} else if err != nil {
530540
return "", err
531541
} else if targetPoolName != "" {
532542
return "", errors.New("multiple target pools found")
543+
} else if resp.Name != nil {
544+
return "", errors.New("no target pool name found")
533545
}
534-
targetPoolName = resp.Name
546+
547+
targetPoolName = *resp.Name
535548
}
536-
identityServer := ""
537-
nameFilter := "name:" + targetPoolName
538-
req := &computepb.ListForwardingRulesRequest{Filter: instanceFilter + " AND " + nameFilter}
539-
for resp, err := range s.scope.ForwardingRulesClient().List(ctx, req).All() {
540-
if err != nil {
541-
return err
549+
550+
if targetPoolName == "" {
551+
return "", errors.New("no target pools found")
552+
}
553+
554+
var (
555+
identityServer string
556+
nameFilter = "name:" + targetPoolName
557+
listForwardingRulesRequest = &computepb.ListForwardingRulesRequest{Filter: indentityServiceFilter + " AND " + nameFilter}
558+
forwardingRulesIT = s.scope.ForwardingRulesClient().List(ctx, listForwardingRulesRequest)
559+
)
560+
561+
for {
562+
resp, err := forwardingRulesIT.Next()
563+
if err == iterator.Done {
564+
break
565+
} else if err != nil {
566+
return "", err
542567
} else if identityServer != "" {
543568
return "", errors.New("multiple forwarding rules found")
544569
} else if len(resp.Ports) != 1 {
545570
return "", fmt.Errorf("unexpected ports count in forwarding rule: %d", len(resp.Ports))
546571
} else if resp.Ports[0] != "443" {
547572
return "", fmt.Errorf("unexpected port in forwarding rule: %d", resp.Ports[0])
573+
} else if resp.IPAddress == nil {
574+
return "", errors.New("no IP address found")
548575
}
549576

550-
return "https://" + resp.IPAddress + ":" + resp.Ports[0], nil
577+
return "https://" + *resp.IPAddress + ":" + resp.Ports[0], nil
551578
}
552579

553580
if identityServer == "" {

0 commit comments

Comments
 (0)