Starting with version 2.2 Icinga supports arrays and dictionaries in custom attributes. In combination with apply this is incredibly powerful, e.g. to define HTTP vhosts for a host and to set up individual services for each of these vhosts.
Version 2.3 – which we’re planning to release on the 10th of March – will introduce support for using functions in custom attributes:
object CheckCommand "random-text" { import "plugin-check-command" command = [ PluginDir + "/check_dummy", "0", "$text$" ] vars.text = {{ Math.random() * 100 }} }
The two curly braces are used to define a function. Icinga runs this function every time it needs the value for the custom attribute “text”. In this example this results in a new random value each time this check command is executed.
However, using functions we’re not limited to calculating simple values. Users can use if/else to accomplish more complex things:
vars.text = {{ if (host.address == "127.0.0.1") { log("This is a check for localhost.") } return "Test" }}
We can also access arbitrary attribute for other hosts and services:
vars.text = {{ "The state for 'other-host' is: " + get_host("other-host").state }}