Updated Branches:
  refs/heads/master bf2138089 -> e0ea017a5

JCLOUDS-235. Add support for datadisks to CloudStackTemplateOptions

Also adds support for the new options to
CloudStackComputeServiceAdapter, unsurprisingly. Also got rid of the
in fact wrong mutual exclusivity of dataDiskSize and diskOfferingId in
DeployVirtualMachineOptions - that's a misleading bit from the
CloudStack API docs.


Project: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/commit/e0ea017a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/tree/e0ea017a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/diff/e0ea017a

Branch: refs/heads/master
Commit: e0ea017a562cd448af78116f608c8d64e9e5739c
Parents: bf21380
Author: Andrew Bayer <[email protected]>
Authored: Tue Aug 6 18:17:06 2013 -0700
Committer: Andrew Bayer <[email protected]>
Committed: Thu Aug 8 13:50:34 2013 -0700

----------------------------------------------------------------------
 .../options/CloudStackTemplateOptions.java      | 44 ++++++++++++++++
 .../CloudStackComputeServiceAdapter.java        |  7 +++
 .../options/DeployVirtualMachineOptions.java    |  4 +-
 ...oudStackComputeServiceAdapterExpectTest.java | 54 ++++++++++++++++++++
 .../options/CloudStackTemplateOptionsTest.java  | 20 ++++++++
 5 files changed, 126 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/e0ea017a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/compute/options/CloudStackTemplateOptions.java
----------------------------------------------------------------------
diff --git 
a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/compute/options/CloudStackTemplateOptions.java
 
b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/compute/options/CloudStackTemplateOptions.java
index 4b05a21..14e72d4 100644
--- 
a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/compute/options/CloudStackTemplateOptions.java
+++ 
b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/compute/options/CloudStackTemplateOptions.java
@@ -60,6 +60,8 @@ public class CloudStackTemplateOptions extends 
TemplateOptions implements Clonea
    protected String domainId;
    protected boolean generateKeyPair = false;
    protected boolean generateSecurityGroup = false;
