From df94717d0aa1a012d0b023b5021ffd89cf5dd917 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Mon, 20 May 2013 19:51:51 +0300 Subject: Retry SSH login attempts in case we can't login immediately. Note: login failures can be also because of wromg key specified with -K or -k. --- linaro-ami/linaro_ami.py | 13 +++++++++++-- linaro-ami/remote_executor.py | 2 ++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/linaro-ami/linaro_ami.py b/linaro-ami/linaro_ami.py index ac9aaec..91c3375 100644 --- a/linaro-ami/linaro_ami.py +++ b/linaro-ami/linaro_ami.py @@ -5,6 +5,7 @@ import time from aws_controller import AwsController, InstanceRunFailedError from remote_executor import RemoteExecutor, RemoteCommandFailedError +from remote_executor import AuthenticationException def iso_timestamp(): @@ -69,8 +70,16 @@ class LinaroAMI: self.aws.import_key_pair(key_name, self.executor.get_public_key()) instance = self.aws.run_instance_and_wait(base_ami, key_name, instance_type) - self.log.info("Started instance: %s", instance.public_dns_name) - self.executor.connect(instance.public_dns_name, self.username, self.key_filename) + self.log.info("Started instance: %s (%s)", instance.public_dns_name, instance.id) + for i in xrange(5): + try: + self.executor.connect(instance.public_dns_name, self.username, self.key_filename) + break + except AuthenticationException, e: + if i == 4: + raise e + self.log.debug("Could not login to instance so far, retrying") + time.sleep(2) self.log.debug("Connected to instance") self.log.info("Installing bzr.") diff --git a/linaro-ami/remote_executor.py b/linaro-ami/remote_executor.py index e6f393f..68a29ad 100644 --- a/linaro-ami/remote_executor.py +++ b/linaro-ami/remote_executor.py @@ -2,6 +2,8 @@ import sys import paramiko import logging +from paramiko import AuthenticationException + class RemoteCommandFailedError(Exception): ''' Command execution on the remote server failed. ''' -- cgit v1.2.3