You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2015/09/01 17:16:31 UTC

[08/28] incubator-brooklyn git commit: Brooklyn YAML supports deferred value resolution via $brooklyn:external().

Brooklyn YAML supports deferred value resolution via $brooklyn:external().


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

Branch: refs/heads/master
Commit: f9cf496675ab6dfac5e864f48c302692e198feb3
Parents: 3ed391a
Author: Alasdair Hodge <gi...@alasdairhodge.co.uk>
Authored: Mon Jun 22 16:53:14 2015 +0100
Committer: Alasdair Hodge <gi...@alasdairhodge.co.uk>
Committed: Tue Aug 25 11:51:20 2015 +0100

----------------------------------------------------------------------
 .../spi/dsl/methods/BrooklynDslCommon.java      | 65 ++++++++++++++++++++
 1 file changed, 65 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f9cf4966/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/methods/BrooklynDslCommon.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/methods/BrooklynDslCommon.java b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/methods/BrooklynDslCommon.java
index 52122bf..67c31f3 100644
--- a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/methods/BrooklynDslCommon.java
+++ b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/methods/BrooklynDslCommon.java
@@ -21,6 +21,7 @@ package org.apache.brooklyn.camp.brooklyn.spi.dsl.methods;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.Callable;
 
 import org.apache.brooklyn.api.entity.Entity;
 import org.apache.brooklyn.api.mgmt.Task;
@@ -48,6 +49,30 @@ import org.apache.brooklyn.util.text.Strings;
 import org.apache.brooklyn.util.text.StringEscapes.JavaStringEscapes;
 import org.apache.commons.beanutils.BeanUtils;
 
+import brooklyn.config.external.ExternalConfigSupplier;
+import brooklyn.entity.Entity;
+import brooklyn.entity.basic.EntityDynamicType;
+import brooklyn.entity.basic.EntityInternal;
+import brooklyn.entity.trait.Configurable;
+import brooklyn.event.Sensor;
+import brooklyn.event.basic.DependentConfiguration;
+import brooklyn.management.Task;
+import brooklyn.management.TaskAdaptable;
+import brooklyn.management.TaskFactory;
+import brooklyn.management.internal.ExternalConfigSupplierRegistry;
+import brooklyn.management.internal.ManagementContextInternal;
+import brooklyn.util.collections.MutableMap;
+import brooklyn.util.config.ConfigBag;
+import brooklyn.util.exceptions.Exceptions;
+import brooklyn.util.flags.ClassCoercionException;
+import brooklyn.util.flags.FlagUtils;
+import brooklyn.util.flags.TypeCoercions;
+import brooklyn.util.javalang.Reflections;
+import brooklyn.util.task.DeferredSupplier;
+import brooklyn.util.text.StringEscapes.JavaStringEscapes;
+import brooklyn.util.text.Strings;
+import brooklyn.util.task.Tasks;
+
 import com.google.common.base.Function;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
@@ -297,4 +322,44 @@ public class BrooklynDslCommon {
         }
     }
 
+    /**
+     * Defers to management context's {@link ExternalConfigSupplierRegistry} to resolve values at runtime.
+     * The name of the appropriate {@link ExternalConfigSupplier} is captured, along with the key of
+     * the desired config value.
+     */
+    public static DslExternal external(final String providerName, final String key) {
+        return new DslExternal(providerName, key);
+    }
+    protected final static class DslExternal extends BrooklynDslDeferredSupplier<Object> {
+        private static final long serialVersionUID = -3860334240490397057L;
+        private final String providerName;
+        private final String key;
+
+        public DslExternal(String providerName, String key) {
+            this.providerName = providerName;
+            this.key = key;
+        }
+
+        @Override
+        public Task<Object> newTask() {
+            return Tasks.<Object>builder()
+                .name("resolving external configuration: '" + key + "' from provider '" + providerName + "'")
+                .dynamic(false)
+                .body(new Callable<Object>() {
+                    @Override
+                    public Object call() throws Exception {
+                        EntityInternal entity = (EntityInternal) BrooklynDslDeferredSupplier.entity();
+                        ManagementContextInternal managementContext = (ManagementContextInternal) entity.getManagementContext();
+                        return managementContext.getExternalConfigProviderRegistry().getConfig(providerName, key);
+                    }
+                })
+                .build();
+        }
+
+        @Override
+        public String toString() {
+            return "$brooklyn:external("+providerName+", "+key+")";
+        }
+    }
+
 }