Repository: jclouds-labs Updated Branches: refs/heads/2.0.x 65f64205b -> a5a4f30b1
Inspect all known OSFamilies Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs/commit/84f31cb8 Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs/tree/84f31cb8 Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs/diff/84f31cb8 Branch: refs/heads/2.0.x Commit: 84f31cb8d2ac3929ff011a8513b857d9d6157202 Parents: 65f6420 Author: Ignasi Barrera <[email protected]> Authored: Fri Jan 27 14:20:18 2017 +0100 Committer: Ignasi Barrera <[email protected]> Committed: Mon Jan 30 15:30:48 2017 +0100 ---------------------------------------------------------------------- .../arm/compute/functions/VMImageToImage.java | 66 +++++++++++--------- 1 file changed, 35 insertions(+), 31 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/84f31cb8/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VMImageToImage.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VMImageToImage.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VMImageToImage.java index 394b167..38c0769 100644 --- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VMImageToImage.java +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VMImageToImage.java @@ -17,6 +17,8 @@ package org.jclouds.azurecompute.arm.compute.functions; import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.collect.Iterables.tryFind; +import static java.util.Arrays.asList; import java.util.Map; import java.util.Set; @@ -34,6 +36,8 @@ import org.jclouds.javax.annotation.Nullable; import org.jclouds.location.predicates.LocationPredicates; import com.google.common.base.Function; +import com.google.common.base.Optional; +import com.google.common.base.Predicate; import com.google.common.base.Supplier; import com.google.common.collect.FluentIterable; import com.google.common.collect.ImmutableMap; @@ -41,18 +45,12 @@ import com.google.inject.Inject; public class VMImageToImage implements Function<VMImage, Image> { - public static final String MARKETPLACE_TAG = "marketplace"; - - private static final String UBUNTU = "Ubuntu"; - private static final String WINDOWS = "Windows"; - private static final String OPENLOGIC = "openLogic"; - private static final String CENTOS = "CentOS"; - private static final String COREOS = "CoreOS"; - private static final String OPENSUSE = "openSUSE"; - private static final String SUSE = "SUSE"; - private static final String SLES = "SLES"; - private static final String ORACLE_lINUX = "Oracle-Linux"; - private static final String RHEL = "RHEL"; + private static final Map<String, OsFamily> OTHER_OS_MAP = ImmutableMap.<String, OsFamily> builder() + .put("openlogic", OsFamily.CENTOS) + .put("win", OsFamily.WINDOWS) + .put("sles", OsFamily.SUSE) + .put("oracle-linux", OsFamily.OEL) + .build(); private final Supplier<Set<? extends org.jclouds.domain.Location>> locations; @@ -155,25 +153,8 @@ public class VMImageToImage implements Function<VMImage, Image> { return new Function<VMImage, OperatingSystem.Builder>() { @Override public OperatingSystem.Builder apply(final VMImage image) { - checkNotNull(image.offer(), "offer"); - final String label = image.offer(); - - OsFamily family = OsFamily.UNRECOGNIZED; - if (label.contains(CENTOS) || label.contains(OPENLOGIC)) { - family = OsFamily.CENTOS; - } else if (label.contains(COREOS)) { - family = OsFamily.COREOS; - } else if (label.contains(SUSE) || label.contains(SLES) || label.contains(OPENSUSE)) { - family = OsFamily.SUSE; - } else if (label.contains(UBUNTU)) { - family = OsFamily.UBUNTU; - } else if (label.contains(WINDOWS)) { - family = OsFamily.WINDOWS; - } else if (label.contains(ORACLE_lINUX)) { - family = OsFamily.OEL; - } else if (label.contains(RHEL)) { - family = OsFamily.RHEL; - } + final String label = checkNotNull(image.offer(), "offer").toLowerCase(); + OsFamily family = findInStandardFamilies(label).or(findInOtherOSMap(label)).or(OsFamily.UNRECOGNIZED); // Fallback to generic operating system type if (OsFamily.UNRECOGNIZED == family && image.versionProperties() != null @@ -189,4 +170,27 @@ public class VMImageToImage implements Function<VMImage, Image> { } }; } + + private static Optional<OsFamily> findInStandardFamilies(final String label) { + return tryFind(asList(OsFamily.values()), new Predicate<OsFamily>() { + @Override + public boolean apply(OsFamily input) { + return label.contains(input.value()); + } + }); + } + + private static Optional<OsFamily> findInOtherOSMap(final String label) { + return tryFind(OTHER_OS_MAP.keySet(), new Predicate<String>() { + @Override + public boolean apply(String input) { + return label.contains(input); + } + }).transform(new Function<String, OsFamily>() { + @Override + public OsFamily apply(String input) { + return OTHER_OS_MAP.get(input); + } + }); + } }
