Hi Sam I've got an iterator in my template: <#list config['cm_host_port_list'] as cm_item> <crn:item xsi:type="xsd:anyURI">http://$ {cm_item}/p2pd/servlet</crn:item> </#list>
So, that's why I have an array. So, I think I could do something with a Predicate, but I have no idea how I would wire this into the yaml. Thanks Graham From: Sam Corbett <sam.corb...@cloudsoftcorp.com> To: dev@brooklyn.apache.org Date: 03/06/2017 10:36 AM Subject: Re: How to express aggregator in yaml Hi Graham, May I ask how you intend to use the values in your template? If it would be sufficient to combine them into a single string you should use a `Joiner` enricher whose minimum size is the initial size of the cluster: brooklyn.config: cluster.initial.size: 4 brooklyn.enrichers: - type: org.apache.brooklyn.enricher.stock.Aggregator brooklyn.config: enricher.sourceSensor: mySensor enricher.targetSensor: aggregated enricher.aggregating.fromMembers: true - type: org.apache.brooklyn.enricher.stock.Joiner brooklyn.config: enricher.sourceSensor: aggregated enricher.targetSensor: joinedUp enricher.joiner.quote: false enricher.joiner.minimum: $brooklyn:config("cluster.initial.size") In this example the value for `joinedUp` won't be published until the `aggregated` sensor contains four non-null values. With this approach you wouldn't need to use a latch; in your other entity you'd assign the joiner's value to a config key: brooklyn.config: valueForTemplate: $brooklyn:entity("cluster").attributeWhenReady("joinedUp") And in your template write: ${config['valueForTemplate'] There is no equivalent of `enricher.joiner.minimum` for Aggregators so if this approach is unsuitable - perhaps you want to iterate over the values in your template - then it seems to be considerably more complex to achieve what you want. I've got a few ideas but will wait to hear whether the above is of any help before digging into them. Sam On 03/03/2017 19:12, Graham Ashby wrote: > OK, I've got this problem: > I have a list of hosts_ports that I've created in a cluster using an > Aggregator. So far so good.. .By using attributeWhenReady, it fills in > when all the values are ready. > Now in another part of my application, I want to use this in a template. > The thing is, I want to wait until all the elements in the list are not > null before I do the template.install. > I've got a resources.install.latch, which seems to be the right latch to > use. However, it needs a boolean > > So my question is: How can I write an Aggregator in yaml that will only > be true if all the elements of the list are not null? > I'm sure it's possible, and I could do it if I was writing Java. But > there isn't a lot of documentation on how to do this. > > Thanks > Graham Ashby > graham.as...@ca.ibm.com > >