Allow customize fail message of wait_for module

This commit is contained in:
Chen Zhiwei 2017-05-31 05:14:41 -04:00 committed by Brian Coca
parent bdd5adf21e
commit a44d57bf91

View file

@ -105,6 +105,12 @@ options:
default: 1
description:
- Number of seconds to sleep between checks, before 2.3 this was hardcoded to 1 second.
msg:
version_added: "2.4"
required: false
default: null
description:
- The error message when module failed or timeout.
notes:
- The ability to use search_regex with a port connection was added in 1.7.
requirements: []
@ -154,6 +160,12 @@ EXAMPLES = '''
path: /proc/3466/status
state: absent
# output customized message when failed
- wait_for:
path: /tmp/foo
state: present
msg: Timeout to find file /tmp/foo
# wait 300 seconds for port 22 to become open and contain "OpenSSH",
# don't assume the inventory_hostname is resolvable and don't start checking for 10 seconds
- wait_for: port=22 host="{{ ansible_host|default(ansible_ssh_host|default(inventory_hostname)) }}" search_regex=OpenSSH delay=10
@ -410,7 +422,8 @@ def main():
search_regex=dict(default=None),
state=dict(default='started', choices=['started', 'stopped', 'present', 'absent', 'drained']),
exclude_hosts=dict(default=None, type='list'),
sleep=dict(default=1, type='int')
sleep=dict(default=1, type='int'),
msg=dict(default=None, type='str')
),
)
@ -443,6 +456,8 @@ def main():
except:
module.fail_json(msg="unknown active_connection_state ("+_connection_state+") defined")
msg = params['msg']
start = datetime.datetime.utcnow()
if delay:
@ -473,9 +488,9 @@ def main():
else:
elapsed = datetime.datetime.utcnow() - start
if port:
module.fail_json(msg="Timeout when waiting for %s:%s to stop." % (host, port), elapsed=elapsed.seconds)
module.fail_json(msg=msg or "Timeout when waiting for %s:%s to stop." % (host, port), elapsed=elapsed.seconds)
elif path:
module.fail_json(msg="Timeout when waiting for %s to be absent." % (path), elapsed=elapsed.seconds)
module.fail_json(msg=msg or "Timeout when waiting for %s to be absent." % (path), elapsed=elapsed.seconds)
elif state in ['started', 'present']:
### wait for start condition
@ -489,7 +504,7 @@ def main():
# If anything except file not present, throw an error
if e.errno != 2:
elapsed = datetime.datetime.utcnow() - start
module.fail_json(msg="Failed to stat %s, %s" % (path, e.strerror), elapsed=elapsed.seconds)
module.fail_json(msg=msg or "Failed to stat %s, %s" % (path, e.strerror), elapsed=elapsed.seconds)
# file doesn't exist yet, so continue
else:
# File exists. Are there additional things to check?
@ -554,14 +569,14 @@ def main():
elapsed = datetime.datetime.utcnow() - start
if port:
if search_regex:
module.fail_json(msg="Timeout when waiting for search string %s in %s:%s" % (search_regex, host, port), elapsed=elapsed.seconds)
module.fail_json(msg=msg or "Timeout when waiting for search string %s in %s:%s" % (search_regex, host, port), elapsed=elapsed.seconds)
else:
module.fail_json(msg="Timeout when waiting for %s:%s" % (host, port), elapsed=elapsed.seconds)
module.fail_json(msg= msg or "Timeout when waiting for %s:%s" % (host, port), elapsed=elapsed.seconds)
elif path:
if search_regex:
module.fail_json(msg="Timeout when waiting for search string %s in %s" % (search_regex, path), elapsed=elapsed.seconds)
module.fail_json(msg=msg or "Timeout when waiting for search string %s in %s" % (search_regex, path), elapsed=elapsed.seconds)
else:
module.fail_json(msg="Timeout when waiting for file %s" % (path), elapsed=elapsed.seconds)
module.fail_json(msg=msg or "Timeout when waiting for file %s" % (path), elapsed=elapsed.seconds)
elif state == 'drained':
### wait until all active connections are gone
@ -577,7 +592,7 @@ def main():
time.sleep(params['sleep'])
else:
elapsed = datetime.datetime.utcnow() - start
module.fail_json(msg="Timeout when waiting for %s:%s to drain" % (host, port), elapsed=elapsed.seconds)
module.fail_json(msg=msg or "Timeout when waiting for %s:%s to drain" % (host, port), elapsed=elapsed.seconds)
elapsed = datetime.datetime.utcnow() - start
module.exit_json(state=state, port=port, search_regex=search_regex, path=path, elapsed=elapsed.seconds)