summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSerge van Ginderachter <serge@vanginderachter.be>2013-09-03 22:00:43 +0200
committerSerge van Ginderachter <serge@vanginderachter.be>2013-10-21 20:36:25 +0200
commitf79c9fb6ce5055e948bfa126697f7f675f1ff21a (patch)
treec7103f4c48d5e5fc73c4d7548c37ff44050a729b
parent0c2e376d5eac70e3a2769cb889e0e609d8384bff (diff)
downloadansible-f79c9fb6ce5055e948bfa126697f7f675f1ff21a.tar.gz
improve changed result for race conditions
-rw-r--r--library/net_infrastructure/bigip_monitor_http22
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