#
# example showing how enrichers can be set 
#
name: test-app-with-enrichers
description: Testing many enrichers
services:
- type: org.apache.brooklyn.entity.group.DynamicCluster
  id: cluster
  location: localhost
  brooklyn.config:
    cluster.initial.size: 3
    dynamiccluster.memberspec:
      $brooklyn:entitySpec:
        type: org.apache.brooklyn.core.test.entity.TestEntity
        brooklyn.enrichers:
        - type: org.apache.brooklyn.enricher.stock.Transformer
          # transform "ip" (which we expect a feed, not shown here, to set) to a URL;
          # you can curl an address string to the sensors/ip endpoint an entity to trigger these enrichers
          brooklyn.config:
            enricher.sourceSensor: $brooklyn:sensor("ip")
            enricher.targetSensor: $brooklyn:sensor("url")
            enricher.targetValue: $brooklyn:formatString("http://%s/", $brooklyn:attributeWhenReady("ip"))
        - type: org.apache.brooklyn.enricher.stock.Propagator
          # use propagator to duplicate one sensor as another, giving the supplied sensor mapping;
          # the other use of Propagator is where you specify a producer (using $brooklyn:entity(...) as below)
          # from which to take sensors; in that mode you can specify `propagate` as a list of sensors whose names are unchanged,
          # instead of (or in addition to) this map
          brooklyn.config:
            sensorMapping:
              $brooklyn:sensor("url"): $brooklyn:sensor("org.apache.brooklyn.core.entity.Attributes", "main.uri")
  brooklyn.enrichers:
  - type: org.apache.brooklyn.enricher.stock.Aggregator
    # aggregate `url` sensors from children into a list
    brooklyn.config:
      enricher.sourceSensor: $brooklyn:sensor("url")
      enricher.targetSensor: $brooklyn:sensor("urls.list")
      enricher.aggregating.fromMembers: true
  - type: org.apache.brooklyn.enricher.stock.Joiner
    # create a string from that list, for use e.g. in bash scripts
    brooklyn.config:
      enricher.sourceSensor: $brooklyn:sensor("urls.list")
      enricher.targetSensor: $brooklyn:sensor("urls.list.comma_separated.max_2")
      maximum: 2
      # TODO infer uniqueTag, name etc
      uniqueTag: urls.list.comma_separated.max_2
  - type: org.apache.brooklyn.enricher.stock.Joiner
    # pick one uri as the main one to use
    brooklyn.config:
      enricher.sourceSensor: $brooklyn:sensor("urls.list")
      enricher.targetSensor: $brooklyn:sensor("org.apache.brooklyn.core.entity.Attributes", "main.uri")
      quote: false
      maximum: 1
brooklyn.enrichers:
- type: org.apache.brooklyn.enricher.stock.Propagator
  # if nothing specified for `propagating` or `sensorMapping` then 
  # Propagator will do all but the usual lifecycle defaults, handy at the root!
  brooklyn.config:
    producer: $brooklyn:entity("cluster")
