Catalog
Brooklyn provides a catalog, which is a persisted collection of versioned blueprints. These can be deployed directly or referenced by other blueprints. Blueprints in the catalog can be deployed via the Brooklyn REST API, or from the web-console’s “Catalog” tab of the “Create Application” wizard dialog box.
Catalog Items
An item to be added to the catalog is defined in YAML. This follows the syntax of a
YAML blueprint with an addition brooklyn.catalog
section giving
the metadata needed to register the blueprint in the catalog:
brooklyn.catalog:
id: my-MySQL
version: 1.0
iconUrl: classpath://mysql.png
description: MySql is an open source relational database management system (RDBMS)
libraries:
- url: http://example.com/path/to/my-dependency-1.2.3.jar
- url: http://example.com/path/to/my-other-dependency-4.5.6.jar
services:
- type: brooklyn.entity.database.mysql.MySqlNode
To explain the brooklyn.catalog
fields:
- The
id: MySQL
line specifies a unique ID used by Brooklyn to identify the catalog item. Other blueprints can reference the catalog item using this id. - The
version: 1.0
line provides a unique version for the blueprint. Note that this is typically not the version of the software being installed (in this case MySQL). - The
iconUrl: classpath://...
is an optional line where an icon can be specified for use with the item (in the “Add Application” dialog and elsewhere). Note thatclasspath
URLs cannot refer to items in the OSGi bundle (to prevent requiring all OSGi bundles to be loaded at launch); use the server supplying the OSGi bundles or theconf
folder of the Brooklyn distro instead. - The
description: ...
line, also optional, allows supplying a free-format description of the blueprint.
The libraries
section references OSGi bundles required for the blueprint. It can be omitted if everything
required by the blueprint is already on the Brooklyn classpath.
These URL’s should be to stable 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.
To avoid this situation, it is highly recommended to use OSGi version stamps as part of the URL.
To reference a catalog item in another blueprint, simply reference its ID and optionally its version number. For example:
services:
- type: my-MySQL:1.0
Adding to the Catalog
To add a catalog item to the catalog, POST
the YAML file to /v1/catalog
endpoint in
Brooklyn’s REST API.
To do this using curl
:
curl http://127.0.0.1:8081/v1/catalog --data-binary @/path/to/mysql-catalog.yaml
Deleting from the Catalog
You can delete a versioned item from the catalog using the same endpoint as the REST API.
For example, to delete the item with id my-MySQL
and version 1.0
with curl
:
curl -X DELETE http://127.0.0.1:8081/v1/catalog/entities/MySQL/1.0
Note: Catalog items should not be deleted if there are running apps which were created using the same item. During rebinding the catalog item is used to reconstruct the entity.
If you have running apps which were created using the item you wish to delete, you should instead deprecate the catalog item. Deprecated catalog items will not appear in the add application wizard, or in the catalog list but will still be available to Brooklyn for rebinding. The option to display deprecated catalog items in the catalog list will be added in a future release.
Deprecation applies to a specific version of a catalog item, so the full id including the version number is passed to the REST API as follows:
curl -X POST http://127.0.0.1:8081/v1/catalog/entities/MySQL:1.0/deprecated/true
Versioning
Version numbers follow the OSGi convention. This can have a major, minor, micro and qualifier part.
For example, 1.0
. 1.0.1
or 1.0.1-20150101
.
The combination of id:version
strings must be unique across the catalog.
It is an error to deploy the same version of an existing item:
to update a blueprint, it is recommended to increase its version number;
alternatively in some cases it is permitted to delete an id:version
instance
and then re-deploy.
If no version is specified, re-deploying will automatically
increment an internal version number for the catalog item.
When referencing a blueprint, if a version number is not specified the latest non-snapshot version will be loaded when an entity is instantiated.
Special Requirements for the “Create Application” Wizard Dialog
For a blueprint in the catalog to be accessible via the ‘Create Application’ dialog, it must be an Application
(i.e. the entity at the root of the blueprint must implement brooklyn.entity.Application
).
In contrast, if a YAML blueprint is deployed direct via the REST API, then this is not necessary.
For example, the MySql catalog item defined previously could be re-written to use a
brooklyn.entity.basic.BasicApplication
, because no application-specific logic is
required other than to pass-through the start and stop commands.
the MySqlNode
is added as a child of the BasicApplication
.
brooklyn.catalog:
id: my-MySQL
version: 1.0
iconUrl: classpath://mysql.png
description: MySql is an open source relational database management system (RDBMS)
name: MySQL Database
services:
- type: brooklyn.entity.basic.BasicApplication
brooklyn.children:
- type: brooklyn.entity.database.mysql.MySqlNode
When added to the catalog via the HTTP POST
command, the blueprint will appear in the ‘Create Application’ dialog
as shown here:
When deploying a new version of a blueprint, the catalog will show both the previous and the new versions of the blueprint. You may wish to delete the older version, assuming no applications currently running are using that old version.