diff options
author | Paul Sokolovsky <paul.sokolovsky@linaro.org> | 2013-05-20 19:51:51 +0300 |
---|---|---|
committer | Paul Sokolovsky <paul.sokolovsky@linaro.org> | 2013-05-20 19:51:51 +0300 |
commit | df94717d0aa1a012d0b023b5021ffd89cf5dd917 (patch) | |
tree | 778c827b02e94a1a5fdfe923d8d988cf6261218c | |
parent | a91f83034be666b0ae6c2edb65831cf63a4dce8d (diff) |
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.
-rw-r--r-- | linaro-ami/linaro_ami.py | 13 | ||||
-rw-r--r-- | 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. ''' |