@@ -401,7 +401,19 @@ def _modify(self, **patch):
401401 raise AttemptedMutationOfReadOnly (msg )
402402
403403 patch = self ._prepare_request_json (patch )
404- response = session .patch (patch_uri , json = patch , ** requests_params )
404+
405+ # Handles ConnectionAborted errors
406+ for i in range (0 , 30 ):
407+ try :
408+ response = session .patch (patch_uri , json = patch , ** requests_params )
409+ break
410+ except ConnectionError as ex :
411+ if 'Connection aborted' in str (ex ) and i < 29 :
412+ time .sleep (1 )
413+ continue
414+ else :
415+ raise
416+
405417 self ._local_update (response .json ())
406418
407419 def modify (self , ** patch ):
@@ -575,7 +587,7 @@ def _update(self, **kwargs):
575587 #
576588 # @see https://github.com/F5Networks/f5-ansible/issues/317
577589 # @see https://github.com/requests/requests/issues/2364
578- for _ in range (0 , 30 ):
590+ for i in range (0 , 30 ):
579591 try :
580592 response = session .put (update_uri , json = data_dict , ** requests_params )
581593 self ._meta_data = temp_meta
@@ -587,7 +599,7 @@ def _update(self, **kwargs):
587599 self ._local_update (response .json ())
588600 raise
589601 except ConnectionError as ex :
590- if 'Connection aborted' in str (ex ):
602+ if 'Connection aborted' in str (ex ) and i < 29 :
591603 time .sleep (1 )
592604 continue
593605 else :
@@ -631,7 +643,18 @@ def _refresh(self, **kwargs):
631643 else :
632644 uri = self ._meta_data ['uri' ]
633645
634- response = refresh_session .get (uri , ** requests_params )
646+ # Handles ConnectionAborted errors
647+ for i in range (0 , 30 ):
648+ try :
649+ response = refresh_session .get (uri , ** requests_params )
650+ break
651+ except ConnectionError as ex :
652+ if 'Connection aborted' in str (ex ) and i < 29 :
653+ time .sleep (1 )
654+ continue
655+ else :
656+ raise
657+
635658 self ._local_update (response .json ())
636659
637660 def refresh (self , ** kwargs ):
@@ -831,7 +854,17 @@ def _delete_collection(self, **kwargs):
831854 delete_uri = self ._meta_data ['uri' ]
832855 session = self ._meta_data ['bigip' ]._meta_data ['icr_session' ]
833856
834- session .delete (delete_uri , ** requests_params )
857+ # Handles ConnectionAborted errors
858+ for i in range (0 , 30 ):
859+ try :
860+ session .delete (delete_uri , ** requests_params )
861+ break
862+ except ConnectionError as ex :
863+ if 'Connection aborted' in str (ex ) and i < 29 :
864+ time .sleep (1 )
865+ continue
866+ else :
867+ raise
835868
836869 def delete_collection (self , ** kwargs ):
837870 """One can not simply delete a collection.
@@ -1012,7 +1045,17 @@ def _create(self, **kwargs):
10121045 kwargs = self ._prepare_request_json (kwargs )
10131046
10141047 # Invoke the REST operation on the device.
1015- response = session .post (_create_uri , json = kwargs , ** requests_params )
1048+ # Handles ConnectionAborted errors
1049+ for i in range (0 , 30 ):
1050+ try :
1051+ response = session .post (_create_uri , json = kwargs , ** requests_params )
1052+ break
1053+ except ConnectionError as ex :
1054+ if 'Connection aborted' in str (ex ) and i < 29 :
1055+ time .sleep (1 )
1056+ continue
1057+ else :
1058+ raise
10161059
10171060 # Make new instance of self
10181061 result = self ._produce_instance (response )
@@ -1081,7 +1124,19 @@ def _load(self, **kwargs):
10811124 for key1 , key2 in self ._meta_data ['reduction_forcing_pairs' ]:
10821125 kwargs = self ._reduce_boolean_pair (kwargs , key1 , key2 )
10831126 kwargs = self ._check_for_python_keywords (kwargs )
1084- response = refresh_session .get (base_uri , ** kwargs )
1127+
1128+ # Handles ConnectionAborted errors
1129+ for i in range (0 , 30 ):
1130+ try :
1131+ response = refresh_session .get (base_uri , ** kwargs )
1132+ break
1133+ except ConnectionError as ex :
1134+ if 'Connection aborted' in str (ex ) and i < 29 :
1135+ time .sleep (1 )
1136+ continue
1137+ else :
1138+ raise
1139+
10851140 # Make new instance of self
10861141 return self ._produce_instance (response )
10871142
@@ -1121,7 +1176,18 @@ def _delete(self, **kwargs):
11211176 if not force :
11221177 self ._check_generation ()
11231178
1124- response = session .delete (delete_uri , ** requests_params )
1179+ # Handles ConnectionAborted errors
1180+ for i in range (0 , 30 ):
1181+ try :
1182+ response = session .delete (delete_uri , ** requests_params )
1183+ break
1184+ except ConnectionError as ex :
1185+ if 'Connection aborted' in str (ex ) and i < 29 :
1186+ time .sleep (1 )
1187+ continue
1188+ else :
1189+ raise
1190+
11251191 if response .status_code == 200 :
11261192 self .__dict__ = {'deleted' : True }
11271193
@@ -1183,13 +1249,23 @@ def _exists(self, **kwargs):
11831249 base_uri = self ._meta_data ['container' ]._meta_data ['uri' ]
11841250 kwargs .update (requests_params )
11851251
1186- try :
1187- session .get (base_uri , ** kwargs )
1188- except HTTPError as err :
1189- if err .response .status_code == 404 :
1190- return False
1191- else :
1192- raise
1252+ # Handles ConnectionAborted errors
1253+ for i in range (0 , 30 ):
1254+ try :
1255+ session .get (base_uri , ** kwargs )
1256+ break
1257+ except HTTPError as err :
1258+ if err .response .status_code == 404 :
1259+ return False
1260+ else :
1261+ raise
1262+ except ConnectionError as ex :
1263+ if 'Connection aborted' in str (ex ) and i < 29 :
1264+ time .sleep (1 )
1265+ continue
1266+ else :
1267+ raise
1268+
11931269 return True
11941270
11951271
0 commit comments