a few more catalog multi-item yaml doc tweaks. examples confirmed working!
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/90be105f Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/90be105f Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/90be105f Branch: refs/heads/master Commit: 90be105fe17abb6bdb87b029be0a030c7ee6802d Parents: eaaca78 Author: Alex Heneveld <[email protected]> Authored: Wed Apr 8 00:32:23 2015 +0100 Committer: Alex Heneveld <[email protected]> Committed: Thu Apr 16 01:25:39 2015 -0500 ---------------------------------------------------------------------- .../catalog/internal/BasicBrooklynCatalog.java | 4 -- docs/guide/ops/catalog/index.md | 75 ++++++++++---------- 2 files changed, 36 insertions(+), 43 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/90be105f/core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java b/core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java index 09ef02f..b773247 100644 --- a/core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java +++ b/core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java @@ -570,10 +570,6 @@ public class BasicBrooklynCatalog implements BrooklynCatalog { if (sourceYaml==null) sourceYaml = new Yaml().dump(itemMetadata); - // TODO: -// docs used as test cases -- (doc assertions that these match -- or import -- known test cases yamls) -// multiple versions in web app root - Map<Object,Object> catalogMetadata = MutableMap.builder().putAll(parentMetadata).putAll(itemMetadata).build(); // libraries we treat specially, to append the list, with the child's list preferred in classloading order http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/90be105f/docs/guide/ops/catalog/index.md ---------------------------------------------------------------------- diff --git a/docs/guide/ops/catalog/index.md b/docs/guide/ops/catalog/index.md index 8f627d4..9eeca9c 100644 --- a/docs/guide/ops/catalog/index.md +++ b/docs/guide/ops/catalog/index.md @@ -12,7 +12,7 @@ children: Brooklyn provides a **catalog**, which is a persisted collection of versioned blueprints and other resources. Blueprints in the catalog can be deployed directly, via the Brooklyn REST API or the web console, -or referenced in other blueprints. +or referenced in other blueprints using their `id`. ### Catalog Items YAML Syntax @@ -75,22 +75,25 @@ The following metadata is *required* for all items: this field disambiguates between blueprints of the same `id`. Note that this is typically *not* the version of the software being installed, but rather the version of the blueprint. For more information on versioning, see below. + (Also note YAML treats numbers differently to Strings. Explicit quotes may sometimes be required.) To reference a catalog item in another blueprint, simply reference its ID and optionally its version number. -For example: +For instance, if we've added an item with metadata `{ id: datastore, version: "1.0" }` (such as the example below), +we could refer to it in another blueprint with: ```yaml services: - type: datastore:1.0 ``` -In addition, exactly **one** of the following is also required: +In addition to the above fields, exactly **one** of the following is also required: - `item`: the blueprint (in the usual YAML format) for an entity or application template, or a map containing `type` and optional `brooklyn.config` for policies and locations; **or** - `items`: a list of catalog items, where each entry in the map follows the same schema as the `brooklyn.catalog` value, and the keys in these map override any metadata specified as - a sibling of this `items` key (or, in the case of `libraries` they add to the list) + a sibling of this `items` key (or, in the case of `libraries` they add to the list); + if there are references between items, then order is important, with forward references not supported. The following optional catalog metadata is supported: @@ -109,11 +112,16 @@ The following optional catalog metadata is supported: (to prevent requiring all OSGi bundles to be loaded at launch). Icons are instead typically installed either at the server from which the OSGi bundles or catalog items are supplied or in the `conf` folder of the Brooklyn distro. -- `libraries`: a list of pointers to OSGi bundles required for the catalog item. - This can be omitted if blueprints are pure YAML and everything required is included in the catalog file, at URLs, - or in the Brooklyn classpath. If custom Java code or bundled resources is used, the OSGi JARs supply +- `libraries`: a list of pointers to OSGi bundles required for the catalog item,. + This can be omitted if blueprints are pure YAML and everything required is included in the classpath and catalog. + Where custom Java code or bundled resources is needed, however, OSGi JARs supply a convenient packaging format and a very powerful versioning format. - Note that these URL's should point at immutable OSGi bundles; + Libraries should be supplied in the form + `libraries: [ "http://...", "http://..." ]`, + or as + `libraries: [ { name: symbolic-name, version: 1.0, url: http://... }, ... ]` if `symbolic-name:1.0` + might already be installed from a different URL and you want to skip the download. + Note that these URLs should point at immutable OSGi bundles; if the contents at any of these URLs changes, the behaviour of the blueprint may change whenever a bundle is reloaded in a Brooklyn server, and if entities have been deployed against that version, their behavior may change in subtle or potentially incompatible ways. @@ -126,9 +134,8 @@ The following optional catalog metadata is supported: The following example installs the `RiakNode` entity, making it also available as an application template, with a nice display name, description, and icon. -It can be referred in other blueprints to as `datastore:1.0`, -and its implementation will be the Java `brooklyn.entity.nosql.riak.RiakNode` -loaded from a classpath including an OSGi bundle and Brooklyn. +It can be referred in other blueprints to as `datastore:1.0`, +and its implementation will be the Java class `brooklyn.entity.nosql.riak.RiakNode` included with Brooklyn. ```yaml brooklyn.catalog: @@ -138,9 +145,8 @@ brooklyn.catalog: icon.url: classpath://brooklyn/entity/nosql/riak/riak.png name: Datastore (Riak) description: Riak is an open-source NoSQL key-value data store. - libraries: - - url: http://example.com/path/to/my-dependency-1.2.3.jar item: + services: - type: brooklyn.entity.nosql.riak.RiakNode name: Riak Node ``` @@ -155,13 +161,22 @@ brooklyn.catalog: version: 1.1 icon.url: classpath://brooklyn/entity/nosql/riak/riak.png description: Riak is an open-source NoSQL key-value data store. - libraries: - - url: http://example.com/path/to/my-dependency-1.2.3.jar items: + - id: riak-node + item: + services: + - type: brooklyn.entity.nosql.riak.RiakNode + name: Riak Node + - id: riak-cluster + item: + services: + - type: brooklyn.entity.nosql.riak.RiakCluster + name: Riak Cluster - id: datastore name: Datastore (Riak Cluster) item.type: template item: + services: - type: riak-cluster location: jclouds:softlayer: @@ -175,27 +190,18 @@ brooklyn.catalog: provisioning.properties: # you can also define machine specs minRam: 8gb - - id: riak-cluster - item: - - type: brooklyn.entity.nosql.riak.RiakCluster - name: Riak Cluster - - id: riak-node - item: - - type: brooklyn.entity.nosql.riak.RiakNode - name: Riak Node ``` The items this will install are: -- `riak-cluster` is available as a convenience short name for the full class, as an entity, - with an additional OSGi bundle installed -- `datastore` provides the `riak-cluster` blueprint, in SoftLayer and with the given size and machine spec, +- `riak-node`, as before, but with a different name +- `riak-cluster` as a convenience short name for the `brooklyn.entity.nosql.riak.RiakCluster` class +- `datastore`, now pointing at the `riak-cluster` blueprint, in SoftLayer and with the given size and machine spec, as the default implementation for anyone requesting a `datastore` (and if installed atop the previous example, new references to `datastore` will access this version because it is a higher number); - because it is a template, users will have the opportunity to edit the YAML (see below) -- `riak-node` is also installed, as before (but with a different name) - + because it is a template, users will have the opportunity to edit the YAML (see below). + (This must be supplied after `riak-cluster`, because it refers to `riak-cluster`.) ### Templates and the Add-Application Wizard @@ -268,15 +274,6 @@ the latest non-snapshot version will be loaded when an entity is instantiated. - <!-- -TODO: Should improve the 'Create Application' dialog, so that the two versions don't appear on the front page. -Currently they are indistinguisable, if they have the same description/icon. +TODO: make test cases from the code snippets here, and when building the docs assert that they match test cases --> - - -<!-- -TODO: Add section that explains how to add plain entities to the catalog and use them either from the App Wizard, -(and entity UI) or embed the catalog id + version in another YAML ---> -
