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
InvokeEffectorOnSensorChangeandInvokeEffectorOnCollectionSensorChangepolicies execute effectors on entities whenever a target sensor changes. ProxyEffectorforwards effector invocations from one entity to another.ConditionalEntitycreates an entity based on the truth of a config key (e.g.$brooklyn:scopeRoot().config("enable.loadBalancer")).OnPublicNetworkEnrichergrants finer control of mapping public and private network addresses to sensors.PercentageEnricherpublishes the ratio of two sensors.
New blueprint DSL features:
$brooklyn:entitysupports nested function calls;$brooklyn:objectsupports parameterised constructors and static factory methods, hugely increasing the range of objects that can be injected into entities;$brooklyn:entityIdreturns the target entity’s ID; and$brooklyn:selfaccesses the resolving task’s context entity.
Bundled entities
There have been many updates to the entities bundled with Brooklyn. In particular:
DynamicClusterallows configuration of member removal strategies.- The
Transformerenricher can be triggered by events on multiple sensors. ZooKeeperNodepublishes main.uri andZooKeeperEnsembleaggregates hosts and ports into comma-separated list underzookeeper.endpoints.BindDnsServerlistens on all interfaces and supports Centos and RHEL.NginxControllersupports proxying with TLS client certificates.RiakNodeoptionally configures security groups for intra-node communication when supported by the target cloud.PostgreSqlNodecan be configured to grant user roles.SharedLocationSecurityGroupCustomizerenables security group configuration in yaml blueprints.- Feeds no longer poll if their entity is unmanaged.
Several new test-case entities are introduced:
TestHttpCallsupports a greatly expanded range of options.TestEndpointReachabletests that a TCP endpoint can be reached.TestWinrmCommandtests the success of commands in Windows instances.RelativeEntityTestCaselets 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.
-
PerUserEntitlementManagertransforms the “user” keyword into an entitlement to everything butROOTandSEE_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]
DynamicGrouponly filters entities in the same application rather than the whole management context. -
[major]
VanillaSoftwareProcesscommands are no longer inherited by its children. -
[major] Non-zero results from the various pre- and post- commands for
SoftwareProcesscause entity failure, where previously they were silently accepted. -
[minor] Entities using
org.apache.brooklyn.entity.software.base.AbstractSoftwareProcessDriverexecute pre- and post-launch commands when restarting. -
[minor]
ClassCoercionExceptionhas 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:configto 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 forPortRangewould 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:attributeWhenReadyif the caller wants the actual value selected from the range (through port inferencing done e.g. inSoftwareProcessentities), or to declare the sensor of typeintif they do not want port ranges and inferencing to be supported. -
[minor]
SimpleShellCommandTestis renamedTestSshCommand. -
[minor] The
/{entity}/specAPI endpoint responds with unquotedtext/x-yamlrather than json.
For changes in prior versions, please refer to the release notes for 0.9.0.