@@ -1305,24 +1305,39 @@ func InitializeCRDState(ctx context.Context, httpRestService cns.HTTPService, cn
13051305
13061306 // Create the base NNC CRD if HomeAz is enabled
13071307 if cnsconfig .EnableHomeAZ {
1308- homeAzResponse := httpRestServiceImplementation .GetHomeAz (ctx )
1308+ var homeAzResponse cns.GetHomeAzResponse
1309+ if homeAzResponse , err = httpRestServiceImplementation .GetHomeAz (ctx ); err != nil {
1310+ return errors .Wrap (err , "failed to get HomeAz" ) // error out so that CNS restarts.
1311+ }
13091312 az := homeAzResponse .HomeAzResponse .HomeAz
13101313 logger .Printf ("[Azure CNS] HomeAz: %d" , az )
13111314 // Create Node Network Config CRD and update the Home Az field with the cache value from the HomeAz Monitor
13121315 var nnc * v1alpha.NodeNetworkConfig
1313- if nnc , err = directnnccli .Get (ctx , types.NamespacedName {Namespace : "kube-system" , Name : nodeName }); err != nil {
1314- logger .Errorf ("[Azure CNS] failed to get existing NNC: %v" , err )
1315- }
1316+ err = retry .Do (func () error {
1317+ if nnc , err = directnnccli .Get (ctx , types.NamespacedName {Namespace : "kube-system" , Name : nodeName }); err != nil {
1318+ return errors .Wrap (err , "[Azure CNS] failed to get existing NNC" )
1319+ }
1320+ return nil
1321+ }, retry .Delay (initCNSInitalDelay ), retry .Attempts (5 ))
13161322
13171323 newNNC := createBaseNNC (node )
1318- if nnc = = nil {
1319- logger .Printf ("[Azure CNS] Creating new base NNC" )
1324+ if err ! = nil {
1325+ logger .Printf ("[Azure CNS] Creating new base NNC with Az %d" , az )
13201326 newNNC .Spec .AvailabilityZone = az
1321- if err = directcli .Create (ctx , newNNC ); err != nil {
1322- return errors .Wrap (err , "failed to create base NNC" )
1327+ nncErr := retry .Do (func () error {
1328+ if err = directcli .Create (ctx , newNNC ); err != nil {
1329+ return errors .Wrap (err , "failed to create base NNC with HomeAz" )
1330+ }
1331+ return nil
1332+ }, retry .Delay (initCNSInitalDelay ), retry .Attempts (5 ))
1333+ if nncErr != nil {
1334+ return errors .Wrap (nncErr , "[Azure CNS] failed to create base NNC with HomeAz" )
13231335 }
1324- } else {
1336+ }
1337+
1338+ if err == nil { // NNC exists, patch it with new HomeAz
13251339 logger .Printf ("[Azure CNS] Patching existing NNC with new Spec with HomeAz %d" , az )
1340+ newNNC .ObjectMeta .ResourceVersion = nnc .ObjectMeta .ResourceVersion
13261341 newNNC .Spec .AvailabilityZone = az
13271342 newNNC .Spec .RequestedIPCount = nnc .Spec .RequestedIPCount
13281343 newNNC .Spec .IPsNotInUse = nnc .Spec .IPsNotInUse
@@ -1336,14 +1351,15 @@ func InitializeCRDState(ctx context.Context, httpRestService cns.HTTPService, cn
13361351 newNNC .OwnerReferences = nnc .OwnerReferences
13371352 newNNC .CreationTimestamp = nnc .CreationTimestamp
13381353 newNNC .DeletionTimestamp = nnc .DeletionTimestamp
1339-
1340- // Delete existing NNC and create new one with updated HomeAz
1341- if err = directcli .Delete (ctx , nnc ); err != nil {
1342- return errors .Wrap (err , "[Azure CNS]: failed to delete existing NNC" )
1343- }
1344-
1345- if err = directcli .Create (ctx , newNNC ); err != nil {
1346- return errors .Wrap (err , "[Azure CNS]: failed to create new NNC" )
1354+ nncErr := retry .Do (func () error {
1355+ patchErr := directcli .Update (ctx , newNNC , & client.UpdateOptions {})
1356+ if patchErr != nil {
1357+ return errors .Wrap (patchErr , "failed to patch NNC" )
1358+ }
1359+ return nil
1360+ }, retry .Delay (initCNSInitalDelay ), retry .Attempts (5 ))
1361+ if nncErr != nil {
1362+ return errors .Wrap (nncErr , "[AzureCNS] failed to patch NNC with Home Az" )
13471363 }
13481364 }
13491365 logger .Printf ("[Azure CNS] Updated HomeAz in NNC %v" , newNNC )
0 commit comments