Release Notes
Version 0.10.0
Thanks go to our community for their improvements, feedback and guidance, and to Brooklyn’s commercial users for funding much of this development.
New Features
Improved Blueprints
Significant work has gone into making YAML blueprints more powerful. The DSL is more expressive and a variety of new general-purpose entities, enrichers and policies have been written.
New general-purpose constructs:
- The
InvokeEffectorOnSensorChange
andInvokeEffectorOnCollectionSensorChange
policies execute effectors on entities whenever a target sensor changes. ProxyEffector
forwards effector invocations from one entity to another.ConditionalEntity
creates an entity based on the truth of a config key (e.g.$brooklyn:scopeRoot().config("enable.loadBalancer")
).OnPublicNetworkEnricher
grants finer control of mapping public and private network addresses to sensors.PercentageEnricher
publishes the ratio of two sensors.
New blueprint DSL features:
$brooklyn:entity
supports nested function calls;$brooklyn:object
supports parameterised constructors and static factory methods, hugely increasing the range of objects that can be injected into entities;$brooklyn:entityId
returns the target entity’s ID; and$brooklyn:self
accesses the resolving task’s context entity.
Bundled entities
There have been many updates to the entities bundled with Brooklyn. In particular:
DynamicCluster
allows configuration of member removal strategies.- The
Transformer
enricher can be triggered by events on multiple sensors. ZooKeeperNode
publishes main.uri andZooKeeperEnsemble
aggregates hosts and ports into comma-separated list underzookeeper.endpoints
.BindDnsServer
listens on all interfaces and supports Centos and RHEL.NginxController
supports proxying with TLS client certificates.RiakNode
optionally configures security groups for intra-node communication when supported by the target cloud.PostgreSqlNode
can be configured to grant user roles.SharedLocationSecurityGroupCustomizer
enables security group configuration in yaml blueprints.- Feeds no longer poll if their entity is unmanaged.
Several new test-case entities are introduced:
TestHttpCall
supports a greatly expanded range of options.TestEndpointReachable
tests that a TCP endpoint can be reached.TestWinrmCommand
tests the success of commands in Windows instances.RelativeEntityTestCase
lets you write test cases that resolve their target from another entity.
Additionally, location customisers can now be attached to entities as
initialisers, rather than having to dig into their templateOptions
.
Brooklyn server
-
The REST API requires CSRF headers for non-GET and HEAD requests when sessions are in effect. See CsrfTokenFilter for details.
-
The catalogue scanner can be configured with whitelists and blacklists of bundle IDs to control which bundles may present applications in the catalogue.
-
The Karaf distribution includes equivalents of the cloud explorer commands.
-
PerUserEntitlementManager
transforms the “user” keyword into an entitlement to everything butROOT
andSEE_ALL_SERVER_INFO
. -
Myriad performance and reliability improvements.
New CLI commands
The CLI has better integration with the Brooklyn server catalogue. New commands
exist to list
its items, show
verbose descriptions of entries and to delete
them. SSL certificate chain and hostname verification can be disabled by running
with the --skipSslChecks
flag.
Backwards Compatibility
To address limitations in the handling of configuration and inheritance the following changes were made:
-
[major] Config is now resolved against the ancestor where it is defined e.g. attributeWhenReady;
-
[major] ConfigMap.submap is no longer supported for entity config; findKeys has been introduced, and the method is available on the main sub-interfaces where it was used
-
[major] Location config is treated like Entities and Adjuncts; it respects inheritance as a consequence of this, some persisted usage information is no longer available.
Please refer to pull requests #340 and #281 for more details on the above three incompatibilities.
-
[major]
DynamicGroup
only filters entities in the same application rather than the whole management context. -
[major]
VanillaSoftwareProcess
commands are no longer inherited by its children. -
[major] Non-zero results from the various pre- and post- commands for
SoftwareProcess
cause entity failure, where previously they were silently accepted. -
[minor] Entities using
org.apache.brooklyn.entity.software.base.AbstractSoftwareProcessDriver
execute pre- and post-launch commands when restarting. -
[minor]
ClassCoercionException
has moved package. The old one was deleted to prevent errors inadvertently trying to catch it. -
[minor] Default config key values are now coerced to the right type when accessed. Previously coercion only applied to values set, so if a default value was accessed, the caller would get the value and type of the default value, not coerced to the type of the config key. This was inconsistent with cases where a value is set for the config key, as callers in that case will get the value coerced to the type of the config key. This was a bug as callers should always be able to expect the config value to be of the declared type, consistently across default values and explicitly set values.
As an example, if a config key is typed (e.g.
port
) and a caller uses code such as$brooklyn:config
to access that value, previously they would see the numeric value if the value comes from a default; if that is what is being expected it is an error as a JSON map forPortRange
would be returned if a config value is set, but the erroneous usage might not have been noticed if the port only ever came from a default value. The fix in this case is to use$brooklyn:attributeWhenReady
if the caller wants the actual value selected from the range (through port inferencing done e.g. inSoftwareProcess
entities), or to declare the sensor of typeint
if they do not want port ranges and inferencing to be supported. -
[minor]
SimpleShellCommandTest
is renamedTestSshCommand
. -
[minor] The
/{entity}/spec
API endpoint responds with unquotedtext/x-yaml
rather than json.
For changes in prior versions, please refer to the release notes for 0.9.0.