+   protected String diskOfferingId;
+   protected int dataDiskSize;
    
    @Override
    public CloudStackTemplateOptions clone() {
@@ -83,10 +85,36 @@ public class CloudStackTemplateOptions extends 
TemplateOptions implements Clonea
          eTo.account(this.account);
          eTo.domainId(this.domainId);
          eTo.setupStaticNat(setupStaticNat);
+         eTo.diskOfferingId(diskOfferingId);
+         eTo.dataDiskSize(dataDiskSize);
       }
    }
 
    /**
+    * @see 
org.jclouds.cloudstack.options.DeployVirtualMachineOptions#diskOfferingId
+    */
+   public CloudStackTemplateOptions diskOfferingId(String diskOfferingId) {
+      this.diskOfferingId = diskOfferingId;
+      return this;
+   }
+
+   public String getDiskOfferingId() {
+      return diskOfferingId;
+   }
+
+   /**
+    * @see DeployVirtualMachineOptions#dataDiskSize
+    */
+   public CloudStackTemplateOptions dataDiskSize(int dataDiskSize) {
+      this.dataDiskSize = dataDiskSize;
+      return this;
+   }
+
+   public int getDataDiskSize() {
+      return dataDiskSize;
+   }
+
+   /**
     * @see DeployVirtualMachineOptions#securityGroupId
     */
    public CloudStackTemplateOptions securityGroupId(String securityGroupId) {
@@ -231,6 +259,22 @@ public class CloudStackTemplateOptions extends 
TemplateOptions implements Clonea
    public static class Builder {
 
       /**
+       * @see CloudStackTemplateOptions#diskOfferingId
+       */
+      public static CloudStackTemplateOptions diskOfferingId(String 
diskOfferingId) {
+         CloudStackTemplateOptions options = new CloudStackTemplateOptions();
+         return options.diskOfferingId(diskOfferingId);
+      }
+
+      /**
+       * @see CloudStackTemplateOptions#dataDiskSize
+       */
+      public static CloudStackTemplateOptions dataDiskSize(int dataDiskSize) {
+         CloudStackTemplateOptions options = new CloudStackTemplateOptions();
+         return options.dataDiskSize(dataDiskSize);
+      }
+
+      /**
        * @see CloudStackTemplateOptions#securityGroupId
        */
       public static CloudStackTemplateOptions securityGroupId(String id) {

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/e0ea017a/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 ddc7f7a..ecfe215 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
@@ -196,6 +196,13 @@ public class CloudStackComputeServiceAdapter implements
          options.keyPair(keyPair.getName());
       }
 
+      if (templateOptions.getDiskOfferingId() != null) {
+         options.diskOfferingId(templateOptions.getDiskOfferingId());
+         if (templateOptions.getDataDiskSize() > 0) {
+            options.dataDiskSize(templateOptions.getDataDiskSize());
+         }
+      }
+
       if (supportsSecurityGroups().apply(zone)) {
          List<Integer> inboundPorts = 
Ints.asList(templateOptions.getInboundPorts());
 

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/e0ea017a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/options/DeployVirtualMachineOptions.java
----------------------------------------------------------------------
diff --git 
a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/options/DeployVirtualMachineOptions.java
 
b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/options/DeployVirtualMachineOptions.java
index dcec8f6..c52d5f2 100644
--- 
a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/options/DeployVirtualMachineOptions.java
+++ 
b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/options/DeployVirtualMachineOptions.java
@@ -199,11 +199,9 @@ public class DeployVirtualMachineOptions extends 
AccountInDomainOptions {
 
    /**
     * @param dataDiskSize
-    *           the arbitrary size for the DATADISK volume. Mutually exclusive
-    *           with diskOfferingId
+    *           the arbitrary size for the DATADISK volume.
     */
    public DeployVirtualMachineOptions dataDiskSize(long dataDiskSize) {
-      checkArgument(!queryParameters.containsKey("diskofferingid"), "Mutually 
exclusive with diskOfferingId");
       this.queryParameters.replaceValues("size", ImmutableSet.of(dataDiskSize 
+ ""));
       return this;
    }

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/e0ea017a/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 4eb89aa..a79e29b 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
@@ -274,6 +274,60 @@ public class CloudStackComputeServiceAdapterExpectTest 
extends BaseCloudStackCom
       assertEquals(server.getCredentials().getPrivateKey(), privKey);
    }
 
+   public void 
testCreateNodeWithGroupEncodedIntoNameWithKeyPairDefaultSecurityGroupAndDisk() 
throws IOException {
+      HttpRequest deployVM = HttpRequest.builder().method("GET")
+              .endpoint("http://localhost:8080/client/api";)
+              .addQueryParam("response", "json")
+              .addQueryParam("command", "deployVirtualMachine")
+              .addQueryParam("zoneid", "2")
+              .addQueryParam("serviceofferingid", "1")
+              .addQueryParam("templateid", "241")
+              .addQueryParam("displayname", "test-e92")
+              .addQueryParam("name", "test-e92")
+              .addQueryParam("networkids", "204")
+              .addQueryParam("keypair", "mykeypair")
+              .addQueryParam("diskofferingid", "5678")
+              .addQueryParam("size", "10")
+              .addQueryParam("apiKey", "APIKEY")
+              .addQueryParam("signature", "FWWCEpsrbbjxiqoQve302rrfOjI%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, listNetworksWithSecurityGroupsResponse)
+              .put(getZoneWithSecurityGroups, 
getZoneWithSecurityGroupsResponse)
+              .put(deployVM, deployVMResponse)
+              .put(queryAsyncJobResult, queryAsyncJobResultResponse)
+              .build();
+
+      Injector forKeyPair = requestsSendResponses(requestResponseMap);
+
+      String privKey = 
Strings2.toStringAndClose(getClass().getResourceAsStream("/test"));
+      Template template = forKeyPair.getInstance(TemplateBuilder.class)
+              .osFamily(OsFamily.CENTOS)
+              .locationId("2")
+              .build();
+      
template.getOptions().as(CloudStackTemplateOptions.class).keyPair("mykeypair")
+              .diskOfferingId("5678")
+              .dataDiskSize(10)
+              .setupStaticNat(false)
+              .overrideLoginPrivateKey(privKey);
+
+
+      CloudStackComputeServiceAdapter adapter = 
forKeyPair.getInstance(CloudStackComputeServiceAdapter.class);
+
+      NodeAndInitialCredentials<VirtualMachine> server = 
adapter.createNodeWithGroupEncodedIntoName("test", "test-e92",
+              template);
+      assertNotNull(server);
+      assertEquals(server.getCredentials().getPrivateKey(), privKey);
+   }
+
    public void 
testCreateNodeWithGroupEncodedIntoNameWithKeyPairGenerateSecurityGroup() throws 
IOException {
       HttpRequest deployVM = HttpRequest.builder().method("GET")
             .endpoint("http://localhost:8080/client/api";)

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/e0ea017a/apis/cloudstack/src/test/java/org/jclouds/cloudstack/compute/options/CloudStackTemplateOptionsTest.java
----------------------------------------------------------------------
diff --git 
a/apis/cloudstack/src/test/java/org/jclouds/cloudstack/compute/options/CloudStackTemplateOptionsTest.java
 
b/apis/cloudstack/src/test/java/org/jclouds/cloudstack/compute/options/CloudStackTemplateOptionsTest.java
index 7bb81f5..747f0cc 100644
--- 
a/apis/cloudstack/src/test/java/org/jclouds/cloudstack/compute/options/CloudStackTemplateOptionsTest.java
+++ 
b/apis/cloudstack/src/test/java/org/jclouds/cloudstack/compute/options/CloudStackTemplateOptionsTest.java
@@ -17,6 +17,8 @@
 package org.jclouds.cloudstack.compute.options;
 
 import static 
org.jclouds.cloudstack.compute.options.CloudStackTemplateOptions.Builder.account;
+import static 
org.jclouds.cloudstack.compute.options.CloudStackTemplateOptions.Builder.dataDiskSize;
+import static 
org.jclouds.cloudstack.compute.options.CloudStackTemplateOptions.Builder.diskOfferingId;
 import static 
org.jclouds.cloudstack.compute.options.CloudStackTemplateOptions.Builder.domainId;
 import static 
org.jclouds.cloudstack.compute.options.CloudStackTemplateOptions.Builder.generateKeyPair;
 import static 
org.jclouds.cloudstack.compute.options.CloudStackTemplateOptions.Builder.generateSecurityGroup;
@@ -221,6 +223,24 @@ public class CloudStackTemplateOptionsTest {
    }
 
    @Test
+   public void testDiskOfferingId() {
+      TemplateOptions options = diskOfferingId("test");
+      
assertEquals(options.as(CloudStackTemplateOptions.class).getDiskOfferingId(), 
"test");
+   }
+
+   @Test
+   public void testDataDiskSizeDefault() {
+      TemplateOptions options = new CloudStackTemplateOptions();
+      
assertEquals(options.as(CloudStackTemplateOptions.class).getDataDiskSize(), 0);
+   }
+
+   @Test
+   public void testDataDiskSize() {
+      TemplateOptions options = dataDiskSize(10);
+      
assertEquals(options.as(CloudStackTemplateOptions.class).getDataDiskSize(), 10);
+   }
+
+   @Test
    public void testAccount() {
       TemplateOptions options = account("test");
       assertEquals(options.as(CloudStackTemplateOptions.class).getAccount(), 
"test");

Reply via email to