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 300f88f5d0415de447f1e850173f00d23c8e56b1 Author: Alex Heneveld <[email protected]> AuthorDate: Mon Dec 6 12:36:16 2021 +0000 allow BOM used to make a ZIP to give extra OSGi headers --- .../brooklyn/core/catalog/internal/BasicBrooklynCatalog.java | 6 +++++- .../core/typereg/BrooklynBomYamlCatalogBundleResolver.java | 9 +++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java index cf21aaf..4cde1de 100644 --- a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java +++ b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java @@ -116,9 +116,13 @@ public class BasicBrooklynCatalog implements BrooklynCatalog { /** Header on bundle indicating it is a wrapped BOM with no other resources */ public static final String BROOKLYN_WRAPPED_BOM_BUNDLE = "Brooklyn-Wrapped-BOM"; + @VisibleForTesting public static final boolean AUTO_WRAP_CATALOG_YAML_AS_BUNDLE = true; - + + /** key within brooklyn.catalog containing a map of items used to generate headers if an OSGi bundle is being produced by wrapping the YAML */ + public static final String CATALOG_OSGI_WRAP_HEADERS = "catalog.osgi.wrap.headers"; + private static final Logger log = LoggerFactory.getLogger(BasicBrooklynCatalog.class); public static class BrooklynLoaderTracker { diff --git a/core/src/main/java/org/apache/brooklyn/core/typereg/BrooklynBomYamlCatalogBundleResolver.java b/core/src/main/java/org/apache/brooklyn/core/typereg/BrooklynBomYamlCatalogBundleResolver.java index 110533c..642ce03 100644 --- a/core/src/main/java/org/apache/brooklyn/core/typereg/BrooklynBomYamlCatalogBundleResolver.java +++ b/core/src/main/java/org/apache/brooklyn/core/typereg/BrooklynBomYamlCatalogBundleResolver.java @@ -107,6 +107,15 @@ public class BrooklynBomYamlCatalogBundleResolver extends AbstractCatalogBundleR mf.getMainAttributes().putValue(Attributes.Name.MANIFEST_VERSION.toString(), BasicBrooklynCatalog.OSGI_MANIFEST_VERSION_VALUE); mf.getMainAttributes().putValue(BasicBrooklynCatalog.BROOKLYN_WRAPPED_BOM_BUNDLE, Boolean.TRUE.toString()); + Object impliedHeaders = cm.get(BasicBrooklynCatalog.CATALOG_OSGI_WRAP_HEADERS); + if (impliedHeaders instanceof Map) { + ((Map<?, ?>) impliedHeaders).forEach((k,v)->{ + mf.getMainAttributes().putValue(Strings.toString(k), Strings.toString(v)); + }); + } else if (impliedHeaders!=null) { + throw new IllegalStateException("Must contain map of OSGi headers to insert in "+BasicBrooklynCatalog.CATALOG_OSGI_WRAP_HEADERS); + } + BundleMaker bm = new BundleMaker(mgmt); File bf = bm.createTempBundle(vn.getSymbolicName(), mf, MutableMap.of( new ZipEntry(BasicBrooklynCatalog.CATALOG_BOM), (InputStream) new ByteArrayInputStream(yaml.getBytes())));
