@@ -520,33 +520,29 @@ func (m *MachineScope) ReconcileCreateInstanceOnLB(ctx context.Context) error {
520520 backendName := instanceIp + ":" + strconv .Itoa (int (m .OCICluster .Spec .ControlPlaneEndpoint .Port ))
521521 if ! m .containsLBBackend (backendSet , backendName ) {
522522 logger := m .Logger .WithValues ("backend-set" , * backendSet .Name )
523- workRequest := m .OCIMachine .Status .CreateBackendWorkRequestId
524523 logger .Info ("Checking work request status for create backend" )
525- if workRequest != "" {
526- _ , err = ociutil .AwaitLBWorkRequest (ctx , m .LoadBalancerClient , & workRequest )
527- if err != nil {
528- return err
529- }
530- } else {
531- resp , err := m .LoadBalancerClient .CreateBackend (ctx , loadbalancer.CreateBackendRequest {
532- LoadBalancerId : loadbalancerId ,
533- BackendSetName : backendSet .Name ,
534- CreateBackendDetails : loadbalancer.CreateBackendDetails {
535- IpAddress : common .String (instanceIp ),
536- Port : common .Int (int (m .OCICluster .Spec .ControlPlaneEndpoint .Port )),
537- },
538- OpcRetryToken : ociutil .GetOPCRetryToken ("%s-%s" , "create-backend" , string (m .OCIMachine .UID )),
539- })
540- if err != nil {
541- return err
542- }
543- m .OCIMachine .Status .CreateBackendWorkRequestId = * resp .OpcWorkRequestId
544- logger .Info ("Add instance to LB backend-set" , "WorkRequestId" , resp .OpcWorkRequestId )
545- logger .Info ("Waiting for LB work request to be complete" )
546- _ , err = ociutil .AwaitLBWorkRequest (ctx , m .LoadBalancerClient , resp .OpcWorkRequestId )
547- if err != nil {
548- return err
549- }
524+ // we always try to create the backend if it exists during a reconcile loop and wait for the work request
525+ // to complete. If there is a work request in progress, in the rare case, CAPOCI pod restarts during the
526+ // work request, the create backend call may throw an error which is ok, as reconcile will go into
527+ // an exponential backoff
528+ resp , err := m .LoadBalancerClient .CreateBackend (ctx , loadbalancer.CreateBackendRequest {
529+ LoadBalancerId : loadbalancerId ,
530+ BackendSetName : backendSet .Name ,
531+ CreateBackendDetails : loadbalancer.CreateBackendDetails {
532+ IpAddress : common .String (instanceIp ),
533+ Port : common .Int (int (m .OCICluster .Spec .ControlPlaneEndpoint .Port )),
534+ },
535+ OpcRetryToken : ociutil .GetOPCRetryToken ("%s-%s" , "create-backend" , string (m .OCIMachine .UID )),
536+ })
537+ if err != nil {
538+ return err
539+ }
540+ m .OCIMachine .Status .CreateBackendWorkRequestId = * resp .OpcWorkRequestId
541+ logger .Info ("Add instance to LB backend-set" , "WorkRequestId" , resp .OpcWorkRequestId )
542+ logger .Info ("Waiting for LB work request to be complete" )
543+ _ , err = ociutil .AwaitLBWorkRequest (ctx , m .LoadBalancerClient , resp .OpcWorkRequestId )
544+ if err != nil {
545+ return err
550546 }
551547 }
552548
@@ -561,37 +557,32 @@ func (m *MachineScope) ReconcileCreateInstanceOnLB(ctx context.Context) error {
561557 if ! m .containsNLBBackend (backendSet , m .Name ()) {
562558 logger := m .Logger .WithValues ("backend-set" , * backendSet .Name )
563559 logger .Info ("Checking work request status for create backend" )
564- workRequest := m .OCIMachine .Status .CreateBackendWorkRequestId
565- if workRequest != "" {
566- _ , err = ociutil .AwaitNLBWorkRequest (ctx , m .NetworkLoadBalancerClient , & workRequest )
567- if err != nil {
568- return err
569- }
570- } else {
571- resp , err := m .NetworkLoadBalancerClient .CreateBackend (ctx , networkloadbalancer.CreateBackendRequest {
572- NetworkLoadBalancerId : loadbalancerId ,
573- BackendSetName : backendSet .Name ,
574- CreateBackendDetails : networkloadbalancer.CreateBackendDetails {
575- IpAddress : common .String (instanceIp ),
576- Port : common .Int (int (m .OCICluster .Spec .ControlPlaneEndpoint .Port )),
577- Name : common .String (m .Name ()),
578- },
579- OpcRetryToken : ociutil .GetOPCRetryToken ("%s-%s" , "create-backend" , string (m .OCIMachine .UID )),
580- })
581- if err != nil {
582- return err
583- }
584- m .OCIMachine .Status .CreateBackendWorkRequestId = * resp .OpcWorkRequestId
585- logger .Info ("Add instance to NLB backend-set" , "WorkRequestId" , resp .OpcWorkRequestId )
586- logger .Info ("Waiting for NLB work request to be complete" )
587- _ , err = ociutil .AwaitNLBWorkRequest (ctx , m .NetworkLoadBalancerClient , resp .OpcWorkRequestId )
588- if err != nil {
589- return err
590- }
591- logger .Info ("NLB Backend addition work request is complete" )
560+ // we always try to create the backend if it exists during a reconcile loop and wait for the work request
561+ // to complete. If there is a work request in progress, in the rare case, CAPOCI pod restarts during the
562+ // work request, the create backend call may throw an error which is ok, as reconcile will go into
563+ // an exponential backoff
564+ resp , err := m .NetworkLoadBalancerClient .CreateBackend (ctx , networkloadbalancer.CreateBackendRequest {
565+ NetworkLoadBalancerId : loadbalancerId ,
566+ BackendSetName : backendSet .Name ,
567+ CreateBackendDetails : networkloadbalancer.CreateBackendDetails {
568+ IpAddress : common .String (instanceIp ),
569+ Port : common .Int (int (m .OCICluster .Spec .ControlPlaneEndpoint .Port )),
570+ Name : common .String (m .Name ()),
571+ },
572+ OpcRetryToken : ociutil .GetOPCRetryToken ("%s-%s" , "create-backend" , string (m .OCIMachine .UID )),
573+ })
574+ if err != nil {
575+ return err
576+ }
577+ m .OCIMachine .Status .CreateBackendWorkRequestId = * resp .OpcWorkRequestId
578+ logger .Info ("Add instance to NLB backend-set" , "WorkRequestId" , resp .OpcWorkRequestId )
579+ logger .Info ("Waiting for NLB work request to be complete" )
580+ _ , err = ociutil .AwaitNLBWorkRequest (ctx , m .NetworkLoadBalancerClient , resp .OpcWorkRequestId )
581+ if err != nil {
582+ return err
592583 }
584+ logger .Info ("NLB Backend addition work request is complete" )
593585 }
594-
595586 }
596587 return nil
597588}
@@ -628,36 +619,31 @@ func (m *MachineScope) ReconcileDeleteInstanceOnLB(ctx context.Context) error {
628619 backendName := instanceIp + ":" + strconv .Itoa (int (m .OCICluster .Spec .ControlPlaneEndpoint .Port ))
629620 if m .containsLBBackend (backendSet , backendName ) {
630621 logger := m .Logger .WithValues ("backend-set" , * backendSet .Name )
631- workRequest := m .OCIMachine .Status .DeleteBackendWorkRequestId
632- if workRequest != "" {
633- _ , err = ociutil .AwaitLBWorkRequest (ctx , m .LoadBalancerClient , & workRequest )
634- if err != nil {
635- return err
636- }
637- } else {
638- // in OCI CLI, the colon in the backend name is replaced by %3A
639- // replace the colon in the backend name by %3A to avoid the error in PCA
640- escapedBackendName := url .QueryEscape (backendName )
641-
642- resp , err := m .LoadBalancerClient .DeleteBackend (ctx , loadbalancer.DeleteBackendRequest {
643- LoadBalancerId : loadbalancerId ,
644- BackendSetName : backendSet .Name ,
645- BackendName : common .String (escapedBackendName ),
646- })
647- if err != nil {
648- logger .Error (err , "Delete instance from LB backend-set failed" ,
649- "backendSetName" , * backendSet .Name ,
650- "backendName" , escapedBackendName ,
651- )
652- return err
653- }
654- m .OCIMachine .Status .DeleteBackendWorkRequestId = * resp .OpcWorkRequestId
655- logger .Info ("Delete instance from LB backend-set" , "WorkRequestId" , resp .OpcWorkRequestId )
656- logger .Info ("Waiting for LB work request to be complete" )
657- _ , err = ociutil .AwaitLBWorkRequest (ctx , m .LoadBalancerClient , resp .OpcWorkRequestId )
658- if err != nil {
659- return err
660- }
622+ // in OCI CLI, the colon in the backend name is replaced by %3A
623+ // replace the colon in the backend name by %3A to avoid the error in PCA
624+ escapedBackendName := url .QueryEscape (backendName )
625+ // we always try to delete the backend if it exists during a reconcile loop and wait for the work request
626+ // to complete. If there is a work request in progress, in the rare case, CAPOCI pod restarts during the
627+ // work request, the delete backend call may throw an error which is ok, as reconcile will go into
628+ // an exponential backoff
629+ resp , err := m .LoadBalancerClient .DeleteBackend (ctx , loadbalancer.DeleteBackendRequest {
630+ LoadBalancerId : loadbalancerId ,
631+ BackendSetName : backendSet .Name ,
632+ BackendName : common .String (escapedBackendName ),
633+ })
634+ if err != nil {
635+ logger .Error (err , "Delete instance from LB backend-set failed" ,
636+ "backendSetName" , * backendSet .Name ,
637+ "backendName" , escapedBackendName ,
638+ )
639+ return err
640+ }
641+ m .OCIMachine .Status .DeleteBackendWorkRequestId = * resp .OpcWorkRequestId
642+ logger .Info ("Delete instance from LB backend-set" , "WorkRequestId" , resp .OpcWorkRequestId )
643+ logger .Info ("Waiting for LB work request to be complete" )
644+ _ , err = ociutil .AwaitLBWorkRequest (ctx , m .LoadBalancerClient , resp .OpcWorkRequestId )
645+ if err != nil {
646+ return err
661647 }
662648 logger .Info ("LB Backend addition work request is complete" )
663649 }
@@ -671,28 +657,24 @@ func (m *MachineScope) ReconcileDeleteInstanceOnLB(ctx context.Context) error {
671657 backendSet := lb .BackendSets [APIServerLBBackendSetName ]
672658 if m .containsNLBBackend (backendSet , m .Name ()) {
673659 logger := m .Logger .WithValues ("backend-set" , * backendSet .Name )
674- workRequest := m .OCIMachine .Status .DeleteBackendWorkRequestId
675- if workRequest != "" {
676- _ , err = ociutil .AwaitNLBWorkRequest (ctx , m .NetworkLoadBalancerClient , & workRequest )
677- if err != nil {
678- return err
679- }
680- } else {
681- resp , err := m .NetworkLoadBalancerClient .DeleteBackend (ctx , networkloadbalancer.DeleteBackendRequest {
682- NetworkLoadBalancerId : loadbalancerId ,
683- BackendSetName : backendSet .Name ,
684- BackendName : common .String (m .Name ()),
685- })
686- if err != nil {
687- return err
688- }
689- m .OCIMachine .Status .DeleteBackendWorkRequestId = * resp .OpcWorkRequestId
690- logger .Info ("Delete instance from LB backend-set" , "WorkRequestId" , resp .OpcWorkRequestId )
691- logger .Info ("Waiting for LB work request to be complete" )
692- _ , err = ociutil .AwaitNLBWorkRequest (ctx , m .NetworkLoadBalancerClient , resp .OpcWorkRequestId )
693- if err != nil {
694- return err
695- }
660+ // we always try to delete the backend if it exists during a reconcile loop and wait for the work request
661+ // to complete. If there is a work request in progress, in the rare case, CAPOCI pod restarts during the
662+ // work request, the delete backend call may throw an error which is ok, as reconcile will go into
663+ // an exponential backoff
664+ resp , err := m .NetworkLoadBalancerClient .DeleteBackend (ctx , networkloadbalancer.DeleteBackendRequest {
665+ NetworkLoadBalancerId : loadbalancerId ,
666+ BackendSetName : backendSet .Name ,
667+ BackendName : common .String (m .Name ()),
668+ })
669+ if err != nil {
670+ return err
671+ }
672+ m .OCIMachine .Status .DeleteBackendWorkRequestId = * resp .OpcWorkRequestId
673+ logger .Info ("Delete instance from LB backend-set" , "WorkRequestId" , resp .OpcWorkRequestId )
674+ logger .Info ("Waiting for LB work request to be complete" )
675+ _ , err = ociutil .AwaitNLBWorkRequest (ctx , m .NetworkLoadBalancerClient , resp .OpcWorkRequestId )
676+ if err != nil {
677+ return err
696678 }
697679 }
698680 }
0 commit comments