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/01/15 23:37:45 UTC
[1/5] incubator-brooklyn git commit: Support "externalised config" in
catalog definition
Repository: incubator-brooklyn
Updated Branches:
refs/heads/master 38d3102b6 -> e431e6ad3
Support "externalised config" in catalog definition
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/18cce24f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/18cce24f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/18cce24f
Branch: refs/heads/master
Commit: 18cce24fbb2493d91049c0cef650151252b2b652
Parents: dff3014
Author: Ivana Yovcheva <iv...@gmail.com>
Authored: Tue Dec 29 21:48:09 2015 +0200
Committer: Ivana Yovcheva <iv...@gmail.com>
Committed: Mon Jan 11 14:55:50 2016 +0200
----------------------------------------------------------------------
.../camp/brooklyn/ExternalConfigYamlTest.java | 60 +++++++++++++++++++-
.../catalog/internal/BasicBrooklynCatalog.java | 36 +++++++-----
2 files changed, 82 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/18cce24f/brooklyn-server/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ExternalConfigYamlTest.java
----------------------------------------------------------------------
diff --git a/brooklyn-server/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ExternalConfigYamlTest.java b/brooklyn-server/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ExternalConfigYamlTest.java
index 210f158..b5ce9c9 100644
--- a/brooklyn-server/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ExternalConfigYamlTest.java
+++ b/brooklyn-server/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ExternalConfigYamlTest.java
@@ -25,6 +25,7 @@ import java.io.StringReader;
import java.util.Map;
import com.google.common.collect.Iterables;
+import org.apache.brooklyn.api.catalog.CatalogItem;
import org.apache.brooklyn.api.entity.Entity;
import org.apache.brooklyn.api.mgmt.ExecutionContext;
import org.apache.brooklyn.api.mgmt.ManagementContext;
@@ -33,7 +34,6 @@ import org.apache.brooklyn.core.config.ConfigKeys;
import org.apache.brooklyn.core.config.external.AbstractExternalConfigSupplier;
import org.apache.brooklyn.core.config.external.ExternalConfigSupplier;
import org.apache.brooklyn.core.internal.BrooklynProperties;
-import org.apache.brooklyn.core.location.AbstractLocation;
import org.apache.brooklyn.core.location.cloud.CloudLocationConfig;
import org.apache.brooklyn.core.mgmt.internal.CampYamlParser;
import org.apache.brooklyn.core.mgmt.internal.LocalManagementContext;
@@ -53,15 +53,19 @@ import com.google.common.base.Joiner;
public class ExternalConfigYamlTest extends AbstractYamlTest {
private static final Logger log = LoggerFactory.getLogger(ExternalConfigYamlTest.class);
+ private static final String OSGI_URL = "https://repository.apache.org/content/groups/snapshots/org/apache/brooklyn/brooklyn-core/0.9.0-SNAPSHOT/brooklyn-core-0.9.0-20160108.142251-126.jar";
+
@Override
protected LocalManagementContext newTestManagementContext() {
BrooklynProperties props = BrooklynProperties.Factory.newEmpty();
props.put("brooklyn.external.myprovider", MyExternalConfigSupplier.class.getName());
props.put("brooklyn.external.myprovider.mykey", "myval");
+ props.put("brooklyn.external.myprovider.osgikey", OSGI_URL);
props.put("brooklyn.external.myproviderWithoutMapArg", MyExternalConfigSupplierWithoutMapArg.class.getName());
return LocalManagementContextForTests.builder(true)
.useProperties(props)
+ .disableOsgi(false)
.build();
}
@@ -108,6 +112,60 @@ public class ExternalConfigYamlTest extends AbstractYamlTest {
assertEquals(Iterables.getOnlyElement( app.getLocations() ).config().get(MY_CONFIG_KEY), "myval");
}
+ @Test
+ public void testExternalisedCatalogConfigReferencedFromYaml() throws Exception {
+
+ String yaml = Joiner.on("\n").join(
+ "brooklyn.catalog:",
+ " id: osgi.test",
+ " itemType: template",
+ " version: 1.3",
+ " description: CentOS 6.6 With GUI - 1.3",
+ " displayName: CentOS 6.6",
+ " iconUrl: classpath:///centos.png",
+ " brooklyn.libraries:",
+ " - $brooklyn:external(\"myprovider\", \"osgikey\")",
+ "",
+ " item:",
+ " services:",
+ " - type: brooklyn.entity.database.mysql.MySqlNode");
+
+ catalog.addItems(yaml);
+
+ for (CatalogItem<Object, Object> item: catalog.getCatalogItems()) {
+ for (CatalogItem.CatalogBundle library: item.getLibraries()) {
+ assertEquals(library.getUrl(), OSGI_URL);
+ }
+ }
+ }
+
+ @Test
+ public void testNonExternalisedCatalogConfigReferencedFromYaml() throws Exception {
+
+ String yaml = Joiner.on("\n").join(
+ "brooklyn.catalog:",
+ " id: osgi.test",
+ " itemType: template",
+ " version: 1.3",
+ " description: CentOS 6.6 With GUI - 1.3",
+ " displayName: CentOS 6.6",
+ " iconUrl: classpath:///centos.png",
+ " brooklyn.libraries:",
+ " - " + OSGI_URL,
+ "",
+ " item:",
+ " services:",
+ " - type: brooklyn.entity.database.mysql.MySqlNode");
+
+ catalog.addItems(yaml);
+
+ for (CatalogItem<Object, Object> item: catalog.getCatalogItems()) {
+ for (CatalogItem.CatalogBundle library: item.getLibraries()) {
+ assertEquals(library.getUrl(), OSGI_URL);
+ }
+ }
+ }
+
@Test(groups="Integration")
public void testExternalisedLocationConfigSetViaProvisioningPropertiesReferencedFromYaml() throws Exception {
String yaml = Joiner.on("\n").join(
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/18cce24f/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
----------------------------------------------------------------------
diff --git a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
index 96cf452..4f44dab 100644
--- a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
+++ b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
@@ -41,12 +41,14 @@ import org.apache.brooklyn.api.mgmt.classloading.BrooklynClassLoadingContext;
import org.apache.brooklyn.core.catalog.CatalogPredicates;
import org.apache.brooklyn.core.catalog.internal.CatalogClasspathDo.CatalogScanningModes;
import org.apache.brooklyn.core.location.BasicLocationRegistry;
+import org.apache.brooklyn.core.mgmt.internal.CampYamlParser;
import org.apache.brooklyn.core.mgmt.internal.ManagementContextInternal;
import org.apache.brooklyn.core.typereg.BrooklynTypePlanTransformer;
import org.apache.brooklyn.util.collections.MutableList;
import org.apache.brooklyn.util.collections.MutableMap;
import org.apache.brooklyn.util.collections.MutableSet;
import org.apache.brooklyn.util.core.flags.TypeCoercions;
+import org.apache.brooklyn.util.core.task.Tasks;
import org.apache.brooklyn.util.exceptions.Exceptions;
import org.apache.brooklyn.util.guava.Maybe;
import org.apache.brooklyn.util.javalang.AggregateClassLoader;
@@ -360,8 +362,8 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
}
private List<CatalogItemDtoAbstract<?,?>> collectCatalogItems(String yaml) {
- Map<?,?> itemDef = Yamls.getAs(Yamls.parseAll(yaml), Map.class);
- Map<?,?> catalogMetadata = getFirstAsMap(itemDef, "brooklyn.catalog").orNull();
+ Map<String,?> itemDef = Yamls.getAs(Yamls.parseAll(yaml), Map.class);
+ Map<String,Object> catalogMetadata = (Map<String, Object>) getFirstAsMap(itemDef, "brooklyn.catalog").orNull();
if (catalogMetadata==null)
log.warn("No `brooklyn.catalog` supplied in catalog request; using legacy mode for "+itemDef);
catalogMetadata = MutableMap.copyOf(catalogMetadata);
@@ -376,7 +378,7 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
catalogMetadata.remove("items");
if (!itemDef.isEmpty()) {
log.debug("Reading brooklyn.catalog peer keys as item ('top-level syntax')");
- Map<String,?> rootItem = MutableMap.of("item", itemDef);
+ Map<String,Object> rootItem = MutableMap.of("item", (Object) itemDef);
String rootItemYaml = yaml;
YamlExtract yamlExtract = Yamls.getTextOfYamlAtPath(rootItemYaml, "brooklyn.catalog");
String match = yamlExtract.withOriginalIndentation(true).withKeyIncluded(true).getMatchedYamlTextOrWarn();
@@ -391,18 +393,26 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
}
@SuppressWarnings("unchecked")
- private void collectCatalogItems(String sourceYaml, Map<?,?> itemMetadata, List<CatalogItemDtoAbstract<?, ?>> result, Map<?,?> parentMetadata) {
+ private void collectCatalogItems(String sourceYaml, Map<?,?> itemMetadata, List<CatalogItemDtoAbstract<?, ?>> result, Map<String,?> parentMetadata) {
if (sourceYaml==null) sourceYaml = new Yaml().dump(itemMetadata);
- Map<Object,Object> catalogMetadata = MutableMap.builder().putAll(parentMetadata).putAll(itemMetadata).build();
-
+ itemMetadata = mgmt.getConfig().getConfig(CampYamlParser.YAML_PARSER_KEY).parse((Map<String, Object>) itemMetadata);
+
+ try {
+ itemMetadata = (Map<String, Object>) Tasks.resolveDeepValue(itemMetadata, Object.class, mgmt.getServerExecutionContext());
+ } catch (Exception e) {
+ throw Exceptions.propagate(e);
+ }
+
+ Map<String,Object> catalogMetadata = MutableMap.<String, Object>builder().putAll(parentMetadata).putAll((Map<? extends String, ?>) itemMetadata).build();
+
// brooklyn.libraries we treat specially, to append the list, with the child's list preferred in classloading order
// `libraries` is supported in some places as a legacy syntax; it should always be `brooklyn.libraries` for new apps
// TODO in 0.8.0 require brooklyn.libraries, don't allow "libraries" on its own
List<?> librariesNew = MutableList.copyOf(getFirstAs(itemMetadata, List.class, "brooklyn.libraries", "libraries").orNull());
Collection<CatalogBundle> libraryBundlesNew = CatalogItemDtoAbstract.parseLibraries(librariesNew);
-
+
List<?> librariesCombined = MutableList.copyOf(librariesNew)
.appendAll(getFirstAs(parentMetadata, List.class, "brooklyn.libraries", "libraries").orNull());
if (!librariesCombined.isEmpty())
@@ -432,8 +442,8 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
if (items!=null) {
int count = 0;
- for (Map<?,?> i: ((List<Map<?,?>>)items)) {
- collectCatalogItems(Yamls.getTextOfYamlAtPath(sourceYaml, "items", count).getMatchedYamlTextOrWarn(),
+ for (Map<?,?> i: ((List<Map<String,Object>>)items)) {
+ collectCatalogItems(Yamls.getTextOfYamlAtPath(sourceYaml, "items", count).getMatchedYamlTextOrWarn(),
i, result, catalogMetadata);
count++;
}
@@ -582,12 +592,12 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
return oldValue;
}
- private Collection<CatalogItemDtoAbstract<?, ?>> scanAnnotationsFromLocal(ManagementContext mgmt, Map<Object, Object> catalogMetadata) {
+ private Collection<CatalogItemDtoAbstract<?, ?>> scanAnnotationsFromLocal(ManagementContext mgmt, Map<String, Object> catalogMetadata) {
CatalogDto dto = CatalogDto.newNamedInstance("Local Scanned Catalog", "All annotated Brooklyn entities detected in the classpath", "scanning-local-classpath");
return scanAnnotationsInternal(mgmt, new CatalogDo(dto), catalogMetadata);
}
- private Collection<CatalogItemDtoAbstract<?, ?>> scanAnnotationsFromBundles(ManagementContext mgmt, Collection<CatalogBundle> libraries, Map<Object, Object> catalogMetadata) {
+ private Collection<CatalogItemDtoAbstract<?, ?>> scanAnnotationsFromBundles(ManagementContext mgmt, Collection<CatalogBundle> libraries, Map<String, Object> catalogMetadata) {
CatalogDto dto = CatalogDto.newNamedInstance("Bundles Scanned Catalog", "All annotated Brooklyn entities detected in bundles", "scanning-bundles-classpath-"+libraries.hashCode());
List<String> urls = MutableList.of();
for (CatalogBundle b: libraries) {
@@ -608,7 +618,7 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
return scanAnnotationsInternal(mgmt, subCatalog, catalogMetadata);
}
- private Collection<CatalogItemDtoAbstract<?, ?>> scanAnnotationsInternal(ManagementContext mgmt, CatalogDo subCatalog, Map<Object, Object> catalogMetadata) {
+ private Collection<CatalogItemDtoAbstract<?, ?>> scanAnnotationsInternal(ManagementContext mgmt, CatalogDo subCatalog, Map<String, Object> catalogMetadata) {
// TODO this does java-scanning only;
// the call when scanning bundles should use the CatalogItem instead and use OSGi when loading for scanning
// (or another scanning mechanism). see comments on CatalogClasspathDo.load
@@ -989,7 +999,7 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
};
}
- private static <T,SpecT> Function<CatalogItemDo<T, SpecT>, CatalogItem<T,SpecT>> itemDoToDtoAddingSelectedMetadataDuringScan(final Map<Object, Object> catalogMetadata) {
+ private static <T,SpecT> Function<CatalogItemDo<T, SpecT>, CatalogItem<T,SpecT>> itemDoToDtoAddingSelectedMetadataDuringScan(final Map<String, Object> catalogMetadata) {
return new Function<CatalogItemDo<T,SpecT>, CatalogItem<T,SpecT>>() {
@Override
public CatalogItem<T,SpecT> apply(@Nullable CatalogItemDo<T,SpecT> item) {
[3/5] incubator-brooklyn git commit: external-config in catalog:
avoid parsing items
Posted by al...@apache.org.
external-config in catalog: avoid parsing items
Don’t parse the “item” or “items” section when populating the catalog.
The camp-yaml DSL section in that is only parsed when the blueprint is
actually being used, rather than when populating the catalog.
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/4dbbc9ca
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/4dbbc9ca
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/4dbbc9ca
Branch: refs/heads/master
Commit: 4dbbc9cacb211193553eb3ddae9d1c080667508c
Parents: 786db04
Author: Aled Sage <al...@gmail.com>
Authored: Mon Jan 11 15:17:15 2016 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Mon Jan 11 15:17:15 2016 +0000
----------------------------------------------------------------------
.../catalog/internal/BasicBrooklynCatalog.java | 55 +++++++++++++-------
1 file changed, 36 insertions(+), 19 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4dbbc9ca/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
----------------------------------------------------------------------
diff --git a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
index 4f44dab..7e0b69e 100644
--- a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
+++ b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
@@ -362,8 +362,8 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
}
private List<CatalogItemDtoAbstract<?,?>> collectCatalogItems(String yaml) {
- Map<String,?> itemDef = Yamls.getAs(Yamls.parseAll(yaml), Map.class);
- Map<String,Object> catalogMetadata = (Map<String, Object>) getFirstAsMap(itemDef, "brooklyn.catalog").orNull();
+ Map<?,?> itemDef = Yamls.getAs(Yamls.parseAll(yaml), Map.class);
+ Map<?,?> catalogMetadata = getFirstAsMap(itemDef, "brooklyn.catalog").orNull();
if (catalogMetadata==null)
log.warn("No `brooklyn.catalog` supplied in catalog request; using legacy mode for "+itemDef);
catalogMetadata = MutableMap.copyOf(catalogMetadata);
@@ -378,7 +378,7 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
catalogMetadata.remove("items");
if (!itemDef.isEmpty()) {
log.debug("Reading brooklyn.catalog peer keys as item ('top-level syntax')");
- Map<String,Object> rootItem = MutableMap.of("item", (Object) itemDef);
+ Map<String,?> rootItem = MutableMap.of("item", (Object) itemDef);
String rootItemYaml = yaml;
YamlExtract yamlExtract = Yamls.getTextOfYamlAtPath(rootItemYaml, "brooklyn.catalog");
String match = yamlExtract.withOriginalIndentation(true).withKeyIncluded(true).getMatchedYamlTextOrWarn();
@@ -393,24 +393,41 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
}
@SuppressWarnings("unchecked")
- private void collectCatalogItems(String sourceYaml, Map<?,?> itemMetadata, List<CatalogItemDtoAbstract<?, ?>> result, Map<String,?> parentMetadata) {
+ private void collectCatalogItems(String sourceYaml, Map<?,?> itemMetadata, List<CatalogItemDtoAbstract<?, ?>> result, Map<?,?> parentMetadata) {
if (sourceYaml==null) sourceYaml = new Yaml().dump(itemMetadata);
- itemMetadata = mgmt.getConfig().getConfig(CampYamlParser.YAML_PARSER_KEY).parse((Map<String, Object>) itemMetadata);
-
- try {
- itemMetadata = (Map<String, Object>) Tasks.resolveDeepValue(itemMetadata, Object.class, mgmt.getServerExecutionContext());
- } catch (Exception e) {
- throw Exceptions.propagate(e);
+ Map<?, ?> itemMetadataWithoutItemDef = MutableMap.builder()
+ .putAll(itemMetadata)
+ .remove("item")
+ .remove("items")
+ .build();
+
+ // Parse CAMP-YAML DSL in item metadata (but not in item or items - those will be parsed only when used).
+ CampYamlParser parser = mgmt.getConfig().getConfig(CampYamlParser.YAML_PARSER_KEY);
+ if (parser != null) {
+ itemMetadataWithoutItemDef = parser.parse((Map<String, Object>) itemMetadataWithoutItemDef);
+ try {
+ itemMetadataWithoutItemDef = (Map<String, Object>) Tasks.resolveDeepValue(itemMetadataWithoutItemDef, Object.class, mgmt.getServerExecutionContext());
+ } catch (Exception e) {
+ throw Exceptions.propagate(e);
+ }
+
+ } else {
+ log.info("No Camp-YAML parser regsitered for parsing catalog item DSL; skipping DSL-parsing");
}
- Map<String,Object> catalogMetadata = MutableMap.<String, Object>builder().putAll(parentMetadata).putAll((Map<? extends String, ?>) itemMetadata).build();
+ Map<Object,Object> catalogMetadata = MutableMap.<Object, Object>builder()
+ .putAll(parentMetadata)
+ .putAll(itemMetadataWithoutItemDef)
+ .putIfNotNull("item", itemMetadata.get("item"))
+ .putIfNotNull("items", itemMetadata.get("items"))
+ .build();
// brooklyn.libraries we treat specially, to append the list, with the child's list preferred in classloading order
// `libraries` is supported in some places as a legacy syntax; it should always be `brooklyn.libraries` for new apps
// TODO in 0.8.0 require brooklyn.libraries, don't allow "libraries" on its own
- List<?> librariesNew = MutableList.copyOf(getFirstAs(itemMetadata, List.class, "brooklyn.libraries", "libraries").orNull());
+ List<?> librariesNew = MutableList.copyOf(getFirstAs(itemMetadataWithoutItemDef, List.class, "brooklyn.libraries", "libraries").orNull());
Collection<CatalogBundle> libraryBundlesNew = CatalogItemDtoAbstract.parseLibraries(librariesNew);
List<?> librariesCombined = MutableList.copyOf(librariesNew)
@@ -423,7 +440,7 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
// (this load is required for the scan below and I think also for yaml resolution)
CatalogUtils.installLibraries(mgmt, libraryBundlesNew);
- Boolean scanJavaAnnotations = getFirstAs(itemMetadata, Boolean.class, "scanJavaAnnotations", "scan_java_annotations").orNull();
+ Boolean scanJavaAnnotations = getFirstAs(itemMetadataWithoutItemDef, Boolean.class, "scanJavaAnnotations", "scan_java_annotations").orNull();
if (scanJavaAnnotations==null || !scanJavaAnnotations) {
// don't scan
} else {
@@ -442,9 +459,9 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
if (items!=null) {
int count = 0;
- for (Map<?,?> i: ((List<Map<String,Object>>)items)) {
+ for (Map<?,?> i: ((List<Map<?,?>>)items)) {
collectCatalogItems(Yamls.getTextOfYamlAtPath(sourceYaml, "items", count).getMatchedYamlTextOrWarn(),
- i, result, catalogMetadata);
+ i, result, catalogMetadata);
count++;
}
}
@@ -592,12 +609,12 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
return oldValue;
}
- private Collection<CatalogItemDtoAbstract<?, ?>> scanAnnotationsFromLocal(ManagementContext mgmt, Map<String, Object> catalogMetadata) {
+ private Collection<CatalogItemDtoAbstract<?, ?>> scanAnnotationsFromLocal(ManagementContext mgmt, Map<?, ?> catalogMetadata) {
CatalogDto dto = CatalogDto.newNamedInstance("Local Scanned Catalog", "All annotated Brooklyn entities detected in the classpath", "scanning-local-classpath");
return scanAnnotationsInternal(mgmt, new CatalogDo(dto), catalogMetadata);
}
- private Collection<CatalogItemDtoAbstract<?, ?>> scanAnnotationsFromBundles(ManagementContext mgmt, Collection<CatalogBundle> libraries, Map<String, Object> catalogMetadata) {
+ private Collection<CatalogItemDtoAbstract<?, ?>> scanAnnotationsFromBundles(ManagementContext mgmt, Collection<CatalogBundle> libraries, Map<?, ?> catalogMetadata) {
CatalogDto dto = CatalogDto.newNamedInstance("Bundles Scanned Catalog", "All annotated Brooklyn entities detected in bundles", "scanning-bundles-classpath-"+libraries.hashCode());
List<String> urls = MutableList.of();
for (CatalogBundle b: libraries) {
@@ -618,7 +635,7 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
return scanAnnotationsInternal(mgmt, subCatalog, catalogMetadata);
}
- private Collection<CatalogItemDtoAbstract<?, ?>> scanAnnotationsInternal(ManagementContext mgmt, CatalogDo subCatalog, Map<String, Object> catalogMetadata) {
+ private Collection<CatalogItemDtoAbstract<?, ?>> scanAnnotationsInternal(ManagementContext mgmt, CatalogDo subCatalog, Map<?, ?> catalogMetadata) {
// TODO this does java-scanning only;
// the call when scanning bundles should use the CatalogItem instead and use OSGi when loading for scanning
// (or another scanning mechanism). see comments on CatalogClasspathDo.load
@@ -999,7 +1016,7 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
};
}
- private static <T,SpecT> Function<CatalogItemDo<T, SpecT>, CatalogItem<T,SpecT>> itemDoToDtoAddingSelectedMetadataDuringScan(final Map<String, Object> catalogMetadata) {
+ private static <T,SpecT> Function<CatalogItemDo<T, SpecT>, CatalogItem<T,SpecT>> itemDoToDtoAddingSelectedMetadataDuringScan(final Map<?, ?> catalogMetadata) {
return new Function<CatalogItemDo<T,SpecT>, CatalogItem<T,SpecT>>() {
@Override
public CatalogItem<T,SpecT> apply(@Nullable CatalogItemDo<T,SpecT> item) {
[5/5] incubator-brooklyn git commit: This closes #1130
Posted by al...@apache.org.
This closes #1130
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/e431e6ad
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/e431e6ad
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/e431e6ad
Branch: refs/heads/master
Commit: e431e6ad3f47378c9e1c1e035654ed65fc4b4964
Parents: 38d3102 6e84d00
Author: Aled Sage <al...@gmail.com>
Authored: Fri Jan 15 22:37:24 2016 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Fri Jan 15 22:37:24 2016 +0000
----------------------------------------------------------------------
.../camp/brooklyn/ExternalConfigYamlTest.java | 114 ++++++++++++++++++-
.../catalog/internal/BasicBrooklynCatalog.java | 47 ++++++--
2 files changed, 149 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e431e6ad/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
----------------------------------------------------------------------
[2/5] incubator-brooklyn git commit: ExternalConfig in catalog:
improve tests
Posted by al...@apache.org.
ExternalConfig in catalog: improve tests
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/786db04f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/786db04f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/786db04f
Branch: refs/heads/master
Commit: 786db04fde914a2544ec09e7c6a12af171cfdbff
Parents: 18cce24
Author: Aled Sage <al...@gmail.com>
Authored: Mon Jan 11 13:27:59 2016 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Mon Jan 11 13:27:59 2016 +0000
----------------------------------------------------------------------
.../camp/brooklyn/ExternalConfigYamlTest.java | 100 ++++++++++++++-----
1 file changed, 76 insertions(+), 24 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/786db04f/brooklyn-server/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ExternalConfigYamlTest.java
----------------------------------------------------------------------
diff --git a/brooklyn-server/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ExternalConfigYamlTest.java b/brooklyn-server/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ExternalConfigYamlTest.java
index b5ce9c9..66d3cfe 100644
--- a/brooklyn-server/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ExternalConfigYamlTest.java
+++ b/brooklyn-server/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ExternalConfigYamlTest.java
@@ -24,8 +24,9 @@ import static org.testng.Assert.fail;
import java.io.StringReader;
import java.util.Map;
-import com.google.common.collect.Iterables;
import org.apache.brooklyn.api.catalog.CatalogItem;
+import org.apache.brooklyn.api.catalog.CatalogItem.CatalogBundle;
+import org.apache.brooklyn.api.catalog.CatalogItem.CatalogItemType;
import org.apache.brooklyn.api.entity.Entity;
import org.apache.brooklyn.api.mgmt.ExecutionContext;
import org.apache.brooklyn.api.mgmt.ManagementContext;
@@ -48,21 +49,35 @@ import org.slf4j.LoggerFactory;
import org.testng.annotations.Test;
import com.google.common.base.Joiner;
+import com.google.common.collect.Iterables;
@Test
public class ExternalConfigYamlTest extends AbstractYamlTest {
private static final Logger log = LoggerFactory.getLogger(ExternalConfigYamlTest.class);
-
- private static final String OSGI_URL = "https://repository.apache.org/content/groups/snapshots/org/apache/brooklyn/brooklyn-core/0.9.0-SNAPSHOT/brooklyn-core-0.9.0-20160108.142251-126.jar";
+
+ // Choose a small jar; it is downloaded in some tests.
+ // Pick an OSGi bundle that is not part of core brooklyn.
+ private static final String LIBRARY_URL = "https://repository.apache.org/content/groups/public/org/apache/logging/log4j/log4j-api/2.5/log4j-api-2.5.jar";
+ private static final String LIBRARY_SYMBOLIC_NAME = "org.apache.logging.log4j.api";
+ private static final String LIBRARY_VERSION = "2.5.0";
@Override
protected LocalManagementContext newTestManagementContext() {
BrooklynProperties props = BrooklynProperties.Factory.newEmpty();
props.put("brooklyn.external.myprovider", MyExternalConfigSupplier.class.getName());
props.put("brooklyn.external.myprovider.mykey", "myval");
- props.put("brooklyn.external.myprovider.osgikey", OSGI_URL);
props.put("brooklyn.external.myproviderWithoutMapArg", MyExternalConfigSupplierWithoutMapArg.class.getName());
+ props.put("brooklyn.external.myprovider.myCatalogId", "myId");
+ props.put("brooklyn.external.myprovider.myCatalogItemType", "template");
+ props.put("brooklyn.external.myprovider.myCatalogVersion", "1.2");
+ props.put("brooklyn.external.myprovider.myCatalogDescription", "myDescription");
+ props.put("brooklyn.external.myprovider.myCatalogDisplayName", "myDisplayName");
+ props.put("brooklyn.external.myprovider.myCatalogIconUrl", "classpath:///myIconUrl.png");
+ props.put("brooklyn.external.myprovider.myCatalogLibraryUrl", LIBRARY_URL);
+ props.put("brooklyn.external.myprovider.myCatalogLibraryName", LIBRARY_SYMBOLIC_NAME);
+ props.put("brooklyn.external.myprovider.myCatalogLibraryVersion", LIBRARY_VERSION);
+
return LocalManagementContextForTests.builder(true)
.useProperties(props)
.disableOsgi(false)
@@ -112,19 +127,52 @@ public class ExternalConfigYamlTest extends AbstractYamlTest {
assertEquals(Iterables.getOnlyElement( app.getLocations() ).config().get(MY_CONFIG_KEY), "myval");
}
- @Test
+ // Will download the given catalog library jar
+ @Test(groups="Integration")
public void testExternalisedCatalogConfigReferencedFromYaml() throws Exception {
+ String yaml = Joiner.on("\n").join(
+ "brooklyn.catalog:",
+ " id: $brooklyn:external(\"myprovider\", \"myCatalogId\")",
+ " itemType: $brooklyn:external(\"myprovider\", \"myCatalogItemType\")",
+ " version: $brooklyn:external(\"myprovider\", \"myCatalogVersion\")",
+ " description: $brooklyn:external(\"myprovider\", \"myCatalogDescription\")",
+ " displayName: $brooklyn:external(\"myprovider\", \"myCatalogDisplayName\")",
+ " iconUrl: $brooklyn:external(\"myprovider\", \"myCatalogIconUrl\")",
+ " brooklyn.libraries:",
+ " - $brooklyn:external(\"myprovider\", \"myCatalogLibraryUrl\")",
+ "",
+ " item:",
+ " services:",
+ " - type: brooklyn.entity.database.mysql.MySqlNode");
+ catalog.addItems(yaml);
+
+ CatalogItem<Object, Object> item = Iterables.getOnlyElement(catalog.getCatalogItems());
+ CatalogBundle bundle = Iterables.getOnlyElement(item.getLibraries());
+ assertEquals(item.getId(), "myId:1.2");
+ assertEquals(item.getCatalogItemType(), CatalogItemType.TEMPLATE);
+ assertEquals(item.getVersion(), "1.2");
+ assertEquals(item.getDescription(), "myDescription");
+ assertEquals(item.getDisplayName(), "myDisplayName");
+ assertEquals(item.getIconUrl(), "classpath:///myIconUrl.png");
+ assertEquals(bundle.getUrl(), LIBRARY_URL);
+ }
+
+ // Will download the given catalog library jar
+ @Test(groups="Integration")
+ public void testExternalisedCatalogConfigReferencedFromYamlWithLibraryMap() throws Exception {
String yaml = Joiner.on("\n").join(
"brooklyn.catalog:",
- " id: osgi.test",
+ " id: myid",
" itemType: template",
- " version: 1.3",
- " description: CentOS 6.6 With GUI - 1.3",
- " displayName: CentOS 6.6",
- " iconUrl: classpath:///centos.png",
+ " version: 1.2",
+ " description: myDescription",
+ " displayName: myDisplayName",
+ " iconUrl: classpath:///myIconUrl.png",
" brooklyn.libraries:",
- " - $brooklyn:external(\"myprovider\", \"osgikey\")",
+ " - name: $brooklyn:external(\"myprovider\", \"myCatalogLibraryName\")",
+ " version: $brooklyn:external(\"myprovider\", \"myCatalogLibraryVersion\")",
+ " url: $brooklyn:external(\"myprovider\", \"myCatalogLibraryUrl\")",
"",
" item:",
" services:",
@@ -132,16 +180,17 @@ public class ExternalConfigYamlTest extends AbstractYamlTest {
catalog.addItems(yaml);
- for (CatalogItem<Object, Object> item: catalog.getCatalogItems()) {
- for (CatalogItem.CatalogBundle library: item.getLibraries()) {
- assertEquals(library.getUrl(), OSGI_URL);
- }
- }
+ CatalogItem<Object, Object> item = Iterables.getOnlyElement(catalog.getCatalogItems());
+ CatalogBundle bundle = Iterables.getOnlyElement(item.getLibraries());
+ assertEquals(bundle.getUrl(), LIBRARY_URL);
+ assertEquals(bundle.getSymbolicName(), LIBRARY_SYMBOLIC_NAME);
+ assertEquals(bundle.getVersion(), LIBRARY_VERSION);
}
- @Test
+ // Will download the given catalog library jar
+ // Confirms "normal" behaviour, when all values in the catalog are hard-coded rather than using external config.
+ @Test(groups="Integration")
public void testNonExternalisedCatalogConfigReferencedFromYaml() throws Exception {
-
String yaml = Joiner.on("\n").join(
"brooklyn.catalog:",
" id: osgi.test",
@@ -151,7 +200,7 @@ public class ExternalConfigYamlTest extends AbstractYamlTest {
" displayName: CentOS 6.6",
" iconUrl: classpath:///centos.png",
" brooklyn.libraries:",
- " - " + OSGI_URL,
+ " - " + LIBRARY_URL,
"",
" item:",
" services:",
@@ -159,11 +208,14 @@ public class ExternalConfigYamlTest extends AbstractYamlTest {
catalog.addItems(yaml);
- for (CatalogItem<Object, Object> item: catalog.getCatalogItems()) {
- for (CatalogItem.CatalogBundle library: item.getLibraries()) {
- assertEquals(library.getUrl(), OSGI_URL);
- }
- }
+ CatalogItem<Object, Object> item = Iterables.getOnlyElement(catalog.getCatalogItems());
+ assertEquals(item.getId(), "osgi.test:1.3");
+ assertEquals(item.getCatalogItemType(), CatalogItemType.TEMPLATE);
+ assertEquals(item.getVersion(), "1.3");
+ assertEquals(item.getDescription(), "CentOS 6.6 With GUI - 1.3");
+ assertEquals(item.getDisplayName(), "CentOS 6.6");
+ assertEquals(item.getIconUrl(), "classpath:///centos.png");
+ assertEquals(Iterables.getOnlyElement(item.getLibraries()).getUrl(), LIBRARY_URL);
}
@Test(groups="Integration")
[4/5] incubator-brooklyn git commit: Merge pull request #1 from
aledsage/iyovcheva/externalised-config-in-catalog-definition-aled
Posted by al...@apache.org.
Merge pull request #1 from aledsage/iyovcheva/externalised-config-in-catalog-definition-aled
Externalised config in catalog definition
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/6e84d008
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/6e84d008
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/6e84d008
Branch: refs/heads/master
Commit: 6e84d008cb649ed0fb26b4b4e8f6d2a8c3721aef
Parents: 18cce24 4dbbc9c
Author: iyovcheva <iv...@gmail.com>
Authored: Tue Jan 12 10:21:39 2016 +0200
Committer: Ivana Yovcheva <iv...@gmail.com>
Committed: Tue Jan 12 12:02:12 2016 +0200
----------------------------------------------------------------------
.../camp/brooklyn/ExternalConfigYamlTest.java | 100 ++++++++++++++-----
.../catalog/internal/BasicBrooklynCatalog.java | 55 ++++++----
2 files changed, 112 insertions(+), 43 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6e84d008/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
----------------------------------------------------------------------
diff --cc brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
index 4f44dab,7e0b69e..81b273e
--- a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
+++ b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
@@@ -378,7 -378,7 +378,7 @@@ public class BasicBrooklynCatalog imple
catalogMetadata.remove("items");
if (!itemDef.isEmpty()) {
log.debug("Reading brooklyn.catalog peer keys as item ('top-level syntax')");
- Map<String,Object> rootItem = MutableMap.of("item", (Object) itemDef);
- Map<String,?> rootItem = MutableMap.of("item", (Object) itemDef);
++ Map<String,?> rootItem = MutableMap.of("item", itemDef);
String rootItemYaml = yaml;
YamlExtract yamlExtract = Yamls.getTextOfYamlAtPath(rootItemYaml, "brooklyn.catalog");
String match = yamlExtract.withOriginalIndentation(true).withKeyIncluded(true).getMatchedYamlTextOrWarn();