Repository: jclouds
Updated Branches:
  refs/heads/master 9b59d099d -> ec03b710a


[JCLOUDS-1360] add support for block device mappings to Nova


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

Branch: refs/heads/master
Commit: ec03b710a73beaef6fb67b2003ead421ed53b3cb
Parents: 9b59d09
Author: Andrea Turli <[email protected]>
Authored: Sat Nov 18 09:08:54 2017 +0100
Committer: Andrea Turli <[email protected]>
Committed: Wed Nov 22 11:29:49 2017 +0100

----------------------------------------------------------------------
 .../v2_0/compute/NovaComputeServiceAdapter.java |  3 ++-
 .../compute/options/NovaTemplateOptions.java    | 28 ++++++++++++++++++--
 2 files changed, 28 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/ec03b710/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 38e4232..02cfa2b 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
@@ -131,7 +131,8 @@ public class NovaComputeServiceAdapter implements
       if (templateOptions.getKeyPairName() != null) {
          options.keyPairName(templateOptions.getKeyPairName());
       }
-      
+      if (!templateOptions.getBlockDeviceMappings().isEmpty()) 
options.blockDeviceMappings(templateOptions.getBlockDeviceMappings());
+
       logger.debug(">> creating new server region(%s) name(%s) image(%s) 
flavor(%s) options(%s)", regionId, name, imageId, flavorId, options);
       final ServerCreated lightweightServer = 
novaApi.getServerApi(regionId).create(name, imageId, flavorId, options);
       if (!serverRunningPredicate.apply(RegionAndId.fromRegionAndId(regionId, 
lightweightServer.getId()))) {

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ec03b710/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 51b6bb2..992302e 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.domain.BlockDeviceMapping;
 import org.jclouds.openstack.nova.v2_0.domain.Network;
 import org.jclouds.openstack.nova.v2_0.options.CreateServerOptions;
 import org.jclouds.scriptbuilder.domain.Statement;
@@ -91,6 +92,8 @@ public class NovaTemplateOptions extends TemplateOptions 
implements Cloneable {
    protected boolean configDrive;
    protected Set<Network> novaNetworks;
    protected String availabilityZone;
+   // TODO move up to TemplateOptions as SoftLayer also have something similar?
+   protected Set<BlockDeviceMapping> blockDeviceMappings = ImmutableSet.of();
 
    @Override
    public boolean equals(Object o) {
@@ -107,13 +110,14 @@ public class NovaTemplateOptions extends TemplateOptions 
implements Cloneable {
             && equal(this.diskConfig, that.diskConfig)
             && equal(this.configDrive, that.configDrive)
             && equal(this.novaNetworks, that.novaNetworks)
-            && equal(this.availabilityZone, that.availabilityZone);
+            && equal(this.availabilityZone, that.availabilityZone)
+            && equal(this.blockDeviceMappings, that.blockDeviceMappings);
    }
 
    @Override
    public int hashCode() {
       return Objects.hashCode(super.hashCode(), autoAssignFloatingIp, 
floatingIpPoolNames, generateKeyPair, keyPairName, 
-              Arrays.hashCode(userData), diskConfig, configDrive, 
novaNetworks, availabilityZone);
+              Arrays.hashCode(userData), diskConfig, configDrive, 
novaNetworks, availabilityZone, blockDeviceMappings);
    }
 
    @Override
@@ -131,6 +135,7 @@ public class NovaTemplateOptions extends TemplateOptions 
implements Cloneable {
       toString.add("configDrive", configDrive);
       toString.add("novaNetworks", novaNetworks);
       toString.add("availabilityZone", availabilityZone);
+      toString.add("blockDeviceMappings", blockDeviceMappings);
       return toString;
    }
 
@@ -196,6 +201,21 @@ public class NovaTemplateOptions extends TemplateOptions 
implements Cloneable {
    }
 
    /**
+    * @see #getBlockDeviceMappings()
+    */
+   public NovaTemplateOptions blockDeviceMappings(BlockDeviceMapping... 
blockDeviceMappings) {
+      return 
blockDeviceMappings(ImmutableSet.copyOf(checkNotNull(blockDeviceMappings, 
"blockDeviceMappings")));
+   }
+
+   /**
+    * @see #getBlockDeviceMappings()
+    */
+   public NovaTemplateOptions blockDeviceMappings(Iterable<BlockDeviceMapping> 
blockDeviceMappings) {
+      this.blockDeviceMappings = ImmutableSet.copyOf(blockDeviceMappings);
+      return this;
+   }
+
+   /**
     * The floating IP pool name(s) to use when allocating a FloatingIP. 
Applicable
     * only if #shouldAutoAssignFloatingIp() returns true. If not set will 
attempt to
     * use whatever FloatingIP(s) can be found regardless of which pool they 
originated
@@ -259,6 +279,10 @@ public class NovaTemplateOptions extends TemplateOptions 
implements Cloneable {
       return availabilityZone;
    }
 
+   public Set<BlockDeviceMapping> getBlockDeviceMappings() {
+      return blockDeviceMappings;
+   }
+
    public static class Builder {
 
       /**

Reply via email to