You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by al...@apache.org on 2016/04/28 15:56:09 UTC

[1/2] brooklyn-server git commit: PR #129: Add AbstractJcloudsStubbedLiveTest.getLocationSpec

Repository: brooklyn-server
Updated Branches:
  refs/heads/0.9.x a5ea0264e -> 55b95dc38


PR #129: Add AbstractJcloudsStubbedLiveTest.getLocationSpec


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/e889f75d
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/e889f75d
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/e889f75d

Branch: refs/heads/0.9.x
Commit: e889f75d60f5a9cd922bea50336a4c0e326043ec
Parents: a5ea026
Author: Aled Sage <al...@gmail.com>
Authored: Wed Apr 27 23:38:48 2016 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Thu Apr 28 14:55:21 2016 +0100

----------------------------------------------------------------------
 .../location/jclouds/AbstractJcloudsStubbedLiveTest.java      | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/e889f75d/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/AbstractJcloudsStubbedLiveTest.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/AbstractJcloudsStubbedLiveTest.java b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/AbstractJcloudsStubbedLiveTest.java
index cb2334a..c885197 100644
--- a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/AbstractJcloudsStubbedLiveTest.java
+++ b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/AbstractJcloudsStubbedLiveTest.java
@@ -115,7 +115,7 @@ public abstract class AbstractJcloudsStubbedLiveTest extends AbstractJcloudsLive
             }
         };
         jcloudsLocation = (JcloudsLocation) managementContext.getLocationRegistry().getLocationManaged(
-                LOCATION_SPEC, 
+                getLocationSpec(), 
                 jcloudsLocationConfig(ImmutableMap.<Object, Object>of(
                         JcloudsLocationConfig.COMPUTE_SERVICE_REGISTRY, computeServiceRegistry,
                         JcloudsLocationConfig.WAIT_FOR_SSHABLE, "false")));
@@ -127,6 +127,11 @@ public abstract class AbstractJcloudsStubbedLiveTest extends AbstractJcloudsLive
     protected Map<Object, Object> jcloudsLocationConfig(Map<Object, Object> defaults) {
         return defaults;
     }
+
+    // For overriding
+    protected String getLocationSpec() {
+        return LOCATION_SPEC;
+    }
     
     protected abstract NodeCreator newNodeCreator();
 }


[2/2] brooklyn-server git commit: PR #129: jclouds.imageChooser customisable with provisioning config

Posted by al...@apache.org.
PR #129: jclouds.imageChooser customisable with provisioning config


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/55b95dc3
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/55b95dc3
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/55b95dc3

Branch: refs/heads/0.9.x
Commit: 55b95dc381bbdd5a04801730bfc3f53fa58ffa3c
Parents: e889f75
Author: Aled Sage <al...@gmail.com>
Authored: Thu Apr 28 07:41:27 2016 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Thu Apr 28 14:55:35 2016 +0100

----------------------------------------------------------------------
 .../location/jclouds/BrooklynImageChooser.java  | 121 +++++++++++++++++--
 .../location/jclouds/JcloudsLocation.java       |   2 +-
 2 files changed, 110 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/55b95dc3/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/BrooklynImageChooser.java
----------------------------------------------------------------------
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 56c2ef9..1fcae95 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
@@ -18,12 +18,15 @@
  */
 package org.apache.brooklyn.location.jclouds;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
 import java.util.Arrays;
 import java.util.Comparator;
 import java.util.Iterator;
 import java.util.List;
 
 import org.apache.brooklyn.util.collections.MutableList;
+import org.apache.brooklyn.util.core.config.ConfigBag;
 import org.jclouds.compute.ComputeService;
 import org.jclouds.compute.domain.Image;
 import org.jclouds.compute.domain.OperatingSystem;
@@ -33,7 +36,11 @@ import org.slf4j.LoggerFactory;
 
 import com.google.common.annotations.Beta;
 import com.google.common.base.Function;
+import com.google.common.base.Predicates;
 import com.google.common.collect.ComparisonChain;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
 import com.google.common.collect.Ordering;
 import com.google.common.math.DoubleMath;
 
@@ -44,6 +51,7 @@ public class BrooklynImageChooser implements Cloneable {
     private static final Logger log = LoggerFactory.getLogger(BrooklynImageChooser.class);
     
     protected ComputeService computeService;
+    protected ConfigBag config;
     protected String cloudProviderName;
     
     protected static int compare(double left, double right) {
@@ -204,13 +212,26 @@ public class BrooklynImageChooser implements Cloneable {
         }
     }
     
+    protected void use(ConfigBag config) {
+        if (this.config !=null && !this.config.equals(config))
+            throw new IllegalStateException("ImageChooser must be cloned to set config");
+        this.config = config;
+    }
+    
     public BrooklynImageChooser cloneFor(ComputeService service) {
         BrooklynImageChooser result = clone();
         result.use(service);
         return result;
     }
     
-    public static class OrderingScoredWithoutDefaults extends Ordering<Image> implements ComputeServiceAwareChooser<OrderingScoredWithoutDefaults> {
+    public BrooklynImageChooser cloneFor(ConfigBag config) {
+        BrooklynImageChooser result = clone();
+        result.use(config);
+        return result;
+    }
+    
+    public static class OrderingScoredWithoutDefaults extends Ordering<Image> implements ComputeServiceAwareChooser<OrderingScoredWithoutDefaults>,
+            ConfigAwareChooser<OrderingScoredWithoutDefaults>{
         private BrooklynImageChooser chooser;
         public OrderingScoredWithoutDefaults(BrooklynImageChooser chooser) {
             this.chooser = chooser;
@@ -222,6 +243,10 @@ public class BrooklynImageChooser implements Cloneable {
         public OrderingScoredWithoutDefaults cloneFor(ComputeService service) {
             return new OrderingScoredWithoutDefaults(chooser.cloneFor(service));
         }        
+        @Override
+        public OrderingScoredWithoutDefaults cloneFor(ConfigBag config) {
+            return new OrderingScoredWithoutDefaults(chooser.cloneFor(config));
+        }        
     }
     
     public Ordering<Image> orderingScoredWithoutDefaults() {
@@ -239,7 +264,8 @@ public class BrooklynImageChooser implements Cloneable {
         };
     }
     
-    public static class OrderingWithDefaults extends Ordering<Image> implements ComputeServiceAwareChooser<OrderingWithDefaults> {
+    public static class OrderingWithDefaults extends Ordering<Image> implements ComputeServiceAwareChooser<OrderingWithDefaults>,
+            ConfigAwareChooser<OrderingWithDefaults> {
         Ordering<Image> primaryOrdering;
         public OrderingWithDefaults(final Ordering<Image> primaryOrdering) {
             this.primaryOrdering = primaryOrdering;
@@ -265,6 +291,13 @@ public class BrooklynImageChooser implements Cloneable {
             }
             return this;
         }        
+        @Override
+        public OrderingWithDefaults cloneFor(ConfigBag config) {
+            if (primaryOrdering instanceof ConfigAwareChooser) {
+                return new OrderingWithDefaults( BrooklynImageChooser.cloneFor(primaryOrdering, config) );
+            }
+            return this;
+        }        
     }
     
     public static Ordering<Image> orderingWithDefaults(final Ordering<Image> primaryOrdering) {
@@ -292,20 +325,52 @@ public class BrooklynImageChooser implements Cloneable {
         };
     }
     
-    public static class ImageChooserFromOrdering implements Function<Iterable<? extends Image>, Image>, ComputeServiceAwareChooser<ImageChooserFromOrdering> {
-        final Ordering<Image> ordering;
-        public ImageChooserFromOrdering(final Ordering<Image> ordering) { this.ordering = ordering; }
+    public static class ImageChooserFromOrdering implements Function<Iterable<? extends Image>, Image>, 
+            ComputeServiceAwareChooser<ImageChooserFromOrdering>, ConfigAwareChooser<ImageChooserFromOrdering> {
+        final List<Ordering<? super Image>> orderings;
+        
+        public ImageChooserFromOrdering(final Ordering<Image> ordering) {
+            this(ImmutableList.of(ordering));
+        }
+        public ImageChooserFromOrdering(Iterable<? extends Ordering<? super Image>> orderings) {
+            this.orderings = ImmutableList.copyOf(checkNotNull(orderings, "orderings"));
+        }
         @Override
         public Image apply(Iterable<? extends Image> input) {
-            List<? extends Image> maxImages = multiMax(ordering, input);
+            List<? extends Image> maxImages = multiMax(Ordering.compound(orderings), input);
             return maxImages.get(maxImages.size() - 1);
         }
         @Override
         public ImageChooserFromOrdering cloneFor(ComputeService service) {
-            if (ordering instanceof ComputeServiceAwareChooser) {
-                return new ImageChooserFromOrdering( BrooklynImageChooser.cloneFor(ordering, service) );
+            if (Iterables.tryFind(orderings, Predicates.instanceOf(ComputeServiceAwareChooser.class)).isPresent()) {
+                List<Ordering<? super Image>> clonedOrderings = Lists.newArrayList();
+                for (Ordering<? super Image> ordering : orderings) {
+                    if (ordering instanceof ComputeServiceAwareChooser) {
+                        clonedOrderings.add(BrooklynImageChooser.cloneFor(ordering, service));
+                    } else {
+                        clonedOrderings.add(ordering);
+                    }
+                }
+                return new ImageChooserFromOrdering(clonedOrderings);
+            } else {
+                return this;
+            }
+        }        
+        @Override
+        public ImageChooserFromOrdering cloneFor(ConfigBag config) {
+            if (Iterables.tryFind(orderings, Predicates.instanceOf(ConfigAwareChooser.class)).isPresent()) {
+                List<Ordering<? super Image>> clonedOrderings = Lists.newArrayList();
+                for (Ordering<? super Image> ordering : orderings) {
+                    if (ordering instanceof ConfigAwareChooser) {
+                        clonedOrderings.add(BrooklynImageChooser.cloneFor(ordering, config));
+                    } else {
+                        clonedOrderings.add(ordering);
+                    }
+                }
+                return new ImageChooserFromOrdering(clonedOrderings);
+            } else {
+                return this;
             }
-            return this;
         }        
     }
 
@@ -313,6 +378,10 @@ public class BrooklynImageChooser implements Cloneable {
         return new ImageChooserFromOrdering(ordering);
     }
     
+    public static Function<Iterable<? extends Image>, Image> imageChooserFromOrderings(Iterable<? extends Ordering<? super Image>> orderings) {
+        return new ImageChooserFromOrdering(orderings);
+    }
+
     /** @deprecated since 0.7.0 kept in case persisted */
     @Deprecated
     public static Function<Iterable<? extends Image>, Image> imageChooserFromOrderingDeprecated(final Ordering<Image> ordering) {
@@ -329,8 +398,24 @@ public class BrooklynImageChooser implements Cloneable {
         public T cloneFor(ComputeService service);
     }
 
-    /** Attempts to clone the given item for use with the given {@link ComputeService}, if
-     * the item is {@link ComputeServiceAwareChooser}; otherwise it returns the item unchanged */
+    protected interface ConfigAwareChooser<T> {
+        public T cloneFor(ConfigBag config);
+    }
+
+    /**
+     * Attempts to clone the given item for use with the given {@link ComputeService} and/or the
+     * given config, if the item is {@link ComputeServiceAwareChooser} or {@link ConfigAwareChooser}; 
+     * otherwise it returns the item unchanged.
+     */
+    public static <T> T cloneFor(T item, ComputeService service, ConfigBag config) {
+        T result = cloneFor(item, service);
+        return cloneFor(result, config);
+    }
+
+    /**
+     * Attempts to clone the given item for use with the given {@link ComputeService}, if
+     * the item is {@link ComputeServiceAwareChooser}; otherwise it returns the item unchanged.
+     */
     @SuppressWarnings("unchecked")
     public static <T> T cloneFor(T item, ComputeService service) {
         if (item instanceof ComputeServiceAwareChooser) {
@@ -338,7 +423,19 @@ public class BrooklynImageChooser implements Cloneable {
         }
         return item;
     }
-    
+
+    /**
+     * Attempts to clone the given item for use with the given {@link ConfigBag}, if
+     * the item is {@link ConfigAwareChooser}; otherwise it returns the item unchanged.
+     */
+    @SuppressWarnings("unchecked")
+    public static <T> T cloneFor(T item, ConfigBag service) {
+        if (item instanceof ConfigAwareChooser) {
+            return ((ConfigAwareChooser<T>)item).cloneFor(service);
+        }
+        return item;
+    }
+
     // from jclouds
     static <T, E extends T> List<E> multiMax(Comparator<T> ordering, Iterable<E> iterable) {
         Iterator<E> iterator = iterable.iterator();

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/55b95dc3/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
index cf44a3d..c07f97f 100644
--- a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
+++ b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
@@ -1469,7 +1469,7 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
         if (templateBuilder instanceof PortableTemplateBuilder<?>) {
             if (((PortableTemplateBuilder<?>)templateBuilder).imageChooser()==null) {
                 Function<Iterable<? extends Image>, Image> chooser = config.get(JcloudsLocationConfig.IMAGE_CHOOSER);
-                chooser = BrooklynImageChooser.cloneFor(chooser, computeService);
+                chooser = BrooklynImageChooser.cloneFor(chooser, computeService, config);
                 templateBuilder.imageChooser(chooser);
             } else {
                 // an image chooser is already set, so do nothing