Hi. The 'formatString' example you quote would normally be written like this, though:
brooklyn.config: brooklyn.example.db.url: $brooklyn:formatString: - "jdbc:%s%s?user=%s\\&password=%s" - $brooklyn:component("db").attributeWhenReady("datastore.url") - "visitors" - "brooklyn" - "br00k11n" So, I'm not sure what we gain here? I'll have a proper look at the YAML spec, though, and see if I can understand it better. Cheers, Andrew. On Wed, 13 Jul 2016 at 13:35 Thomas Bouron <thomas.bou...@cloudsoftcorp.com> wrote: > Hi All > > The YAML spec[1] has a very nice and standard way of defining custom types > by prefixing any value or object by a `!!<type_name>`. This seems like a > perfect feature for the Brooklyn DSL instead of the `$brooklyn:<command>`. > Let's me explain why. > > Right now, a Brooklyn DSL command needs to be written as a string such as: > $brooklyn:formatString("jdbc:%s%s?user=%s\\&password=%s", > component("db").attributeWhenReady("datastore.url"), > "visitors", "brooklyn", "br00k11n") > However, any good YAML library (such as js-yaml[2]) to parse and dump YAML > <--> JSON would wrap this string in quotes because it contains quotes or > reserved characters. That is the expected behaviour based on the > specification[3]. But this is an issue for the Brooklyn parser as the value > will be treated as a `String` and not as a `DslCommand` object. > > So my proposal is as follow: support the Brooklyn DSL as a standard custom > YAML type. We obviously need to avoid any quote or reserved characters. > That is relatively simple for commands that takes only one parameter, for > instance: > > - $brooklyn:component('my-id') could become > - !brooklyn:component my-id > - $brooklyn:entitySpec would become > - !brooklyn:spec > > For the more complex ones, I created a gist[4] that illustrates how this > could work. It is more verbose than the current version but we get a rid of > the hacky `$brooklyn` and comply fully to the YAML specification. > > Best. > > [1] http://yaml.org/spec/1.2/spec.html > [2] https://github.com/nodeca/js-yaml > [3] http://yaml.org/spec/1.2/spec.html#id2788859 > [4] https://gist.github.com/tbouron/67527796726e10689d8d3c34784cd7ec > > -- > > Thomas Bouron • Software Engineer @ Cloudsoft Corporation • > http://www.cloudsoftcorp.com/ > Github: https://github.com/tbouron > Twitter: https://twitter.com/eltibouron > -- Andrew Kennedy ; Founder clocker.io project ; @grkvlt ; Cloudsoft