You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by an...@apache.org on 2014/08/12 17:23:08 UTC

git commit: JCLOUDS-662: Support multiple disks with the same size using SoftLayerTemplateOptions

Repository: jclouds
Updated Branches:
  refs/heads/master 204a6c7f3 -> 8743e947b


JCLOUDS-662: Support multiple disks with the same size using SoftLayerTemplateOptions


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

Branch: refs/heads/master
Commit: 8743e947befe44cf846183e8024728a39f1a97b1
Parents: 204a6c7
Author: Andrea Turli <an...@gmail.com>
Authored: Tue Aug 12 14:45:35 2014 +0200
Committer: Andrew Phillips <an...@apache.org>
Committed: Tue Aug 12 11:22:10 2014 -0400

----------------------------------------------------------------------
 .../softlayer/binders/VirtualGuestToJson.java   | 15 ++--
 .../SoftLayerComputeServiceAdapter.java         | 84 ++++++++++----------
 .../jclouds/softlayer/domain/VirtualGuest.java  | 16 ++--
 .../SoftLayerComputeServiceContextLiveTest.java | 28 +++----
 4 files changed, 72 insertions(+), 71 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/8743e947/providers/softlayer/src/main/java/org/jclouds/softlayer/binders/VirtualGuestToJson.java
----------------------------------------------------------------------
diff --git a/providers/softlayer/src/main/java/org/jclouds/softlayer/binders/VirtualGuestToJson.java b/providers/softlayer/src/main/java/org/jclouds/softlayer/binders/VirtualGuestToJson.java
index a9025e2..ddb9fdc 100644
--- a/providers/softlayer/src/main/java/org/jclouds/softlayer/binders/VirtualGuestToJson.java
+++ b/providers/softlayer/src/main/java/org/jclouds/softlayer/binders/VirtualGuestToJson.java
@@ -19,7 +19,7 @@ package org.jclouds.softlayer.binders;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.ImmutableSortedSet;
+import com.google.common.collect.Lists;
 import org.jclouds.http.HttpRequest;
 import org.jclouds.json.Json;
 import org.jclouds.rest.Binder;
@@ -28,7 +28,9 @@ import org.jclouds.softlayer.domain.VirtualGuestBlockDevice;
 import org.jclouds.softlayer.domain.VirtualGuestNetworkComponent;
 
 import javax.inject.Inject;
+import java.util.Collections;
 import java.util.Comparator;
+import java.util.List;
 import java.util.Set;
 
 import static com.google.common.base.Preconditions.checkArgument;
@@ -87,15 +89,16 @@ public class VirtualGuestToJson implements Binder {
       return json.toJson(ImmutableMap.of("parameters", ImmutableList.of(templateObject)));
    }
 
