in pkg/controller/ingress/reconcile/applier/alb.go [36:123]
func (s *albLoadBalancerApplier) Apply(ctx context.Context) error {
traceID := ctx.Value(util.TraceID)
var resLBs []*albmodel.AlbLoadBalancer
s.stack.ListResources(&resLBs)
if len(resLBs) > 1 {
return fmt.Errorf("invalid res loadBalancers, at most one loadBalancer for stack: %s", s.stack.StackID())
}
sdkLBs, err := s.findSDKAlbLoadBalancers(ctx)
if err != nil {
return err
}
if len(sdkLBs) > 1 {
stackID := s.stack.StackID()
return fmt.Errorf("invalid sdk loadBalancers: %v, at most one loadBalancer can find by stack tag: %s, must delete manually", sdkLBs, stackID)
}
matchedResAndSDKLBs, unmatchedResLBs, unmatchedSDKLBs, err := matchResAndSDKAlbLoadBalancers(resLBs, sdkLBs, s.trackingProvider.ResourceIDTagKey())
if err != nil {
return err
}
if len(matchedResAndSDKLBs) != 0 {
s.logger.V(util.SynLogLevel).Info("synthesize loadBalancers",
"matchedResAndSDKLBs", matchedResAndSDKLBs,
"traceID", traceID)
}
if len(unmatchedResLBs) != 0 {
s.logger.V(util.SynLogLevel).Info("synthesize loadBalancers",
"unmatchedResLBs", unmatchedResLBs,
"traceID", traceID)
}
if len(unmatchedSDKLBs) != 0 {
s.logger.V(util.SynLogLevel).Info("synthesize loadBalancers",
"unmatchedSDKLBs", unmatchedSDKLBs,
"traceID", traceID)
}
for _, sdkLB := range unmatchedSDKLBs {
if err := s.albProvider.DeleteALB(ctx, sdkLB.LoadBalancerId); err != nil {
return err
}
}
for _, resLB := range unmatchedResLBs {
var isReuseLb bool
if len(resLB.Spec.LoadBalancerId) != 0 {
isReuseLb = true
}
if isReuseLb {
lbStatus, err := s.albProvider.ReuseALB(ctx, resLB, resLB.Spec.LoadBalancerId, s.trackingProvider)
if err != nil {
return err
}
resLB.SetStatus(lbStatus)
continue
}
lbStatus, err := s.albProvider.CreateALB(ctx, resLB, s.trackingProvider)
if err != nil {
return err
}
resLB.SetStatus(lbStatus)
}
for _, resAndSDKLB := range matchedResAndSDKLBs {
var isReuseLb bool
if len(resAndSDKLB.resLB.Spec.LoadBalancerId) != 0 {
isReuseLb = true
}
if isReuseLb {
if resAndSDKLB.resLB.Spec.ForceOverride != nil && !*resAndSDKLB.resLB.Spec.ForceOverride {
resAndSDKLB.resLB.SetStatus(albmodel.LoadBalancerStatus{
LoadBalancerID: resAndSDKLB.sdkLB.LoadBalancerId,
DNSName: resAndSDKLB.sdkLB.DNSName,
})
continue
}
}
lbStatus, err := s.albProvider.UpdateALB(ctx, resAndSDKLB.resLB, resAndSDKLB.sdkLB.LoadBalancer)
if err != nil {
return err
}
resAndSDKLB.resLB.SetStatus(lbStatus)
}
return nil
}