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 { /**