-   private Set<BlockDevice> getBlockDevices(VirtualGuest virtualGuest) {
+   private List<BlockDevice> getBlockDevices(VirtualGuest virtualGuest) {
       if (virtualGuest.getVirtualGuestBlockDevices() == null) {
          return null;
       }
-      ImmutableSortedSet.Builder<BlockDevice> blockDevices = ImmutableSortedSet.orderedBy(new BlockDevicesComparator());
+      List<BlockDevice> blockDevices = Lists.newArrayList();
       for (VirtualGuestBlockDevice blockDevice : virtualGuest.getVirtualGuestBlockDevices()) {
          blockDevices.add(new BlockDevice(blockDevice.getDevice(), blockDevice.getVirtualDiskImage().getCapacity()));
       }
-      return blockDevices.build();
+      Collections.sort(blockDevices, new BlockDevicesComparator());
+      return ImmutableList.copyOf(blockDevices);
    }
 
    private Set<NetworkComponent> getNetworkComponents(VirtualGuest virtualGuest) {
@@ -120,12 +123,12 @@ public class VirtualGuestToJson implements Binder {
       private final boolean localDiskFlag;
       private final Datacenter datacenter;
       private final Set<NetworkComponent> networkComponents;
-      private final Set<BlockDevice> blockDevices;
+      private final List<BlockDevice> blockDevices;
 
       private TemplateObject(String hostname, String domain, int startCpus, int maxMemory, boolean hourlyBillingFlag,
                          String operatingSystemReferenceCode, BlockDeviceTemplateGroup blockDeviceTemplateGroup,
                          boolean localDiskFlag, Datacenter datacenter, Set<NetworkComponent> networkComponents,
-                         Set<BlockDevice> blockDevices) {
+                         List<BlockDevice> blockDevices) {
          this.hostname = hostname;
          this.domain = domain;
          this.startCpus = startCpus;

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8743e947/providers/softlayer/src/main/java/org/jclouds/softlayer/compute/strategy/SoftLayerComputeServiceAdapter.java
----------------------------------------------------------------------
diff --git a/providers/softlayer/src/main/java/org/jclouds/softlayer/compute/strategy/SoftLayerComputeServiceAdapter.java b/providers/softlayer/src/main/java/org/jclouds/softlayer/compute/strategy/SoftLayerComputeServiceAdapter.java
index 976e8bb..7ef331b 100644
--- a/providers/softlayer/src/main/java/org/jclouds/softlayer/compute/strategy/SoftLayerComputeServiceAdapter.java
+++ b/providers/softlayer/src/main/java/org/jclouds/softlayer/compute/strategy/SoftLayerComputeServiceAdapter.java
@@ -16,18 +16,33 @@
  */
 package org.jclouds.softlayer.compute.strategy;
 
-import com.google.common.base.Function;
-import com.google.common.base.Optional;
-import com.google.common.base.Predicate;
-import com.google.common.base.Predicates;
-import com.google.common.base.Supplier;
-import com.google.common.collect.ComparisonChain;
-import com.google.common.collect.FluentIterable;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet.Builder;
-import com.google.common.collect.ImmutableSortedSet;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+import static com.google.common.collect.Iterables.contains;
+import static com.google.common.collect.Iterables.filter;
+import static com.google.common.collect.Iterables.find;
+import static com.google.common.collect.Iterables.get;
+import static com.google.common.collect.Iterables.tryFind;
+import static java.lang.Math.round;
+import static java.lang.String.format;
+import static org.jclouds.compute.domain.Volume.Type;
+import static org.jclouds.compute.util.ComputeServiceUtils.getCores;
+import static org.jclouds.compute.util.ComputeServiceUtils.getSpace;
+import static org.jclouds.softlayer.reference.SoftLayerConstants.PROPERTY_SOFTLAYER_INCLUDE_PUBLIC_IMAGES;
+import static org.jclouds.softlayer.reference.SoftLayerConstants.PROPERTY_SOFTLAYER_VIRTUALGUEST_ACTIVE_TRANSACTIONS_DELAY;
+import static org.jclouds.softlayer.reference.SoftLayerConstants.PROPERTY_SOFTLAYER_VIRTUALGUEST_LOGIN_DETAILS_DELAY;
+import static org.jclouds.util.Predicates2.retry;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.annotation.Resource;
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.jclouds.collect.Memoized;
 import org.jclouds.compute.ComputeServiceAdapter;
 import org.jclouds.compute.domain.Hardware;
@@ -55,32 +70,19 @@ import org.jclouds.softlayer.domain.VirtualGuestBlockDeviceTemplate;
 import org.jclouds.softlayer.domain.VirtualGuestBlockDeviceTemplateGroup;
 import org.jclouds.softlayer.domain.VirtualGuestNetworkComponent;
 
-import javax.annotation.Resource;
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.inject.Singleton;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Preconditions.checkState;
-import static com.google.common.collect.Iterables.contains;
-import static com.google.common.collect.Iterables.filter;
-import static com.google.common.collect.Iterables.find;
-import static com.google.common.collect.Iterables.get;
-import static com.google.common.collect.Iterables.tryFind;
-import static java.lang.Math.round;
-import static java.lang.String.format;
-import static org.jclouds.compute.domain.Volume.Type;
-import static org.jclouds.compute.util.ComputeServiceUtils.getCores;
-import static org.jclouds.compute.util.ComputeServiceUtils.getSpace;
-import static org.jclouds.softlayer.reference.SoftLayerConstants.PROPERTY_SOFTLAYER_INCLUDE_PUBLIC_IMAGES;
-import static org.jclouds.softlayer.reference.SoftLayerConstants.PROPERTY_SOFTLAYER_VIRTUALGUEST_ACTIVE_TRANSACTIONS_DELAY;
-import static org.jclouds.softlayer.reference.SoftLayerConstants.PROPERTY_SOFTLAYER_VIRTUALGUEST_LOGIN_DETAILS_DELAY;
-import static org.jclouds.util.Predicates2.retry;
+import com.google.common.base.Function;
+import com.google.common.base.Optional;
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+import com.google.common.base.Supplier;
+import com.google.common.collect.ComparisonChain;
+import com.google.common.collect.FluentIterable;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet.Builder;
+import com.google.common.collect.ImmutableSortedSet;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
 
 /**
  * defines the connection between the {@link SoftLayerApi} implementation and
@@ -160,7 +162,7 @@ public class SoftLayerComputeServiceAdapter implements
       }
       // set multi-disks
       if (templateOptions.getBlockDevices().isPresent()) {
-         Set<VirtualGuestBlockDevice> blockDevices = getBlockDevices(templateOptions.getBlockDevices().get(), diskType);
+         List<VirtualGuestBlockDevice> blockDevices = getBlockDevices(templateOptions.getBlockDevices().get(), diskType);
          virtualGuestBuilder.blockDevices(blockDevices);
          virtualGuestBuilder.localDiskFlag(isLocalDisk(diskType));
       }
@@ -199,8 +201,8 @@ public class SoftLayerComputeServiceAdapter implements
     * @param diskType disks can be LOCAL or SAN
     * @return
     */
-   private Set<VirtualGuestBlockDevice> getBlockDevices(List<Integer> blockDeviceCapacities, String diskType) {
-      Set<VirtualGuestBlockDevice> blockDevices = Sets.newHashSet();
+   private List<VirtualGuestBlockDevice> getBlockDevices(List<Integer> blockDeviceCapacities, String diskType) {
+      List<VirtualGuestBlockDevice> blockDevices = Lists.newArrayList();
       int devicePosition = 0;
       for (int i = 0; i < blockDeviceCapacities.size(); i++) {
          if (i > 0) { devicePosition = i + 1; }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8743e947/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/VirtualGuest.java
----------------------------------------------------------------------
diff --git a/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/VirtualGuest.java b/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/VirtualGuest.java
index 39b99c1..e01b5a3 100644
--- a/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/VirtualGuest.java
+++ b/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/VirtualGuest.java
@@ -19,6 +19,7 @@ package org.jclouds.softlayer.domain;
 import static com.google.common.base.Preconditions.checkNotNull;
 import java.beans.ConstructorProperties;
 import java.util.Date;
+import java.util.List;
 import java.util.Set;
 
 import org.jclouds.javax.annotation.Nullable;
@@ -26,6 +27,7 @@ import org.jclouds.javax.annotation.Nullable;
 import com.google.common.base.CaseFormat;
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Objects;
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 
 /**
@@ -126,7 +128,7 @@ public class VirtualGuest {
       protected PowerState powerState;
       protected SoftwareLicense softwareLicense;
       protected int activeTransactionCount;
-      protected Set<VirtualGuestBlockDevice> blockDevices;
+      protected List<VirtualGuestBlockDevice> blockDevices;
       protected boolean localDiskFlag;
       protected VirtualGuestBlockDeviceTemplateGroup blockDeviceTemplateGroup;
       protected Set<VirtualGuestNetworkComponent> networkComponents;
@@ -351,13 +353,13 @@ public class VirtualGuest {
       /**
        * @see VirtualGuest#getVirtualGuestBlockDevices()
        */
-      public T blockDevices(Set<VirtualGuestBlockDevice> blockDevices) {
-         this.blockDevices = ImmutableSet.copyOf(checkNotNull(blockDevices, "blockDevices"));
+      public T blockDevices(List<VirtualGuestBlockDevice> blockDevices) {
+         this.blockDevices = ImmutableList.copyOf(checkNotNull(blockDevices, "blockDevices"));
          return self();
       }
 
       public T blockDevices(VirtualGuestBlockDevice... in) {
-         return blockDevices(ImmutableSet.copyOf(checkNotNull(in, "blockDevices")));
+         return blockDevices(ImmutableList.copyOf(checkNotNull(in, "blockDevices")));
       }
 
       public T localDiskFlag(boolean localDiskFlag) {
@@ -466,7 +468,7 @@ public class VirtualGuest {
    private final PowerState powerState;
    private final SoftwareLicense softwareLicense;
    private final int activeTransactionCount;
-   private final Set<VirtualGuestBlockDevice> blockDevices;
+   private final List<VirtualGuestBlockDevice> blockDevices;
    private final boolean localDiskFlag;
    private final VirtualGuestBlockDeviceTemplateGroup blockDeviceTemplateGroup;
    private final Set<VirtualGuestNetworkComponent> networkComponents;
@@ -486,7 +488,7 @@ public class VirtualGuest {
                           @Nullable String primaryBackendIpAddress, @Nullable String primaryIpAddress, @Nullable BillingItem billingItem,
                           @Nullable OperatingSystem operatingSystem, @Nullable String operatingSystemReferenceCode,
                           @Nullable Datacenter datacenter, @Nullable PowerState powerState, @Nullable SoftwareLicense softwareLicense,
-                          int activeTransactionCount, @Nullable Set<VirtualGuestBlockDevice> blockDevices,
+                          int activeTransactionCount, @Nullable List<VirtualGuestBlockDevice> blockDevices,
                           boolean localDiskFlag, @Nullable VirtualGuestBlockDeviceTemplateGroup blockDeviceTemplateGroup,
                           @Nullable Set<VirtualGuestNetworkComponent> networkComponents,
                           @Nullable Set<TagReference> tagReferences ) {
@@ -727,7 +729,7 @@ public class VirtualGuest {
    }
 
    @Nullable
-   public Set<VirtualGuestBlockDevice> getVirtualGuestBlockDevices() {
+   public List<VirtualGuestBlockDevice> getVirtualGuestBlockDevices() {
       return blockDevices;
    }
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8743e947/providers/softlayer/src/test/java/org/jclouds/softlayer/compute/SoftLayerComputeServiceContextLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/softlayer/src/test/java/org/jclouds/softlayer/compute/SoftLayerComputeServiceContextLiveTest.java b/providers/softlayer/src/test/java/org/jclouds/softlayer/compute/SoftLayerComputeServiceContextLiveTest.java
index 6c6fb51..854d01a 100644
--- a/providers/softlayer/src/test/java/org/jclouds/softlayer/compute/SoftLayerComputeServiceContextLiveTest.java
+++ b/providers/softlayer/src/test/java/org/jclouds/softlayer/compute/SoftLayerComputeServiceContextLiveTest.java
@@ -16,8 +16,12 @@
  */
 package org.jclouds.softlayer.compute;
 
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
+import static org.testng.Assert.assertEquals;
+import java.util.Set;
+
+import javax.annotation.Resource;
+import javax.inject.Named;
+
 import org.jclouds.ContextBuilder;
 import org.jclouds.compute.ComputeServiceContext;
 import org.jclouds.compute.RunNodesException;
@@ -37,11 +41,8 @@ import org.jclouds.ssh.SshClient;
 import org.jclouds.sshj.config.SshjSshClientModule;
 import org.testng.annotations.Test;
 
-import javax.annotation.Resource;
-import javax.inject.Named;
-import java.util.Set;
-
-import static org.testng.Assert.assertEquals;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
 
 @Test(groups = "live", testName = "SoftLayerComputeServiceContextLiveTest")
 public class SoftLayerComputeServiceContextLiveTest extends BaseComputeServiceContextLiveTest {
@@ -65,23 +66,16 @@ public class SoftLayerComputeServiceContextLiveTest extends BaseComputeServiceCo
               .build(ComputeServiceContext.class);
 
       TemplateBuilder templateBuilder = context.getComputeService().templateBuilder();
-      //templateBuilder.minDisk(15d);
-      //templateBuilder.hardwareId("cpu=1,memory=4096,disk=100,type=SAN");
-      //templateBuilder.hardwareId("cpu=1,memory=4096,disk=100,type=LOCAL");
       templateBuilder.imageId("CENTOS_6_64");
-      //templateBuilder.osFamily(OsFamily.CENTOS);
-      //templateBuilder.imageId("7bcd78dc-eb11-4e1b-8d93-111c62ed5fd1");
-      //templateBuilder.locationId("dal01");
-      //templateBuilder.minRam(8192);
+      templateBuilder.locationId("ams01");
 
       Template template = templateBuilder.build();
       // test passing custom options
       SoftLayerTemplateOptions options = template.getOptions().as(SoftLayerTemplateOptions.class);
       options.domainName("live.org");
-      //options.diskType("SAN");
-      //options.portSpeed(10);
       // multi-disk option
-      options.blockDevices(ImmutableSet.of(100));
+      options.blockDevices(ImmutableList.of(25, 400, 400));
+      options.diskType("SAN");
       //tags
       options.tags(ImmutableList.of("jclouds"));