This is an automated email from the ASF dual-hosted git repository. heneveld pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/brooklyn-server.git
commit 524106bef020dcf25f82c304ba02a9c6f20f6abe Author: Aled Sage <aled.s...@gmail.com> AuthorDate: Thu Jan 24 12:28:29 2019 +0000 BROOKLYN-607: prefer vanilla CentOS image on azure --- .../location/jclouds/BrooklynImageChooser.java | 19 +++++++++ .../location/jclouds/BrooklynImageChooserTest.java | 45 ++++++++++++++++++++++ 2 files changed, 64 insertions(+) diff --git a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/BrooklynImageChooser.java b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/BrooklynImageChooser.java index 701528a..53102b8 100644 --- a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/BrooklynImageChooser.java +++ b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/BrooklynImageChooser.java @@ -167,8 +167,27 @@ public class BrooklynImageChooser implements Cloneable { score += 0.5; } } + // prefer 64-bit if (os.is64Bit()) score += 0.5; + + // prefer 'normal' releases of the OS, especially on Azure for 'OpenLogic' images. + // See https://issues.apache.org/jira/browse/BROOKLYN-607 + // e.g. {id=northeurope/OpenLogic/CentOS-HPC/7.4, providerId=OpenLogic, name=CentOS-HPC, location={scope=REGION, id=northeurope, description=North Europe, parent=azurecompute-arm, iso3166Codes=[IE]}, os={family=centos, version=7.4, description=7.4, is64Bit=true}, description=7.4, version=7.4, status=AVAILABLE, loginUser=jclouds} + // {id=northeurope/OpenLogic/CentOS-SRIOV/7.3-SRIOV, providerId=OpenLogic, name=CentOS-SRIOV, location={scope=REGION, id=northeurope, description=North Europe, parent=azurecompute-arm, iso3166Codes=[IE]}, os={family=centos, version=7.3-SRIOV, description=7.3-SRIOV, is64Bit=true}, description=7.3-SRIOV, version=7.3-SRIOV, status=AVAILABLE, loginUser=jclouds} + // {id=northeurope/OpenLogic/CentOS/7.6, providerId=OpenLogic, name=CentOS, location={scope=REGION, id=northeurope, description=North Europe, parent=azurecompute-arm, iso3166Codes=[IE]}, os={family=centos, version=7.6, description=7.6, is64Bit=true}, description=7.6, version=7.6, status=AVAILABLE, loginUser=jclouds} + if (img.getName() != null) { + String name = img.getName(); + if (name.contains("-SRIOV")) { + score -= 0.05; + } else if (name.contains("-CI")) { + score -= 0.05; + } else if (name.contains("-HPC")) { + score -= 0.05; + } else if (name.contains("-LVM")) { + score -= 0.05; + } + } } // TODO prefer known providerIds diff --git a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/BrooklynImageChooserTest.java b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/BrooklynImageChooserTest.java index f207c35..fbb488a 100644 --- a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/BrooklynImageChooserTest.java +++ b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/BrooklynImageChooserTest.java @@ -24,6 +24,8 @@ import java.util.Set; import org.jclouds.compute.domain.ComputeType; import org.jclouds.compute.domain.Image; +import org.jclouds.compute.domain.Image.Status; +import org.jclouds.compute.domain.ImageBuilder; import org.jclouds.compute.domain.OperatingSystem; import org.jclouds.compute.domain.OsFamily; import org.jclouds.domain.Location; @@ -33,6 +35,7 @@ import org.testng.Assert; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; +import com.google.common.base.Function; import com.google.common.base.Joiner; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; @@ -48,6 +51,48 @@ public class BrooklynImageChooserTest { } @Test + public void testPrefersAzureVanillaCentos() { + // See https://issues.apache.org/jira/browse/BROOKLYN-607 + + // {id=northeurope/OpenLogic/CentOS/7.6, providerId=OpenLogic, name=CentOS, location={scope=REGION, id=northeurope, description=North Europe, parent=azurecompute-arm, iso3166Codes=[IE]}, os={family=centos, version=7.6, description=7.6, is64Bit=true}, description=7.6, version=7.6, status=AVAILABLE, loginUser=jclouds} + Image img1 = new ImageBuilder() + .id("northeurope/OpenLogic/CentOS/7.6") + .providerId("OpenLogic") + .name("CentOS") + .description("7.6") + .version("7.6") + .status(Status.AVAILABLE) + .operatingSystem(OperatingSystem.builder() + .family(OsFamily.CENTOS) + .version("7.6") + .description("7.6") + .is64Bit(true) + .build()) + .build(); + + // {id=northeurope/OpenLogic/CentOS-SRIOV/7.3-SRIOV, providerId=OpenLogic, name=CentOS-SRIOV, location={scope=REGION, id=northeurope, description=North Europe, parent=azurecompute-arm, iso3166Codes=[IE]}, os={family=centos, version=7.3-SRIOV, description=7.3-SRIOV, is64Bit=true}, description=7.3-SRIOV, version=7.3-SRIOV, status=AVAILABLE, loginUser=jclouds} + Image img2 = new ImageBuilder() + .id("northeurope/OpenLogic/CentOS-SRIOV/7.3-SRIOV") + .providerId("OpenLogic") + .name("CentOS-SRIOV") + .description("7.3-SRIOV") + .version("7.3-SRIOV") + .status(Status.AVAILABLE) + .operatingSystem(OperatingSystem.builder() + .family(OsFamily.CENTOS) + .version("7.3-SRIOV") + .description("7.3-SRIOV") + .is64Bit(true) + .build()) + .build(); + + Function<Iterable<? extends Image>, Image> func = brooklynImageChooser.chooser(); + Image choice = func.apply(ImmutableList.of(img1, img2)); + + Assert.assertEquals(choice, img1); + } + + @Test public void testCentosOverUbuntu() { assertOrderOfPreference( getScore(OsFamily.CENTOS, "7.0"),