Updated Branches: refs/heads/1.5.x 383d32ede -> 35574eada
JCLOUDS-105. Short-term fix for keypairs being ignored if VM says it's password-enabled. Project: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/commit/35574ead Tree: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/tree/35574ead Diff: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/diff/35574ead Branch: refs/heads/1.5.x Commit: 35574eadae8b201468b53d0f451074f2d9bd025f Parents: 383d32e Author: Andrew Bayer <[email protected]> Authored: Fri May 31 10:53:18 2013 -0700 Committer: Andrew Bayer <[email protected]> Committed: Fri May 31 13:42:52 2013 -0700 ---------------------------------------------------------------------- .../strategy/CloudStackComputeServiceAdapter.java | 6 +- .../CloudStackComputeServiceAdapterExpectTest.java | 67 ++++++++++++++- 2 files changed, 67 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/35574ead/apis/cloudstack/src/main/java/org/jclouds/cloudstack/compute/strategy/CloudStackComputeServiceAdapter.java ---------------------------------------------------------------------- diff --git a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/compute/strategy/CloudStackComputeServiceAdapter.java b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/compute/strategy/CloudStackComputeServiceAdapter.java index e617390..f33c6a4 100644 --- a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/compute/strategy/CloudStackComputeServiceAdapter.java +++ b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/compute/strategy/CloudStackComputeServiceAdapter.java @@ -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(); http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/35574ead/apis/cloudstack/src/test/java/org/jclouds/cloudstack/compute/CloudStackComputeServiceAdapterExpectTest.java ---------------------------------------------------------------------- diff --git a/apis/cloudstack/src/test/java/org/jclouds/cloudstack/compute/CloudStackComputeServiceAdapterExpectTest.java b/apis/cloudstack/src/test/java/org/jclouds/cloudstack/compute/CloudStackComputeServiceAdapterExpectTest.java index bab5459..a0badad 100644 --- a/apis/cloudstack/src/test/java/org/jclouds/cloudstack/compute/CloudStackComputeServiceAdapterExpectTest.java +++ b/apis/cloudstack/src/test/java/org/jclouds/cloudstack/compute/CloudStackComputeServiceAdapterExpectTest.java @@ -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
