Commit 5ba34572 by Jeroen Hoekx

Add a state parameter to the wait_for module.

This takes started, stopped and restarted.

Started returns when connecting is possible.
Stopped when connecting is not possible.
Restarted first waits for connecting to be impossible and returns when it is
possible again.
parent 150a47c6
...@@ -30,6 +30,7 @@ def main(): ...@@ -30,6 +30,7 @@ def main():
name=dict(required=True), name=dict(required=True),
timeout=dict(default=300), timeout=dict(default=300),
port=dict(default=22), port=dict(default=22),
state=dict(default='started', choices=['started', 'stopped', 'restarted']),
), ),
) )
...@@ -38,7 +39,26 @@ def main(): ...@@ -38,7 +39,26 @@ def main():
host = params['name'] host = params['name']
timeout = int(params['timeout']) timeout = int(params['timeout'])
port = int(params['port']) port = int(params['port'])
state = params['state']
if state in [ 'stopped', 'restarted']:
### first wait for the host to go down
end = datetime.datetime.now() + datetime.timedelta(seconds=timeout)
while datetime.datetime.now() < end:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(5)
try:
s.connect( (host, port) )
s.close()
time.sleep(1)
except:
break
else:
module.fail_json(msg="Timeout when waiting for %s to stop."%(host))
if state in [ 'started', 'restarted' ]:
### wait for the host to come up
end = datetime.datetime.now() + datetime.timedelta(seconds=timeout) end = datetime.datetime.now() + datetime.timedelta(seconds=timeout)
while datetime.datetime.now() < end: while datetime.datetime.now() < end:
...@@ -52,7 +72,7 @@ def main(): ...@@ -52,7 +72,7 @@ def main():
else: else:
module.fail_json(msg="Timeout when waiting for %s"%(host)) module.fail_json(msg="Timeout when waiting for %s"%(host))
module.exit_json(msg="%s responds on %s"%(host, port)) module.exit_json(msg="State of %s on %s is %s."%(host, port, state))
# this is magic, see lib/ansible/module_common.py # this is magic, see lib/ansible/module_common.py
#<<INCLUDE_ANSIBLE_MODULE_COMMON>> #<<INCLUDE_ANSIBLE_MODULE_COMMON>>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment