Updated Branches:
  refs/heads/master f1673194a -> bf723a864

Support Disk Configuration Extension in NovaTemplateOptions


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

Branch: refs/heads/master
Commit: bf723a86490a901b0c05ae778c45d05729f49724
Parents: f167319
Author: Everett Toews <[email protected]>
Authored: Thu Aug 1 12:40:32 2013 -0500
Committer: Everett Toews <[email protected]>
Committed: Thu Aug 1 16:40:00 2013 -0500

----------------------------------------------------------------------
 .../v2_0/compute/NovaComputeServiceAdapter.java |  3 +-
 .../compute/options/NovaTemplateOptions.java    | 34 ++++++++++++++++--
 .../openstack/nova/v2_0/domain/Server.java      |  4 +--
 .../NovaComputeServiceAdapterExpectTest.java    | 36 ++++++++++++++++++++
 .../options/NovaTemplateOptionsTest.java        |  9 +++++
 .../nova/v2_0/parse/ParseServerTest.java        |  1 +
 .../src/test/resources/server_details.json      |  1 +
 .../CloudServersUKTemplateBuilderLiveTest.java  |  2 ++
 .../CloudServersUSTemplateBuilderLiveTest.java  |  2 ++
 9 files changed, 86 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/bf723a86/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/NovaComputeServiceAdapter.java
----------------------------------------------------------------------
diff --git 
a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/NovaComputeServiceAdapter.java
 
b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/NovaComputeServiceAdapter.java
index 2923cb6..4904cfa 100644
--- 
a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/NovaComputeServiceAdapter.java
+++ 
b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/NovaComputeServiceAdapter.java
@@ -39,6 +39,7 @@ import org.jclouds.logging.Logger;
 import org.jclouds.openstack.nova.v2_0.NovaApi;
 import 
org.jclouds.openstack.nova.v2_0.compute.functions.RemoveFloatingIpFromNodeAndDeallocate;
 import org.jclouds.openstack.nova.v2_0.compute.options.NovaTemplateOptions;
+import 
org.jclouds.openstack.nova.v2_0.compute.strategy.ApplyNovaTemplateOptionsCreateNodesWithGroupEncodedIntoNameThenAddToSet;
 import org.jclouds.openstack.nova.v2_0.domain.Flavor;
 import org.jclouds.openstack.nova.v2_0.domain.Image;
 import org.jclouds.openstack.nova.v2_0.domain.KeyPair;
@@ -61,7 +62,6 @@ import com.google.common.base.Supplier;
 import com.google.common.cache.LoadingCache;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.ImmutableSet.Builder;
