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.
This commit is contained in:
Jeroen Hoekx 2012-08-24 19:08:45 +02:00
parent 3c86a43122
commit 0323d887df

View file

@ -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,21 +39,40 @@ 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']
end = datetime.datetime.now() + datetime.timedelta(seconds=timeout) 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: while datetime.datetime.now() < end:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try: s.settimeout(5)
s.connect( (host, port) ) try:
s.close() s.connect( (host, port) )
break s.close()
except: time.sleep(1)
time.sleep(1) except:
else: break
module.fail_json(msg="Timeout when waiting for %s"%(host)) else:
module.fail_json(msg="Timeout when waiting for %s to stop."%(host))
module.exit_json(msg="%s responds on %s"%(host, port)) if state in [ 'started', 'restarted' ]:
### wait for the host to come up
end = datetime.datetime.now() + datetime.timedelta(seconds=timeout)
while datetime.datetime.now() < end:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.connect( (host, port) )
s.close()
break
except:
time.sleep(1)
else:
module.fail_json(msg="Timeout when waiting for %s"%(host))
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>>