Updated Branches:
  refs/heads/1.6.x af0d1d300 -> f615eb11a

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/f615eb11
Tree: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/tree/f615eb11
Diff: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/diff/f615eb11

Branch: refs/heads/1.6.x
Commit: f615eb11a378fcce9c5e9dde839dd87de311e59c
Parents: af0d1d3
Author: Andrew Bayer <[email protected]>
Authored: Fri May 31 10:53:18 2013 -0700
Committer: Andrew Bayer <[email protected]>
Committed: Fri May 31 12:57:16 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/f615eb11/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 e839d30..96b3a8a 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
@@ -182,11 +182,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/f615eb11/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

Reply via email to