Implementing Sensors and Effectors
Containers are an excellent way to define sophisticated behavior that Cloudsoft AMP should do
to retrieve sensors or to offer actions through effectors.
This is done through brooklyn.initializers
which are documented in the reference guide:
A sample sensor definition which runs the common jq
container (to extract JSON path values) whenever
the sensor list-of-maps-containing-value
is published,
and extracts the key called value
from the first map in the list,
then publishes it as json-value-of-first-element
, is as follows:
brooklyn.initializers:
- type: container-sensor
brooklyn.config:
name: json-value-of-first-element
targetType: integer
image: stedolan/jq
triggers:
- list-of-maps-containing-value
shell.env:
INPUT: $brooklyn:attributeWhenReady("list-of-maps-containing-value")
bashScript: echo $INPUT | jq '.[0].value'
A sample effector called get-json-value-of-first-element
which runs the same command whenever an operator invokes it
is as follows:
brooklyn.initializers:
- type: container-effector
brooklyn.config:
name: get-json-value-of-first-element
image: stedolan/jq
shell.env:
INPUT: $brooklyn:attributeWhenReady("list-of-maps-containing-value")
bashScript: echo $INPUT | jq '.[0].value'
These techniques can be used for a vast range of functionality,
from running aws
commands
(passing AWS_...
environment variables based on the location)
to integrating with monitoring and ITSM tools.
You can also of course write sensors and effectors in any language you choose,
save it as a container, and use it from Cloudsoft AMP.