-import com.google.common.collect.Iterables;
 
 /**
  * The adapter used by the NovaComputeServiceContextModule to interface the 
nova-specific domain
@@ -109,6 +109,7 @@ public class NovaComputeServiceAdapter implements
       if (templateOptions.getSecurityGroupNames().isPresent())
          
options.securityGroupNames(templateOptions.getSecurityGroupNames().get());
       options.userData(templateOptions.getUserData());
+      options.diskConfig(templateOptions.getDiskConfig());
 
       Optional<String> privateKey = Optional.absent();
       if (templateOptions.getKeyPairName() != null) {

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/bf723a86/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/options/NovaTemplateOptions.java
----------------------------------------------------------------------
diff --git 
a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/options/NovaTemplateOptions.java
 
b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/options/NovaTemplateOptions.java
index d092564..afa062a 100644
--- 
a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/options/NovaTemplateOptions.java
+++ 
b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/options/NovaTemplateOptions.java
@@ -28,6 +28,7 @@ import java.util.Set;
 import org.jclouds.compute.options.TemplateOptions;
 import org.jclouds.domain.LoginCredentials;
 import org.jclouds.openstack.nova.v2_0.NovaApi;
+import org.jclouds.openstack.nova.v2_0.options.CreateServerOptions;
 import org.jclouds.scriptbuilder.domain.Statement;
 
 import com.google.common.base.Objects;
@@ -72,6 +73,9 @@ public class NovaTemplateOptions extends TemplateOptions 
implements Cloneable {
          if (getUserData() != null) {
              eTo.userData(getUserData());
          }
+         if (getDiskConfig() != null) {
+            eTo.diskConfig(getDiskConfig());
+        }
       }
    }
 
@@ -80,6 +84,7 @@ public class NovaTemplateOptions extends TemplateOptions 
implements Cloneable {
    protected boolean generateKeyPair = false;
    protected String keyPairName;
    protected byte[] userData;
+   protected String diskConfig;
 
    @Override
    public boolean equals(Object o) {
@@ -92,12 +97,13 @@ public class NovaTemplateOptions extends TemplateOptions 
implements Cloneable {
             && equal(this.securityGroupNames, that.securityGroupNames)
             && equal(this.generateKeyPair, that.generateKeyPair)
             && equal(this.keyPairName, that.keyPairName)
-            && Arrays.equals(this.userData, that.userData);
+            && Arrays.equals(this.userData, that.userData)
+            && equal(this.diskConfig, that.diskConfig);
    }
 
    @Override
    public int hashCode() {
-      return Objects.hashCode(super.hashCode(), autoAssignFloatingIp, 
securityGroupNames, generateKeyPair, keyPairName, userData);
+      return Objects.hashCode(super.hashCode(), autoAssignFloatingIp, 
securityGroupNames, generateKeyPair, keyPairName, userData, diskConfig);
    }
 
    @Override
@@ -111,6 +117,7 @@ public class NovaTemplateOptions extends TemplateOptions 
implements Cloneable {
          toString.add("generateKeyPair", generateKeyPair);
       toString.add("keyPairName", keyPairName);
       toString.add("userData", userData);
+      toString.add("diskConfig", diskConfig);
       return toString;
    }
 
@@ -204,6 +211,13 @@ public class NovaTemplateOptions extends TemplateOptions 
implements Cloneable {
        return userData;
     }
 
+   /**
+    * @see CreateServerOptions#getDiskConfig()
+    */
+   public String getDiskConfig() {
+       return diskConfig;
+    }
+
    public static class Builder {
 
       /**
@@ -340,7 +354,14 @@ public class NovaTemplateOptions extends TemplateOptions 
implements Cloneable {
          NovaTemplateOptions options = new NovaTemplateOptions();
          return NovaTemplateOptions.class.cast(options.userData(userData));
       }
-
+      
+      /**
+       * @see 
org.jclouds.openstack.nova.v2_0.options.CreateServerOptions#getDiskConfig()
+       */
+      public static NovaTemplateOptions diskConfig(String diskConfig) {
+         NovaTemplateOptions options = new NovaTemplateOptions();
+         return NovaTemplateOptions.class.cast(options.diskConfig(diskConfig));
+      }
    }
 
    // methods that only facilitate returning the correct object type
@@ -484,4 +505,11 @@ public class NovaTemplateOptions extends TemplateOptions 
implements Cloneable {
        return this;
    }
 
