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

Reply via email to