aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Sokolovsky <paul.sokolovsky@linaro.org>2013-05-20 19:51:51 +0300
committerPaul Sokolovsky <paul.sokolovsky@linaro.org>2013-05-20 19:51:51 +0300
commitdf94717d0aa1a012d0b023b5021ffd89cf5dd917 (patch)
tree778c827b02e94a1a5fdfe923d8d988cf6261218c
parenta91f83034be666b0ae6c2edb65831cf63a4dce8d (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.py13
-rw-r--r--linaro-ami/remote_executor.py2
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. '''