+   /**
+    * @see CreateServerOptions#getDiskConfig()
+    */
+   public NovaTemplateOptions diskConfig(String diskConfig) {
+      this.diskConfig = diskConfig;
+      return this;
+  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/bf723a86/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/domain/Server.java
----------------------------------------------------------------------
diff --git 
a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/domain/Server.java
 
b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/domain/Server.java
index a02cc04..026a6d4 100644
--- 
a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/domain/Server.java
+++ 
b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/domain/Server.java
@@ -46,8 +46,8 @@ import com.google.common.collect.Multimap;
  *      />
  */
 public class Server extends Resource {
-   public final static String DISK_CONFIG_MANUAL = "MANUAL";
-   public final static String DISK_CONFIG_AUTO = "AUTO";
+   public static final String DISK_CONFIG_MANUAL = "MANUAL";
+   public static final String DISK_CONFIG_AUTO = "AUTO";
 
    /**
     * Servers contain a status attribute that can be used as an indication of 
the current server

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/bf723a86/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/compute/NovaComputeServiceAdapterExpectTest.java
----------------------------------------------------------------------
diff --git 
a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/compute/NovaComputeServiceAdapterExpectTest.java
 
b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/compute/NovaComputeServiceAdapterExpectTest.java
index eca8f3d..94de755 100644
--- 
a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/compute/NovaComputeServiceAdapterExpectTest.java
+++ 
b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/compute/NovaComputeServiceAdapterExpectTest.java
@@ -32,6 +32,7 @@ import org.jclouds.http.HttpRequest;
 import org.jclouds.http.HttpResponse;
 import org.jclouds.openstack.nova.v2_0.compute.options.NovaTemplateOptions;
 import org.jclouds.openstack.nova.v2_0.domain.KeyPair;
+import org.jclouds.openstack.nova.v2_0.domain.Server;
 import org.jclouds.openstack.nova.v2_0.domain.zonescoped.ServerInZone;
 import org.jclouds.openstack.nova.v2_0.domain.zonescoped.ZoneAndName;
 import 
org.jclouds.openstack.nova.v2_0.internal.BaseNovaComputeServiceContextExpectTest;
@@ -60,6 +61,41 @@ public class NovaComputeServiceAdapterExpectTest extends 
BaseNovaComputeServiceC
    HttpResponse serverDetailResponse = HttpResponse.builder().statusCode(200)
          .payload(payloadFromResource("/server_details.json")).build();
 
+   public void testCreateNodeWithGroupEncodedIntoNameWithDiskConfig() throws 
Exception {
+
+      HttpRequest createServer = HttpRequest
+         .builder()
+         .method("POST")
+         
.endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/servers";)
+         .addHeader("Accept", "application/json")
+         .addHeader("X-Auth-Token", authToken)
+         .payload(payloadFromStringWithContentType(
+                  
"{\"server\":{\"name\":\"test-e92\",\"imageRef\":\"1241\",\"flavorRef\":\"100\",\"OS-DCF:diskConfig\":\"AUTO\"}}","application/json"))
+         .build();
+
+      HttpResponse createServerResponse = 
HttpResponse.builder().statusCode(202).message("HTTP/1.1 202 Accepted")
+         
.payload(payloadFromResourceWithContentType("/new_server_disk_config_auto.json","application/json;
 charset=UTF-8")).build();
+
+      Map<HttpRequest, HttpResponse> requestResponseMap = 
ImmutableMap.<HttpRequest, HttpResponse> builder()
+               .put(keystoneAuthWithUsernameAndPasswordAndTenantName, 
responseWithKeystoneAccess)
+               .put(extensionsOfNovaRequest, extensionsOfNovaResponse)
+               .put(listDetail, listDetailResponse)
+               .put(listFlavorsDetail, listFlavorsDetailResponse)
+               .put(createServer, createServerResponse)
+               .put(serverDetail, serverDetailResponse).build();
+
+      Injector forDiskConfig = requestsSendResponses(requestResponseMap);
+
+      Template template = 
forDiskConfig.getInstance(TemplateBuilder.class).build();
+      
template.getOptions().as(NovaTemplateOptions.class).diskConfig(Server.DISK_CONFIG_AUTO);
+      
+      NovaComputeServiceAdapter adapter = 
forDiskConfig.getInstance(NovaComputeServiceAdapter.class);
+
+      NodeAndInitialCredentials<ServerInZone> server = 
adapter.createNodeWithGroupEncodedIntoName("test", "test-e92", template);
+      assertNotNull(server);
+      assertEquals(server.getNode().getServer().getDiskConfig().orNull(), 
Server.DISK_CONFIG_AUTO);
+   }
+
    public void 
testCreateNodeWithGroupEncodedIntoNameWhenSecurityGroupsArePresent() throws 
Exception {
 
       HttpRequest createServer = HttpRequest

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/bf723a86/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/compute/options/NovaTemplateOptionsTest.java
----------------------------------------------------------------------
diff --git 
a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/compute/options/NovaTemplateOptionsTest.java
 
b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/compute/options/NovaTemplateOptionsTest.java
index 2177690..106da5b 100644
--- 
a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/compute/options/NovaTemplateOptionsTest.java
+++ 
b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/compute/options/NovaTemplateOptionsTest.java
@@ -28,6 +28,7 @@ import static org.testng.Assert.assertEquals;
 import java.io.IOException;
 
 import org.jclouds.compute.options.TemplateOptions;
+import org.jclouds.openstack.nova.v2_0.domain.Server;
 import org.testng.annotations.Test;
 
 import com.google.common.base.Optional;
@@ -195,6 +196,14 @@ public class NovaTemplateOptionsTest {
        options.userData("test".getBytes());
        assertEquals(new String(options.getUserData()), "test");
    }
+
+   @Test
+   public void testDiskConfig() {
+       NovaTemplateOptions options = new NovaTemplateOptions();
+       options.diskConfig(Server.DISK_CONFIG_AUTO);
+       assertEquals(options.getDiskConfig(), Server.DISK_CONFIG_AUTO);
+   }
+   
    @Test(expectedExceptions = IllegalArgumentException.class)
    public void testblockOnPortBadFormat() {
       NovaTemplateOptions options = new NovaTemplateOptions();

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/bf723a86/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/parse/ParseServerTest.java
----------------------------------------------------------------------
diff --git 
a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/parse/ParseServerTest.java
 
b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/parse/ParseServerTest.java
index d7119ef..db8e387 100644
--- 
a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/parse/ParseServerTest.java
+++ 
b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/parse/ParseServerTest.java
@@ -66,6 +66,7 @@ public class ParseServerTest extends 
BaseItemParserTest<Server> {
             .accessIPv4("67.23.10.132")
             .accessIPv6("::babe:67.23.10.132")
             .status(Status.BUILD)
+            .diskConfig(Server.DISK_CONFIG_AUTO)
             .image(
                   Resource
                         .builder()

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/bf723a86/apis/openstack-nova/src/test/resources/server_details.json
----------------------------------------------------------------------
diff --git a/apis/openstack-nova/src/test/resources/server_details.json 
b/apis/openstack-nova/src/test/resources/server_details.json
index 6c286b6..f548785 100644
--- a/apis/openstack-nova/src/test/resources/server_details.json
+++ b/apis/openstack-nova/src/test/resources/server_details.json
@@ -11,6 +11,7 @@
         "accessIPv6" : "::babe:67.23.10.132",
         "status": "BUILD(scheduling)",
         "progress": 60,
+        "OS-DCF:diskConfig": "AUTO",        
         "image" : {
             "id": "52415800-8b69-11e0-9b19-734f6f006e54",
             "links": [

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/bf723a86/providers/rackspace-cloudservers-uk/src/test/java/org/jclouds/rackspace/cloudservers/uk/compute/CloudServersUKTemplateBuilderLiveTest.java
----------------------------------------------------------------------
diff --git 
a/providers/rackspace-cloudservers-uk/src/test/java/org/jclouds/rackspace/cloudservers/uk/compute/CloudServersUKTemplateBuilderLiveTest.java
 
b/providers/rackspace-cloudservers-uk/src/test/java/org/jclouds/rackspace/cloudservers/uk/compute/CloudServersUKTemplateBuilderLiveTest.java
index 143b693..1b974ca 100644
--- 
a/providers/rackspace-cloudservers-uk/src/test/java/org/jclouds/rackspace/cloudservers/uk/compute/CloudServersUKTemplateBuilderLiveTest.java
+++ 
b/providers/rackspace-cloudservers-uk/src/test/java/org/jclouds/rackspace/cloudservers/uk/compute/CloudServersUKTemplateBuilderLiveTest.java
@@ -18,6 +18,7 @@ package org.jclouds.rackspace.cloudservers.uk.compute;
 
 import static org.jclouds.compute.util.ComputeServiceUtils.getCores;
 import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNull;
 
 import java.util.Set;
 
@@ -81,6 +82,7 @@ public class CloudServersUKTemplateBuilderLiveTest extends 
BaseTemplateBuilderLi
       assertEquals(defaultTemplate.getImage().getLocation().getId(), "LON");
       assertEquals(defaultTemplate.getHardware().getLocation().getId(), "LON");
       
assertEquals(defaultTemplate.getOptions().as(NovaTemplateOptions.class).shouldAutoAssignFloatingIp(),
 false);
+      
assertNull(defaultTemplate.getOptions().as(NovaTemplateOptions.class).getDiskConfig());
       assertEquals(getCores(defaultTemplate.getHardware()), 1.0d);
    }
 

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/bf723a86/providers/rackspace-cloudservers-us/src/test/java/org/jclouds/rackspace/cloudservers/us/compute/CloudServersUSTemplateBuilderLiveTest.java
----------------------------------------------------------------------
diff --git 
a/providers/rackspace-cloudservers-us/src/test/java/org/jclouds/rackspace/cloudservers/us/compute/CloudServersUSTemplateBuilderLiveTest.java
 
b/providers/rackspace-cloudservers-us/src/test/java/org/jclouds/rackspace/cloudservers/us/compute/CloudServersUSTemplateBuilderLiveTest.java
index d345d38..566cebb 100644
--- 
a/providers/rackspace-cloudservers-us/src/test/java/org/jclouds/rackspace/cloudservers/us/compute/CloudServersUSTemplateBuilderLiveTest.java
+++ 
b/providers/rackspace-cloudservers-us/src/test/java/org/jclouds/rackspace/cloudservers/us/compute/CloudServersUSTemplateBuilderLiveTest.java
@@ -18,6 +18,7 @@ package org.jclouds.rackspace.cloudservers.us.compute;
 
 import static org.jclouds.compute.util.ComputeServiceUtils.getCores;
 import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNull;
 
 import java.util.Set;
 
@@ -81,6 +82,7 @@ public class CloudServersUSTemplateBuilderLiveTest extends 
BaseTemplateBuilderLi
       assertEquals(defaultTemplate.getImage().getLocation().getId(), "ORD");
       assertEquals(defaultTemplate.getHardware().getLocation().getId(), "ORD");
       
assertEquals(defaultTemplate.getOptions().as(NovaTemplateOptions.class).shouldAutoAssignFloatingIp(),
 false);
+      
assertNull(defaultTemplate.getOptions().as(NovaTemplateOptions.class).getDiskConfig());
       assertEquals(getCores(defaultTemplate.getHardware()), 1.0d);
    }
 

Reply via email to