You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by na...@apache.org on 2015/05/13 23:02:02 UTC

[3/3] jclouds git commit: Skip malformed image entries returned by Softlayer

Skip malformed image entries returned by Softlayer

Softlayer will occasionally return an incomplete object in the getCreateObjectOptions call, making it impossible to spin up machines - ignore the incomplete entries which are usually not even relevant.


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

Branch: refs/heads/1.9.x
Commit: 6c9915eab984d81cc6fc8d9cc51bbf2add0db8de
Parents: caae63b
Author: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Authored: Mon May 11 18:33:57 2015 +0300
Committer: Ignasi Barrera <na...@apache.org>
Committed: Wed May 13 22:44:24 2015 +0200

----------------------------------------------------------------------
 .../ContainerVirtualGuestConfiguration.java     | 20 ++++--
 .../ContainerVirtualGuestConfigurationTest.java | 75 ++++++++++++++++++++
 2 files changed, 88 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/6c9915ea/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/ContainerVirtualGuestConfiguration.java
----------------------------------------------------------------------
diff --git a/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/ContainerVirtualGuestConfiguration.java b/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/ContainerVirtualGuestConfiguration.java
index 6834d31..09bb0de 100644
--- a/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/ContainerVirtualGuestConfiguration.java
+++ b/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/ContainerVirtualGuestConfiguration.java
@@ -19,6 +19,7 @@ package org.jclouds.softlayer.domain;
 import com.google.common.base.Function;
 import com.google.common.base.Objects;
 import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
 import com.google.common.collect.FluentIterable;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
@@ -202,16 +203,21 @@ public class ContainerVirtualGuestConfiguration {
    }
 
    public Set<OperatingSystem> getVirtualGuestOperatingSystems() {
-      return Sets.newHashSet(Iterables.transform(operatingSystems,
-              new Function<ContainerVirtualGuestConfigurationOption, OperatingSystem>() {
+      return Sets.newHashSet(FluentIterable.from(operatingSystems)
+               .transform(new Function<ContainerVirtualGuestConfigurationOption, OperatingSystem>() {
          @Override
          public OperatingSystem apply(ContainerVirtualGuestConfigurationOption input) {
-            return OperatingSystem.builder()
-                    .id(input.getTemplate().getOperatingSystemReferenceCode())
-                    .operatingSystemReferenceCode(input.getTemplate().getOperatingSystemReferenceCode())
-                    .build();
+            String operatingSystemReferenceCode = input.getTemplate().getOperatingSystemReferenceCode();
+            if (operatingSystemReferenceCode == null) {
+               return null;
+            } else {
+               return OperatingSystem.builder()
+                       .id(operatingSystemReferenceCode)
+                       .operatingSystemReferenceCode(operatingSystemReferenceCode)
+                       .build();
+            }
          }
-      }));
+      }).filter(Predicates.notNull()));
    }
 
    public Set<VirtualGuestBlockDevice> getVirtualGuestBlockDevices() {

http://git-wip-us.apache.org/repos/asf/jclouds/blob/6c9915ea/providers/softlayer/src/test/java/org/jclouds/softlayer/domain/ContainerVirtualGuestConfigurationTest.java
----------------------------------------------------------------------
diff --git a/providers/softlayer/src/test/java/org/jclouds/softlayer/domain/ContainerVirtualGuestConfigurationTest.java b/providers/softlayer/src/test/java/org/jclouds/softlayer/domain/ContainerVirtualGuestConfigurationTest.java
new file mode 100644
index 0000000..5944465
--- /dev/null
+++ b/providers/softlayer/src/test/java/org/jclouds/softlayer/domain/ContainerVirtualGuestConfigurationTest.java
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.softlayer.domain;
+
+import static org.testng.Assert.assertEquals;
+
+import java.util.Set;
+
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterables;
+
+@Test(groups = "unit")
+public class ContainerVirtualGuestConfigurationTest {
+   @Test
+   public void testGetVirtualGuestOperatingSystemsWithMissingReferenceCode() {
+      // Malformed response leading to failure:
+      // {
+      //    "itemPrice": {
+      //        "hourlyRecurringFee": ".131",
+      //        "item": {
+      //            "description": "Windows Server 2012 Datacenter Edition (64bit)"
+      //        },
+      //        "recurringFee": "90.63"
+      //    },
+      //    "template": {
+      //        "id": null
+      //        missing operatingSystemReferenceCode entry!
+      //    }
+      // },
+
+      ContainerVirtualGuestConfigurationOption osValid = ContainerVirtualGuestConfigurationOption.builder()
+            .productItemPrice(ProductItemPrice.builder()
+                    .hourlyRecurringFee(0)
+                    .recurringFee("0")
+                    .item(ProductItem.builder().description("CentOS - Latest").build())
+                    .build())
+            .template(VirtualGuest.builder().operatingSystemReferenceCode("CENTOS_LATEST").build())
+            .build();
+      ContainerVirtualGuestConfigurationOption osInvalid = ContainerVirtualGuestConfigurationOption.builder()
+            .productItemPrice(ProductItemPrice.builder()
+                    .hourlyRecurringFee(0.131f)
+                    .recurringFee("90.63")
+                    .item(ProductItem.builder().description("Windows Server 2012 Datacenter Edition (64bit)").build())
+                    .build())
+            .template(VirtualGuest.builder().build())
+            .build();
+      ContainerVirtualGuestConfiguration conf = ContainerVirtualGuestConfiguration.builder()
+         .blockDevices(ImmutableSet.<ContainerVirtualGuestConfigurationOption>of())
+         .datacenters(ImmutableSet.<ContainerVirtualGuestConfigurationOption>of())
+         .memory(ImmutableSet.<ContainerVirtualGuestConfigurationOption>of())
+         .networkComponents(ImmutableSet.<ContainerVirtualGuestConfigurationOption>of())
+         .operatingSystems(ImmutableSet.<ContainerVirtualGuestConfigurationOption>of(osValid, osInvalid))
+         .processors(ImmutableSet.<ContainerVirtualGuestConfigurationOption>of())
+         .build();
+      Set<OperatingSystem> virtualGuestOperatingSystems = conf.getVirtualGuestOperatingSystems();
+      OperatingSystem os = Iterables.getOnlyElement(virtualGuestOperatingSystems);
+      assertEquals(os.getOperatingSystemReferenceCode(), osValid.getTemplate().getOperatingSystemReferenceCode());
+   }
+}