From fd0958e6eb87ee16f787d5fee865fa602436b816 Mon Sep 17 00:00:00 2001 From: "Dustin C. Hatch" Date: Thu, 6 Apr 2017 10:08:22 -0500 Subject: [PATCH] wait_for: Added script to wait for a service to come up --- wait_for.py | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100755 wait_for.py diff --git a/wait_for.py b/wait_for.py new file mode 100755 index 0000000..543e2c2 --- /dev/null +++ b/wait_for.py @@ -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()