brooklyn-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Alex Heneveld <alex.henev...@cloudsoftcorp.com>
Subject Re: Config keys with values that are entities
Date Tue, 18 Jul 2017 07:57:45 GMT

Hi Richard-

I've found the problem:  you're not specifying a type for 
`consul.serverReference`.  If a parameter is defined without any type, 
it defaults to a string (at BasicSpecParameter.inferType), causing a 
coercion exception when it tries to `config().get` the key.  The 
coercion problem is shown in the tasks view when start fails.

Try adding `type: org.apache.brooklyn.api.entity.Entity` to that 
parameter definition.

Best
Alex


On 17/07/2017 12:45, Richard Downer wrote:
> Thanks Alex. Your blueprint is similar to mine, although consul.server in
> my case is taken from the cluster.first.entity sensor of a DynamicCluster.
> I've uploaded my code to https://github.com/rdowner/brooklyn-consul - can
> you spot anything odd there?
>
> Thanks
> Richard.
>
> On 17 July 2017 at 10:58, Alex Heneveld <alex.heneveld@cloudsoftcorp.com>
> wrote:
>
>> Hi Richard-
>>
>> What you're doing looks fine.  Maybe something is wrong with the
>> "consul.serverReference" value, or there is a bug around special treatment
>> of parameters.  The blueprint below shows what I think you're doing,
>> several ways, and all work, both in bash and in the config view (IE fully
>> resolved).  If "consul.serverReference" doesn't resolve I see the values
>> you describe and I get a nice error in the Summary view when I try to use
>> it ( Error resolving config consul.serverReference,
>> $brooklyn:entity("MISSING"), ... NoSuchElementException: No entity matching
>> id).
>>
>> Can you share your blueprint?
>>
>> Best
>> Alex
>>
>>
>> location: localhost
>> services:
>> - type: org.apache.brooklyn.entity.software.base.VanillaSoftwareProcess
>>    id: consul.server
>>    launch.command: |
>>        echo hello | nc -l 4321 &
>>        echo $! > $PID_FILE
>> - type: org.apache.brooklyn.entity.software.base.VanillaSoftwareProcess
>>    launch.command: |
>>        echo hello | nc -l 4322 &
>>        echo $! > $PID_FILE
>>    brooklyn.config:
>>      consul.serverReference: $brooklyn:entity("consul.server")
>>      shell.env:
>>        consul_join0: $brooklyn:entity(config("consu
>> l.serverReference")).attributeWhenReady("entity.id")
>>        consul_join1: $brooklyn:entity(config("consu
>> l.join1")).attributeWhenReady("entity.id")
>>        consul_join2: $brooklyn:config("consul.join2")
>>      consul.join1: $brooklyn:config("consul.serverReference")
>>      consul.join2: $brooklyn:entity(config("consu
>> l.serverReference")).attributeWhenReady("entity.id")
>>
>> END
>>
>>
>>
>>
>> On 17/07/2017 09:54, Richard Downer wrote:
>>
>>> Hello all.
>>>
>>> I have a catalog item for an entity type. This has a number of parameters,
>>> including one parameter which is intended to hold a reference to an
>>> entity.
>>> This works fine; I can see in the "config" pane of the entity this:
>>>
>>> consul.serverReference Consul Server (bootstrap)
>>>
>>> What I want to do is extract some of the referenced entity's attributes
>>> and
>>> use them in my entity's blueprint. I'm struggling to find out how to do
>>> that. While experimenting, I've ended up with this in my blueprint:
>>>
>>>             consul.join1: $brooklyn:config("consul.serverReference")
>>>             consul.join2: $brooklyn:entity(config("consu
>>> l.serverReference"))
>>>             consul.join3:
>>> $brooklyn:component(config("consul.serverReference"))
>>>             consul.join4:
>>> $brooklyn:config("consul.serverReference").attributeWhenReady("entity.id
>>> ")
>>>             consul.join5:
>>> $brooklyn:entity(config("consul.serverReference")).attributeWhenReady("
>>> entity.id")
>>>             consul.join6:
>>> $brooklyn:component(config("consul.serverReference")).attrib
>>> uteWhenReady("
>>> entity.id")
>>>
>>> None of those are resolving. They appear in the config pane looking like
>>> this:
>>>
>>> consul.join1
>>> {"component":{"componentId":"","componentIdSupplier":null,"s
>>> copeComponent":null,"scope":"THIS"},"keyName":"consul.serverReference"}
>>> consul.join2
>>> {"componentId":null,"componentIdSupplier":{"component":{"
>>> componentId":"","componentIdSupplier":null,"scopeComponent":
>>> null,"scope":"THIS"},"keyName":"consul.serverReference"},"sc
>>> opeComponent":null,"scope":"GLOBAL"}
>>> consul.join3
>>> {"componentId":null,"componentIdSupplier":{"component":{"
>>> componentId":"","componentIdSupplier":null,"scopeComponent":
>>> null,"scope":"THIS"},"keyName":"consul.serverReference"},"sc
>>> opeComponent":null,"scope":"GLOBAL"}
>>> consul.join4
>>> {"object":{"component":{"componentId":"","componentIdSupplie
>>> r":null,"scopeComponent":null,"scope":"THIS"},"keyName":"
>>> consul.serverReference"},"fnName":"attributeWhenReady","args":["
>>> entity.id"]}
>>> consul.join5
>>> {"component":{"componentId":null,"componentIdSupplier":{"com
>>> ponent":{"componentId":"","componentIdSupplier":null,"scopeC
>>> omponent":null,"scope":"THIS"},"keyName":"consul.serverRefer
>>> ence"},"scopeComponent":null,"scope":"GLOBAL"},"sensorName":"
>>> entity.id"}
>>> consul.join6
>>> {"component":{"componentId":null,"componentIdSupplier":{"com
>>> ponent":{"componentId":"","componentIdSupplier":null,"scopeC
>>> omponent":null,"scope":"THIS"},"keyName":"consul.serverRefer
>>> ence"},"scopeComponent":null,"scope":"GLOBAL"},"sensorName":"
>>> entity.id"}
>>>
>>> Is it possible to do what I want?
>>>
>>> Thanks
>>> Richard.
>>>
>>>


Mime
View raw message