@@ -915,13 +915,22 @@ func (service *httpRestService) createOrUpdateNetworkContainer(w http.ResponseWr
915915 switch r .Method {
916916 case "POST" :
917917 if req .NetworkContainerType == cns .WebApps {
918- nc := service .networkContainer
919- if err := nc .Create (req ); err != nil {
920- returnMessage = fmt .Sprintf ("[Azure CNS] Error. CreateOrUpdateNetworkContainer failed %v" , err .Error ())
921- returnCode = UnexpectedError
922- break
918+ // try to get the saved nc state if it exists
919+ service .lock .Lock ()
920+ existing , ok := service .state .ContainerStatus [req .NetworkContainerid ]
921+ service .lock .Unlock ()
922+
923+ // create/update nc only if it doesn't exist or it exists and the requested version is different from the saved version
924+ if ! ok || (ok && existing .VMVersion != req .Version ) {
925+ nc := service .networkContainer
926+ if err = nc .Create (req ); err != nil {
927+ returnMessage = fmt .Sprintf ("[Azure CNS] Error. CreateOrUpdateNetworkContainer failed %v" , err .Error ())
928+ returnCode = UnexpectedError
929+ break
930+ }
923931 }
924932 }
933+
925934 returnCode , returnMessage = service .saveNetworkContainerGoalState (req )
926935
927936 default :
@@ -967,6 +976,9 @@ func (service *httpRestService) getNetworkContainerResponse(req cns.GetNetworkCo
967976 var containerID string
968977 var getNetworkContainerResponse cns.GetNetworkContainerResponse
969978
979+ service .lock .Lock ()
980+ defer service .lock .Unlock ()
981+
970982 switch service .state .OrchestratorType {
971983 case cns .Kubernetes :
972984 var podInfo cns.KubernetesPodInfo
@@ -1049,7 +1061,11 @@ func (service *httpRestService) deleteNetworkContainer(w http.ResponseWriter, r
10491061 var containerStatus containerstatus
10501062 var ok bool
10511063
1052- if containerStatus , ok = service .state .ContainerStatus [req .NetworkContainerid ]; ! ok {
1064+ service .lock .Lock ()
1065+ containerStatus , ok = service .state .ContainerStatus [req .NetworkContainerid ]
1066+ service .lock .Unlock ()
1067+
1068+ if ! ok {
10531069 log .Printf ("Not able to retrieve network container details for this container id %v" , req .NetworkContainerid )
10541070 break
10551071 }
0 commit comments