diff options
author | Serge van Ginderachter <serge@vanginderachter.be> | 2013-09-03 22:00:43 +0200 |
---|---|---|
committer | Serge van Ginderachter <serge@vanginderachter.be> | 2013-10-21 20:36:25 +0200 |
commit | f79c9fb6ce5055e948bfa126697f7f675f1ff21a (patch) | |
tree | c7103f4c48d5e5fc73c4d7548c37ff44050a729b | |
parent | 0c2e376d5eac70e3a2769cb889e0e609d8384bff (diff) | |
download | ansible-f79c9fb6ce5055e948bfa126697f7f675f1ff21a.tar.gz |
improve changed result for race conditions
-rw-r--r-- | library/net_infrastructure/bigip_monitor_http | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/library/net_infrastructure/bigip_monitor_http b/library/net_infrastructure/bigip_monitor_http index 0f26a0a374..61c36105c2 100644 --- a/library/net_infrastructure/bigip_monitor_http +++ b/library/net_infrastructure/bigip_monitor_http @@ -182,10 +182,11 @@ def create_monitor(api, monitor, template_attributes): api.LocalLB.Monitor.create_template(templates=[{'template_name': monitor, 'template_type': TEMPLATE_TYPE}], template_attributes=[template_attributes]) except bigsuds.OperationFailed, e: if "already exists" in str(e): - pass + return False else: # genuine exception raise + return True def delete_monitor(api, monitor): @@ -194,9 +195,12 @@ def delete_monitor(api, monitor): api.LocalLB.Monitor.delete_template(template_names=[monitor]) except bigsuds.OperationFailed, e: # maybe it was deleted since we checked - if not "was not found" in str(e): + if "was not found" in str(e): + return False + else: # genuine exception raise + return True def check_string_property(api, monitor, str_property): @@ -307,8 +311,11 @@ def main(): if state == 'absent': if monitor_exists: if not module.check_mode: - delete_monitor(api, monitor) - result['changed'] = True + # possible race condition if same task + # on other node deleted it first + result['changed'] = delete_monitor(api, monitor) + else: + result['changed'] = True else: ipport = {'address_type': address_type, @@ -353,10 +360,13 @@ def main(): result['changed'] = True elif not module.check_mode: - create_monitor(api, monitor, template_attributes) + # possible race condition if same task + # on other node deleted it first + result['changed'] = create_monitor(api, monitor, template_attributes) for str_property in template_string_properties: set_string_property(api, monitor, str_property) - result['changed'] = True + for int_property in template_integer_properties: + set_integer_property(api, monitor, int_property) else: # monitor does not exist and check mode result['changed'] = True |