You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@brooklyn.apache.org by Peter Abramowitsch <pa...@gmail.com> on 2019/08/01 21:10:11 UTC

Getting id of entity within a cluster entity spec

Hi Brooklyn experts

I'm trying to create a cluster where each instance has a unique id that I
can feed to the process during the customize and launch stages, so I
thought of using the entity's own ID.  I've tried many ways to get the id
just before customize, but none of them work.   The entity in question is
of type VanillaJavaApp

Here's one example

This one fails giving "Cannot coerce type
org.apache.brooklyn.core.sensor.BasicAttributeSensor to java.lang.String
(Sensor: entity.id (java.lang.String)): no adapter known" which I think
means that the sensor isn't avalable at the moment it is evaluated.   Ok
that makes sense, but see the other examples I've tried below.....

name: htsuite
description: testserver
location: localhost
services:
  - id: client_cluster
    type: org.apache.brooklyn.entity.group.DynamicCluster
    brooklyn.config:
      cluster.initial.size: 2
      dynamiccluster.memberspec:
        $brooklyn:entitySpec:
          type: htclienttemplate:1.4
          name: client
          customize.command: |
            sudo mkdir
$brooklyn:formatString("/Users/peterabramowitsch/manhattan/%s",
*$brooklyn:sensor("entity.id
<http://entity.id>") *)
          brooklyn.config:
            clientname: *$brooklyn:sensor("entity.id <http://entity.id>") *
            rundir:
              $brooklyn:formatString:
                - /Users/peterabramowitsch/manhattan/%s
                - *$brooklyn:sensor("entity.id <http://entity.id>")*
            resturl:
              $brooklyn:formatString:
                -
http://127.0.0.1:8081/v1/applications/infocommons-composed/entities/%s/sensors
                - *$brooklyn:sensor("entity.id <http://entity.id>")*

I have also tried
   *$brooklyn:component("this","id")*
*   $brooklyn:component("this").attributeWhenReady("id")*
*   $brooklyn.id <http://brooklyn.id>*

*   $brooklyn:config("id")*

*   id*

Re: Getting id of entity within a cluster entity spec

Posted by Peter Abramowitsch <pa...@gmail.com>.
Thank you Geoff

$brooklyn:entityId(). worked perfectly!

Peter

On Thu, Aug 1, 2019 at 2:48 PM Geoff Macartney <ge...@gmail.com>
wrote:

> Hi Peter,
>
> I don't have a Brooklyn to hand to verify this but I think you can get the
> ID you want with $brooklyn:entityId().
>
> There doesn't seem to be any documentation on this, to my surprise, but you
> can see an example of its use in the Java code for tests here:
>
>
> https://github.com/apache/brooklyn-server/blob/c782aae54f424e317c0999f5cde3fab19bc45cfb/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/DslYamlTest.java#L433
>
> Alternatively this is equivalent to $brooklyn:attributeWhenReady("
> entity.id")
> as used for example here:
>
>
> https://github.com/brooklyncentral/clocker/blob/master/kubernetes/catalog/kubernetes/kubernetes.bom#L492
>
> Regards
> Geoff
>
>
>
>
> On Thu, 1 Aug 2019 at 22:10, Peter Abramowitsch <pa...@gmail.com>
> wrote:
>
> > Hi Brooklyn experts
> >
> > I'm trying to create a cluster where each instance has a unique id that I
> > can feed to the process during the customize and launch stages, so I
> > thought of using the entity's own ID.  I've tried many ways to get the id
> > just before customize, but none of them work.   The entity in question is
> > of type VanillaJavaApp
> >
> > Here's one example
> >
> > This one fails giving "Cannot coerce type
> > org.apache.brooklyn.core.sensor.BasicAttributeSensor to java.lang.String
> > (Sensor: entity.id (java.lang.String)): no adapter known" which I think
> > means that the sensor isn't avalable at the moment it is evaluated.   Ok
> > that makes sense, but see the other examples I've tried below.....
> >
> > name: htsuite
> > description: testserver
> > location: localhost
> > services:
> >   - id: client_cluster
> >     type: org.apache.brooklyn.entity.group.DynamicCluster
> >     brooklyn.config:
> >       cluster.initial.size: 2
> >       dynamiccluster.memberspec:
> >         $brooklyn:entitySpec:
> >           type: htclienttemplate:1.4
> >           name: client
> >           customize.command: |
> >             sudo mkdir
> > $brooklyn:formatString("/Users/peterabramowitsch/manhattan/%s",
> > *$brooklyn:sensor("entity.id
> > <http://entity.id>") *)
> >           brooklyn.config:
> >             clientname: *$brooklyn:sensor("entity.id <http://entity.id
> >")
> > *
> >             rundir:
> >               $brooklyn:formatString:
> >                 - /Users/peterabramowitsch/manhattan/%s
> >                 - *$brooklyn:sensor("entity.id <http://entity.id>")*
> >             resturl:
> >               $brooklyn:formatString:
> >                 -
> >
> >
> http://127.0.0.1:8081/v1/applications/infocommons-composed/entities/%s/sensors
> >                 - *$brooklyn:sensor("entity.id <http://entity.id>")*
> >
> > I have also tried
> >    *$brooklyn:component("this","id")*
> > *   $brooklyn:component("this").attributeWhenReady("id")*
> > *   $brooklyn.id <http://brooklyn.id>*
> >
> > *   $brooklyn:config("id")*
> >
> > *   id*
> >
>

Re: Getting id of entity within a cluster entity spec

Posted by Geoff Macartney <ge...@gmail.com>.
Hi Peter,

I don't have a Brooklyn to hand to verify this but I think you can get the
ID you want with $brooklyn:entityId().

There doesn't seem to be any documentation on this, to my surprise, but you
can see an example of its use in the Java code for tests here:

https://github.com/apache/brooklyn-server/blob/c782aae54f424e317c0999f5cde3fab19bc45cfb/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/DslYamlTest.java#L433

Alternatively this is equivalent to $brooklyn:attributeWhenReady("entity.id")
as used for example here:

https://github.com/brooklyncentral/clocker/blob/master/kubernetes/catalog/kubernetes/kubernetes.bom#L492

Regards
Geoff




On Thu, 1 Aug 2019 at 22:10, Peter Abramowitsch <pa...@gmail.com>
wrote:

> Hi Brooklyn experts
>
> I'm trying to create a cluster where each instance has a unique id that I
> can feed to the process during the customize and launch stages, so I
> thought of using the entity's own ID.  I've tried many ways to get the id
> just before customize, but none of them work.   The entity in question is
> of type VanillaJavaApp
>
> Here's one example
>
> This one fails giving "Cannot coerce type
> org.apache.brooklyn.core.sensor.BasicAttributeSensor to java.lang.String
> (Sensor: entity.id (java.lang.String)): no adapter known" which I think
> means that the sensor isn't avalable at the moment it is evaluated.   Ok
> that makes sense, but see the other examples I've tried below.....
>
> name: htsuite
> description: testserver
> location: localhost
> services:
>   - id: client_cluster
>     type: org.apache.brooklyn.entity.group.DynamicCluster
>     brooklyn.config:
>       cluster.initial.size: 2
>       dynamiccluster.memberspec:
>         $brooklyn:entitySpec:
>           type: htclienttemplate:1.4
>           name: client
>           customize.command: |
>             sudo mkdir
> $brooklyn:formatString("/Users/peterabramowitsch/manhattan/%s",
> *$brooklyn:sensor("entity.id
> <http://entity.id>") *)
>           brooklyn.config:
>             clientname: *$brooklyn:sensor("entity.id <http://entity.id>")
> *
>             rundir:
>               $brooklyn:formatString:
>                 - /Users/peterabramowitsch/manhattan/%s
>                 - *$brooklyn:sensor("entity.id <http://entity.id>")*
>             resturl:
>               $brooklyn:formatString:
>                 -
>
> http://127.0.0.1:8081/v1/applications/infocommons-composed/entities/%s/sensors
>                 - *$brooklyn:sensor("entity.id <http://entity.id>")*
>
> I have also tried
>    *$brooklyn:component("this","id")*
> *   $brooklyn:component("this").attributeWhenReady("id")*
> *   $brooklyn.id <http://brooklyn.id>*
>
> *   $brooklyn:config("id")*
>
> *   id*
>