Merge pull request #148 from andreisavu/retry-on-ssh

Use a retry loop when trying to acquire a ssh connection
This commit is contained in:
Adrian Cole 2011-11-14 12:31:49 -08:00
commit e00c383686
1 changed files with 17 additions and 9 deletions

View File

@ -58,6 +58,7 @@ import org.jclouds.net.IPSocket;
import org.jclouds.predicates.RetryablePredicate;
import org.jclouds.rest.annotations.Identity;
import org.jclouds.ssh.SshClient;
import org.jclouds.ssh.SshException;
import org.testng.annotations.AfterGroups;
import org.testng.annotations.BeforeGroups;
import org.testng.annotations.Test;
@ -141,7 +142,7 @@ public class CloudStackComputeServiceAdapterLiveTest extends BaseCloudStackClien
new DefaultCredentialsFromImageOrOverridingCredentials());
@Test
public void testCreateNodeWithGroupEncodedIntoNameThenStoreCredentialsWithSecurityGroup()
public void testCreateNodeWithGroupEncodedIntoName()
throws InterruptedException {
String group = "foo";
String name = "node" + new Random().nextInt();
@ -151,19 +152,13 @@ public class CloudStackComputeServiceAdapterLiveTest extends BaseCloudStackClien
.getTemplateClient()
.getTemplateInZone(Long.parseLong(template.getImage().getId()),
Long.parseLong(template.getLocation().getId())).isPasswordEnabled()) {
client.getSSHKeyPairClient().deleteSSHKeyPair(keyPairName);
client.getSSHKeyPairClient().registerSSHKeyPair(keyPairName, keyPair.get("public"));
credentialStore.put("keypair#" + keyPairName, new Credentials("root", keyPair.get("private")));
// TODO: look at SecurityGroupClientLiveTest for how to do this
template.getOptions().as(CloudStackTemplateOptions.class).keyPair(keyPairName);
}
vm = adapter.createNodeWithGroupEncodedIntoName(group, name, template);
// TODO: check security groups vm.getSecurityGroups(),
// check other things, like cpu correct, mem correct, image/os is correct
// (as possible)
// TODO: check vm name - it should contain the group
// check to see if we setup a NAT rule (conceding we could check this from
// cache)
@ -179,7 +174,7 @@ public class CloudStackComputeServiceAdapterLiveTest extends BaseCloudStackClien
protected void doConnectViaSsh(IPSocket socket, Credentials creds) {
SshClient ssh = computeContext.utils().sshFactory().create(socket, creds);
try {
ssh.connect();
connectWithRetry(ssh, 5, 2000);
ExecResponse hello = ssh.exec("echo hello");
assertEquals(hello.getOutput().trim(), "hello");
System.err.println(ssh.exec("df -k").getOutput());
@ -191,6 +186,19 @@ public class CloudStackComputeServiceAdapterLiveTest extends BaseCloudStackClien
}
}
private void connectWithRetry(SshClient ssh, int times, int delayInMilli) {
for(int i=0; i<times; i++) {
try {
ssh.connect();
break;
} catch(SshException e) {
try {
Thread.sleep(delayInMilli);
} catch (InterruptedException e1) {}
}
}
}
@Test
public void testListHardwareProfiles() {
Iterable<ServiceOffering> profiles = adapter.listHardwareProfiles();