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