JCLOUDS-105. Short-term fix for keypairs being ignored if VM says it's password-enabled.

This commit is contained in:
Andrew Bayer 2013-05-31 10:53:18 -07:00
parent 383d32ede9
commit 35574eadae
2 changed files with 67 additions and 6 deletions

View File

@ -181,11 +181,11 @@ public class CloudStackComputeServiceAdapter implements
VirtualMachine vm = blockUntilJobCompletesAndReturnResult.<VirtualMachine>apply(job);
logger.debug("--- virtualmachine: %s", vm);
LoginCredentials credentials = null;
if (vm.isPasswordEnabled()) {
if (!vm.isPasswordEnabled() || templateOptions.getKeyPair() != null) {
credentials = LoginCredentials.fromCredentials(credentialStore.get("keypair#" + templateOptions.getKeyPair()));
} else {
assert vm.getPassword() != null : vm;
credentials = LoginCredentials.builder().password(vm.getPassword()).build();
} else {
credentials = LoginCredentials.fromCredentials(credentialStore.get("keypair#" + templateOptions.getKeyPair()));
}
if (templateOptions.shouldSetupStaticNat()) {
Capabilities capabilities = client.getConfigurationClient().listCapabilities();

View File

@ -62,7 +62,58 @@ public class CloudStackComputeServiceAdapterExpectTest extends BaseCloudStackCom
HttpResponse queryAsyncJobResultResponse = HttpResponse.builder().statusCode(200)
.payload(payloadFromResource("/queryasyncjobresultresponse-virtualmachine.json"))
.build();
HttpRequest listCapabilitiesNotListAll = HttpRequest.builder().method("GET")
.endpoint("http://localhost:8080/client/api")
.addQueryParam("response", "json")
.addQueryParam("command", "listCapabilities")
.addQueryParam("apiKey", "APIKEY")
.addQueryParam("signature", "l3PVoJnKK2G2gHk3HPHtpwWjlW4%3D")
.addHeader("Accept", "application/json")
.build();
public void testCreateNodeWithGroupEncodedIntoName() {
HttpRequest deployVM = HttpRequest.builder().method("GET")
.endpoint("http://localhost:8080/client/api")
.addQueryParam("response", "json")
.addQueryParam("command", "deployVirtualMachine")
.addQueryParam("zoneid", "1")
.addQueryParam("serviceofferingid", "1")
.addQueryParam("templateid", "4")
.addQueryParam("displayname", "test-e92")
.addQueryParam("name", "test-e92")
.addQueryParam("networkids", "204")
.addQueryParam("apiKey", "APIKEY")
.addQueryParam("signature", "wJ%2BiflOS3am5qcjQOd8Y/Pw8/Dc%3D")
.addHeader("Accept", "application/json")
.build();
Map<HttpRequest, HttpResponse> requestResponseMap = ImmutableMap.<HttpRequest, HttpResponse> builder()
.put(listTemplates, listTemplatesResponse)
.put(listOsTypes, listOsTypesResponse)
.put(listOsCategories, listOsCategoriesResponse)
.put(listZones, listZonesResponse)
.put(listServiceOfferings, listServiceOfferingsResponse)
.put(listAccounts, listAccountsResponse)
.put(listNetworks, listNetworksResponse)
.put(getZone, getZoneResponse)
.put(deployVM, deployVMResponse)
.put(queryAsyncJobResult, queryAsyncJobResultResponse)
.build();
Injector forNode = requestsSendResponses(requestResponseMap);
Template template = forNode.getInstance(TemplateBuilder.class).osFamily(OsFamily.CENTOS).build();
template.getOptions().as(CloudStackTemplateOptions.class).setupStaticNat(false);
CloudStackComputeServiceAdapter adapter = forNode.getInstance(CloudStackComputeServiceAdapter.class);
NodeAndInitialCredentials<VirtualMachine> server = adapter.createNodeWithGroupEncodedIntoName("test", "test-e92",
template);
assertNotNull(server);
assertEquals(server.getCredentials(), LoginCredentials.builder().password("dD7jwajkh").build());
}
public void testCreateNodeWithGroupEncodedIntoNameWithKeyPair() {
HttpRequest deployVM = HttpRequest.builder().method("GET")
.endpoint("http://localhost:8080/client/api")
@ -99,11 +150,16 @@ public class CloudStackComputeServiceAdapterExpectTest extends BaseCloudStackCom
template.getOptions().as(CloudStackTemplateOptions.class).keyPair("mykeypair").setupStaticNat(false);
CloudStackComputeServiceAdapter adapter = forKeyPair.getInstance(CloudStackComputeServiceAdapter.class);
CloudStackContext context = forKeyPair.getInstance(CloudStackContext.class);
NodeAndInitialCredentials<VirtualMachine> server = adapter.createNodeWithGroupEncodedIntoName("test", "test-e92",
template);
assertNotNull(server);
assertEquals(server.getCredentials(), LoginCredentials.builder().password("dD7jwajkh").build());
assertEquals(server.getCredentials(),
LoginCredentials.fromCredentials(context.utils().getCredentialStore().get("keypair#" +
template.getOptions().
as(CloudStackTemplateOptions.class).
getKeyPair())));
}
public void testCreateNodeWithGroupEncodedIntoNameWithKeyPairAssignedToAccountAndDomain() {
@ -144,11 +200,16 @@ public class CloudStackComputeServiceAdapterExpectTest extends BaseCloudStackCom
template.getOptions().as(CloudStackTemplateOptions.class).keyPair("mykeypair").account("account").domainId("domainId").setupStaticNat(false);
CloudStackComputeServiceAdapter adapter = forKeyPair.getInstance(CloudStackComputeServiceAdapter.class);
CloudStackContext context = forKeyPair.getInstance(CloudStackContext.class);
NodeAndInitialCredentials<VirtualMachine> server = adapter.createNodeWithGroupEncodedIntoName("test", "test-e92",
template);
assertNotNull(server);
assertEquals(server.getCredentials(), LoginCredentials.builder().password("dD7jwajkh").build());
assertEquals(server.getCredentials(),
LoginCredentials.fromCredentials(context.utils().getCredentialStore().get("keypair#" +
template.getOptions().
as(CloudStackTemplateOptions.class).
getKeyPair())));
}
@Override