Icinga 2: Funktionen als Custom-Attribute

Seit der Version 2.2 unterstützt Icinga Arrays und Dictionaries in Custom-Attributen. Zusammen mit apply lassen sich diese wunderbar verwenden, um z.B. für einen Host mehrere HTTP-Vhosts zu definieren und diese jeweils durch einen einen einzelnen Service checken zu lassen.
Mit der Version 2.3, die planmäßig am 10. März erscheinen soll, wird es zusätzlich die Möglichkeit geben, für Custom-Attribute Funktionen zu verwenden:

object CheckCommand "random-text" {
  import "plugin-check-command"
  command = [ PluginDir + "/check_dummy", "0", "$text$" ]
  vars.text = {{ Math.random() * 100 }}
}

Durch die beiden geschweiften Klammern wird eine Funktion definiert. Diese wird von Icinga jedes Mal aufgerufen, wenn es den Wert des Custom-Attributs “text” benötigt. In diesem Beispiel würde dies dazu führen, dass der Check bei jeder Ausführung einen unterschiedlichen Zufallswert ausgibt.
Mit Hilfe von Funktionen ist es allerdings nicht nur möglich, einfache Werte zu berechnen. Der Benutzer kann mit if/else beispielsweise komplexere Logik einbauen:

vars.text = {{
  if (host.address == "127.0.0.1") {
    log("Dies ist ein Check für localhost.")
  }
  return "Test"
}}

Auch auf beliebige Attribute anderer Hosts oder Services lässt sich so zugreifen:

vars.text = {{
  "Der State von 'anderer-host' ist: " + get_host("anderer-host").state
}}