wait_for: Added script to wait for a service to come up
parent
5537be6a76
commit
fd0958e6eb
|
@ -0,0 +1,60 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
import argparse
|
||||||
|
import socket
|
||||||
|
import time
|
||||||
|
import os
|
||||||
|
import signal
|
||||||
|
|
||||||
|
|
||||||
|
def parse_args():
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument(
|
||||||
|
'--timeout', '-t',
|
||||||
|
type=int,
|
||||||
|
metavar='SECONDS',
|
||||||
|
help='Number of seconds to wait for host',
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'host',
|
||||||
|
help='Remote host name',
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'service',
|
||||||
|
nargs='?',
|
||||||
|
default='ssh',
|
||||||
|
help='Service/port on remote host',
|
||||||
|
)
|
||||||
|
return parser.parse_args()
|
||||||
|
|
||||||
|
|
||||||
|
def wait_for(host, service, timeout=None):
|
||||||
|
if timeout:
|
||||||
|
deadline = time.time() + timeout
|
||||||
|
else:
|
||||||
|
deadline = None
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
sock = socket.create_connection((host, service))
|
||||||
|
except socket.error:
|
||||||
|
if deadline and time.time() >= deadline:
|
||||||
|
break
|
||||||
|
time.sleep(1)
|
||||||
|
else:
|
||||||
|
sock.close()
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
args = parse_args()
|
||||||
|
|
||||||
|
try:
|
||||||
|
if not wait_for(args.host, args.service, args.timeout):
|
||||||
|
raise SystemExit(1)
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
signal.signal(signal.SIGINT, signal.SIG_DFL)
|
||||||
|
os.kill(os.getpid(), signal.SIGINT)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
Loading…
Reference in New Issue