@@ -814,17 +814,24 @@ func (s *VPCService) CreateOrUpdateVPC(ctx context.Context, obj *v1alpha1.Networ
814814 return nil , err
815815 }
816816
817- if err := s .VpcStore .Add (& newVpc ); err != nil {
817+ // Check LBS realization
818+ newLBS , err := s .checkLBSRealization (createdLBS , createdVpc , nc , * newVpc .Path )
819+ if err != nil {
818820 return nil , err
819821 }
820822
821- // Check LBS realization
822- if err := s .checkLBSRealization (createdLBS , createdVpc , nc , * newVpc .Path ); err != nil {
823+ // Check VpcAttachment realization
824+ _ , err = s .checkVpcAttachmentRealization (createdAttachment , createdVpc , nc , * newVpc .Path )
825+ if err != nil {
823826 return nil , err
824827 }
825828
826- // Check VpcAttachment realization
827- if err := s .checkVpcAttachmentRealization (createdAttachment , createdVpc , nc , * newVpc .Path ); err != nil {
829+ // update the store
830+ if err := s .VpcStore .Add (& newVpc ); err != nil {
831+ return nil , err
832+ }
833+
834+ if err := s .LbsStore .Add (newLBS ); err != nil {
828835 return nil , err
829836 }
830837
@@ -871,16 +878,21 @@ func (s *VPCService) checkVPCRealizationState(createdVpc *model.Vpc, newVpcPath
871878 return nil
872879}
873880
874- func (s * VPCService ) checkLBSRealization (createdLBS * model.LBService , createdVpc * model.Vpc , nc * common.VPCNetworkConfigInfo , newVpcPath string ) error {
881+ func (s * VPCService ) checkLBSRealization (createdLBS * model.LBService , createdVpc * model.Vpc , nc * common.VPCNetworkConfigInfo , newVpcPath string ) ( * model. LBService , error ) {
875882 if createdLBS == nil {
876- return nil
883+ return nil , nil
877884 }
878885 newLBS , err := s .NSXClient .VPCLBSClient .Get (nc .Org , nc .NSXProject , * createdVpc .Id , * createdLBS .Id )
879- if err != nil || newLBS . ConnectivityPath == nil {
886+ if err != nil {
880887 log .Error (err , "Failed to read LBS object after creating or updating" , "LBS" , createdLBS .Id )
881- return err
888+ return nil , err
889+ }
890+
891+ if newLBS .ConnectivityPath == nil {
892+ err = fmt .Errorf ("connectivity path is nil" )
893+ log .Error (err , "Failed to create or update LBS" , "LBS" , createdLBS .Id )
894+ return nil , err
882895 }
883- s .LbsStore .Add (& newLBS )
884896
885897 log .V (2 ).Info ("Check LBS realization state" , "LBS" , * createdLBS .Id )
886898 realizeService := realizestate .InitializeRealizeState (s .Service )
@@ -891,22 +903,22 @@ func (s *VPCService) checkLBSRealization(createdLBS *model.LBService, createdVpc
891903 // delete the nsx vpc object and re-create it in the next loop
892904 if err := s .DeleteVPC (newVpcPath ); err != nil {
893905 log .Error (err , "Cleanup VPC failed" , "VPC" , * createdVpc .Id )
894- return err
906+ return nil , err
895907 }
896908 }
897- return err
909+ return nil , err
898910 }
899- return nil
911+ return & newLBS , nil
900912}
901913
902- func (s * VPCService ) checkVpcAttachmentRealization (createdAttachment * model.VpcAttachment , createdVpc * model.Vpc , nc * common.VPCNetworkConfigInfo , newVpcPath string ) error {
914+ func (s * VPCService ) checkVpcAttachmentRealization (createdAttachment * model.VpcAttachment , createdVpc * model.Vpc , nc * common.VPCNetworkConfigInfo , newVpcPath string ) ( * model. VpcAttachment , error ) {
903915 if createdAttachment == nil {
904- return nil
916+ return nil , nil
905917 }
906918 newAttachment , err := s .NSXClient .VpcAttachmentClient .Get (nc .Org , nc .NSXProject , * createdVpc .Id , * createdAttachment .Id )
907919 if err != nil || newAttachment .VpcConnectivityProfile == nil {
908920 log .Error (err , "Failed to read VPC attachment object after creating or updating" , "VpcAttachment" , createdAttachment .Id )
909- return err
921+ return nil , err
910922 }
911923 log .V (2 ).Info ("Check VPC attachment realization state" , "VpcAttachment" , * createdAttachment .Id )
912924 realizeService := realizestate .InitializeRealizeState (s .Service )
@@ -917,12 +929,12 @@ func (s *VPCService) checkVpcAttachmentRealization(createdAttachment *model.VpcA
917929 // delete the nsx vpc object and re-create it in the next loop
918930 if err := s .DeleteVPC (newVpcPath ); err != nil {
919931 log .Error (err , "Cleanup VPC failed" , "VPC" , * createdVpc .Id )
920- return err
932+ return nil , err
921933 }
922934 }
923- return err
935+ return nil , err
924936 }
925- return nil
937+ return & newAttachment , nil
926938}
927939
928940func (s * VPCService ) GetGatewayConnectionTypeFromConnectionPath (connectionPath string ) (string , error ) {
0 commit comments