GitHub user ahgittin opened a pull request:
https://github.com/apache/brooklyn-server/pull/363
YOML = YAML object mapping language [BIG!]
*As discussed on mailing list...*
I've been spiking a new approach to our YAML modelling for java objects.
The root problem I want to solve is to that it's tedious, inconsistent, and
poorly documented how YAML should map on to the Java items. Every new place we
want to do this we use ad hoc code. This is an obstacle to writing new java
items which can easily be configured in YAML by any Brooklyn user.
The idea of the solution is to have a schema for mapping Java <-> YAML so
you can simply annotate the Java classes and the job's done. You get a working
schema for reading from YAML without having to think about it. The thinking is
that this lets us make many more things expressible in YAML, including:
* effectors defined as sequences of tasks
* common predicates (as has been discussed in #282 [1] and the mailing list)
* more sensor feeds, policies, etc
I've built a prototype called "YOML" (YAML Object Mapping Language) and
opened a PR for it [2].
As it stands it supports reading and writing (so we could improve our
persistence model and be able to output reusable plans from the current state
of the world -- though I've not worked on those), and it's designed to be very
flexible, optimizing for the experience of the human reading and writing it.
It also has hooks for reflecting about itself -- meaning we could generate
documentation and code completion proposals with explanations for everything
that is YOML'd (though again not implemented).
It's integrated with the new BrooklynTypeRegistry (code which replaces the
old fixed-type-category catalog, allowing arbitrary types and aliases; it's
used currently, but not persisted, and we're not taking advantage of it yet; we
could also use this to restrict who can use which types) and has a
TypePlanTransformer so we can use it in specific places. You can use anywhere
the YAML DSL is supported by saying `$brooklyn:object-yoml: ...`, and it's
hooked in specially in one place, under brooklyn.initializers if you supply a
map (previously only a list was allowed), with some sensor/effector tests at
[3], in short allowing:
- type: org.apache.brooklyn.entity.software.base.EmptySoftwareProcess
brooklyn.initializers:
echo-hi-name-from-config:
type: ssh-effector
command: echo hi ${NAME}
env:
NAME: $brooklyn:config("name")
date:
type: ssh-sensor
command: date
period: 100ms
brooklyn.config:
name: bob
A detailed write-up is at [4].
I could do an online brown-bag session next week if folks are interested.
[1] https://github.com/apache/brooklyn-server/pull/282
[2] (this)
[3]
https://github.com/ahgittin/brooklyn-server/blob/yoml/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/yoml/YomlTypeRegistryEntityInitializersTest.java
[4]
https://github.com/ahgittin/brooklyn-server/blob/yoml/utils/common/src/main/java/org/apache/brooklyn/util/yoml/sketch.md
You can merge this pull request into a Git repository by running:
$ git pull https://github.com/ahgittin/brooklyn-server yoml
Alternatively you can review and apply these changes as the patch at:
https://github.com/apache/brooklyn-server/pull/363.patch
To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:
This closes #363
----
commit 2a05370de0da5af73cb80276620cd923af0659a6
Author: Alex Heneveld <[email protected]>
Date: 2016-09-30T13:19:10Z
bump httpcomponents versions
note core and client are no longer kept in sync; latest version of each has
been taken
commit 1d4a289ef55834e494ce493046fa1a6ab4b4026e
Author: Alex Heneveld <[email protected]>
Date: 2016-06-09T16:01:00Z
Start work on YAML Object Relational Mapping Language
commit 7d350e1b88e0c933eeb97eeabf91a885368d1248
Author: Alex Heneveld <[email protected]>
Date: 2016-09-28T14:28:02Z
minor tidies to utils
commit 29e1277254e40a5a21e7ff50042e2844e295cbf6
Author: Alex Heneveld <[email protected]>
Date: 2016-09-28T14:34:34Z
add static Maybe.getException(maybe) to avoid messy casts to Absent, and
Asserts methods
commit 76aec8b48aa9ce7b801a8264c0e86cd909b4ec4c
Author: Alex Heneveld <[email protected]>
Date: 2016-06-24T10:03:40Z
more YORML improvements, now dealing with fields in fields, primtives, and
coercion
commit 0ebe35430a76e8aeb8b6725b751eadabcebb7994
Author: Alex Heneveld <[email protected]>
Date: 2016-06-24T10:13:27Z
flesh out much more of YORML
commit b28016bb5b9fce34ddb2c420e371c4686b355e47
Author: Alex Heneveld <[email protected]>
Date: 2016-06-24T21:50:37Z
more yorml - implicit types and fail on incomplete read
commit 2ddcf8ee402a1df51bd35639e1f3ed1c49b8c293
Author: Alex Heneveld <[email protected]>
Date: 2016-06-27T00:14:31Z
notes for explicit-field, failing test, and preparatory refactor
commit 2899685a3b69a2881c92da6e3a50d45e732e3697
Author: Alex Heneveld <[email protected]>
Date: 2016-06-27T01:23:12Z
explicit fields basic working for expected types
commit 3f9f677647a32d97ebbecf59fb3d8b1208075717
Author: Alex Heneveld <[email protected]>
Date: 2016-06-27T02:04:38Z
explicit fields working also for declared types
using serializers on the blackboard
and more refactor using now an internal package
and cleaning up sketch
commit e52cf60c5d11b350de25021e5536b17e9c0fe22b
Author: Alex Heneveld <[email protected]>
Date: 2016-06-27T10:04:12Z
WIP handling defaults, before switching to phases
commit 6d8d74d6218fdb413d03327262f34150fc437465
Author: Alex Heneveld <[email protected]>
Date: 2016-06-27T12:07:48Z
switching to using phases for YORML conversion
fleshing out how explicit fields will handle defaults/aliases,
with tests,
and fixing a bug in primitive handling
commit 8fd869abec5efe333bb9eb26299743cbf49c3c28
Author: Alex Heneveld <[email protected]>
Date: 2016-06-27T16:01:10Z
serializers are inherited and explicit-field respects multiple/inherited
also supporting multiple supertypes in the tests
commit 96bc455b38e062a9198e577a66f39a9bd220316a
Author: Alex Heneveld <[email protected]>
Date: 2016-06-27T16:18:54Z
explicit-field alias control: inherit and exclude field name
commit df53b2c60d0a5df28a3d5b890108dd60e5d3876f
Author: Alex Heneveld <[email protected]>
Date: 2016-06-27T17:15:53Z
name mangling for explicit-field, and tidies around constraint
commit e672a5624f299a455c41d3a593692f0ba60a2d1d
Author: Alex Heneveld <[email protected]>
Date: 2016-06-28T16:38:43Z
support lists/sets, and tidy
commit 97e86597d668249ac3afca46ed20a4468084fe42
Author: Alex Heneveld <[email protected]>
Date: 2016-06-29T02:45:30Z
misc utils minor improvements
mainly around findMethod
commit c7651ac2256c1938495caa866ad683b0d67dad0d
Author: Alex Heneveld <[email protected]>
Date: 2016-06-29T02:46:17Z
add yorml map support, fix list support, other minor fixes
commit 027a43a5053e91e388eabb95f510f85067e9efbd
Author: Alex Heneveld <[email protected]>
Date: 2016-06-29T10:53:38Z
support enums
commit 0b67b89851c9286d30db946e360b3dd85c00c208
Author: Alex Heneveld <[email protected]>
Date: 2016-06-29T12:34:13Z
easy way to make all fields explicit, and related fixes
also failing test for map/list generics which i'm about to fix
commit 9328c3f1da3966c235015dbd5c92c42652d2ae17
Author: Alex Heneveld <[email protected]>
Date: 2016-06-29T13:37:28Z
support generics from fields for map/list/set
commit c6daf517b21b462e0a55fcc047e5c0b2f06c9d53
Author: Alex Heneveld <[email protected]>
Date: 2016-06-30T12:36:17Z
support clever parsing of singleton maps
commit 966a1b93496a692f90d930f41975918d365ad9eb
Author: Alex Heneveld <[email protected]>
Date: 2016-08-12T15:34:06Z
yorml notes
commit 8824a3e8a37e241d16a4448432a892ac33eb49ce
Author: Alex Heneveld <[email protected]>
Date: 2016-08-31T14:28:06Z
rename it YOML as it's not relational
commit a7e332933d44e081095ae67944cff680e5d80343
Author: Alex Heneveld <[email protected]>
Date: 2016-08-31T15:43:49Z
docs tweaks
commit b9eef70d4acb13276deadd03afc28746751a5981
Author: Alex Heneveld <[email protected]>
Date: 2016-09-02T14:49:29Z
camp yoml transformer and type-registry integration fleshing out
tests demonstrate adding types and resolving them through the brooklyn type
creation api
commit 81f03f346daf13c9bb55b10dd22b2d06f050beec
Author: Alex Heneveld <[email protected]>
Date: 2016-09-05T17:49:57Z
minor yoml improvements
commit bbb178b35ca9681c78393032b031d78ffffb7877
Author: Alex Heneveld <[email protected]>
Date: 2016-09-07T14:48:12Z
serializers and supertypes/java-type
better handling for serializer collection and supertypes/java-type in
underlying yoml and brooklyn registry integration
and error reporting
commit ea092dbdc0b3db15d355a51ed53e14065e019858
Author: Alex Heneveld <[email protected]>
Date: 2016-09-07T17:04:19Z
support annotations for serializers
commit ec0812158472a7b87bf4751603a634814905c3bf
Author: Alex Heneveld <[email protected]>
Date: 2016-09-07T21:48:05Z
support yoml annotations in transformer
----
---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---