2013-09-27 07:19:13 +02:00
|
|
|
## Configuration Syntax
|
2013-09-26 08:59:29 +02:00
|
|
|
|
2013-09-27 07:19:13 +02:00
|
|
|
### Object Definition
|
2013-09-26 08:59:29 +02:00
|
|
|
|
|
|
|
Icinga 2 features an object-based configuration format. In order to
|
|
|
|
define objects the *object* keyword is used:
|
|
|
|
|
|
|
|
object Host "host1.example.org" {
|
|
|
|
display_name = "host1",
|
|
|
|
|
|
|
|
macros = {
|
|
|
|
address = "192.168.0.1"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
> **Note**
|
|
|
|
>
|
|
|
|
> The Icinga 2 configuration format is agnostic to whitespaces and
|
|
|
|
> new-lines.
|
|
|
|
|
|
|
|
> **Note**
|
|
|
|
>
|
|
|
|
> Colons (:) are not permitted in object names.
|
|
|
|
|
|
|
|
Each object is uniquely identified by its type (*Host*) and name
|
|
|
|
(*host1.example.org*). Objects can contain a comma-separated list of
|
|
|
|
property declarations. The following data types are available for
|
|
|
|
property values:
|
|
|
|
|
2013-09-27 07:19:13 +02:00
|
|
|
#### Numeric Literals
|
2013-09-26 08:59:29 +02:00
|
|
|
|
|
|
|
A floating-point number.
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
-27.3
|
|
|
|
|
2013-09-27 07:19:13 +02:00
|
|
|
#### Duration Literals
|
2013-09-26 08:59:29 +02:00
|
|
|
|
|
|
|
Similar to floating-point numbers except for the fact that they support
|
|
|
|
suffixes to help with specifying time durations.
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
2.5m
|
|
|
|
|
2013-09-27 16:39:35 +02:00
|
|
|
Supported suffixes include ms (milliseconds), s (seconds), m (minutes),
|
|
|
|
h (hours) and d (days).
|
2013-09-26 08:59:29 +02:00
|
|
|
|
2013-09-27 07:19:13 +02:00
|
|
|
#### String Literals
|
2013-09-26 08:59:29 +02:00
|
|
|
|
|
|
|
A string.
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
"Hello World!"
|
|
|
|
|
|
|
|
Certain characters need to be escaped. The following escape sequences
|
|
|
|
are supported:
|
|
|
|
|
|
|
|
Character |Escape sequence
|
|
|
|
------------------------------------|------------------------------------
|
|
|
|
" |\\"
|
|
|
|
\\ |\\\\
|
|
|
|
\<TAB\> |\\t
|
|
|
|
\<CARRIAGE-RETURN\> |\\r
|
|
|
|
\<LINE-FEED\> |\\n
|
|
|
|
\<BEL\> |\\b
|
|
|
|
\<FORM-FEED\> |\\f
|
|
|
|
|
|
|
|
In addition to these pre-defined escape sequences you can specify
|
|
|
|
arbitrary ASCII characters using the backslash character (\\) followed
|
|
|
|
by an ASCII character in octal encoding.
|
|
|
|
|
2013-09-27 07:19:13 +02:00
|
|
|
#### Multiline String Literals
|
2013-09-26 08:59:29 +02:00
|
|
|
|
|
|
|
Strings spanning multiple lines can be specified by enclosing them in
|
|
|
|
{{{ and }}}.
|
|
|
|
|
|
|
|
Example.
|
|
|
|
|
|
|
|
{{{This
|
|
|
|
is
|
|
|
|
a multi-line
|
|
|
|
string.}}}
|
|
|
|
|
2013-09-27 07:19:13 +02:00
|
|
|
#### Boolean Literals
|
2013-09-26 08:59:29 +02:00
|
|
|
|
|
|
|
The keywords *true* and *false* are equivalent to 1 and 0 respectively.
|
|
|
|
|
2013-09-27 07:19:13 +02:00
|
|
|
#### Null Value
|
2013-09-26 08:59:29 +02:00
|
|
|
|
|
|
|
The *null* keyword can be used to specify an empty value.
|
|
|
|
|
2013-09-27 07:19:13 +02:00
|
|
|
#### Dictionary
|
2013-09-26 08:59:29 +02:00
|
|
|
|
|
|
|
An unordered list of key-value pairs. Keys must be unique and are
|
|
|
|
compared in a case-insensitive manner.
|
|
|
|
|
|
|
|
Individual key-value pairs must be separated from each other with a
|
|
|
|
comma. The comma after the last key-value pair is optional.
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
{
|
|
|
|
address = "192.168.0.1",
|
|
|
|
port = 443
|
|
|
|
}
|
|
|
|
|
|
|
|
> **Note**
|
|
|
|
>
|
|
|
|
> Identifiers may not contain certain characters (e.g. space) or start
|
|
|
|
> with certain characters (e.g. digits). If you want to use a dictionary
|
|
|
|
> key that is not a valid identifier you can put the key in double
|
|
|
|
> quotes.
|
|
|
|
|
|
|
|
> **Note**
|
|
|
|
>
|
|
|
|
> Setting a dictionary key to null causes the key and its value to be
|
|
|
|
> removed from the dictionary.
|
|
|
|
|
2013-09-27 07:19:13 +02:00
|
|
|
#### Array
|
2013-09-26 08:59:29 +02:00
|
|
|
|
|
|
|
An ordered list of values.
|
|
|
|
|
|
|
|
Individual array elements must be separated from each other with a
|
|
|
|
comma. The comma after the last element is optional.
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
2013-09-27 07:19:13 +02:00
|
|
|
[ "hello", 42 ]
|
2013-09-26 08:59:29 +02:00
|
|
|
|
|
|
|
> **Note**
|
|
|
|
>
|
2013-09-27 07:19:13 +02:00
|
|
|
> An array may simultaneously contain values of different types, such as
|
2013-09-26 08:59:29 +02:00
|
|
|
> strings and numbers.
|
|
|
|
|
2013-09-27 07:19:13 +02:00
|
|
|
### Operators
|
2013-09-26 08:59:29 +02:00
|
|
|
|
|
|
|
In addition to the *=* operator shown above a number of other operators
|
2013-09-26 14:01:29 +02:00
|
|
|
to manipulate configuration objects are supported. Here's a list of all
|
2013-09-26 08:59:29 +02:00
|
|
|
available operators:
|
|
|
|
|
2013-09-27 07:19:13 +02:00
|
|
|
#### Operator =
|
2013-09-26 08:59:29 +02:00
|
|
|
|
|
|
|
Sets a dictionary element to the specified value.
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
{
|
|
|
|
a = 5,
|
|
|
|
a = 7
|
|
|
|
}
|
|
|
|
|
|
|
|
In this example a has the value 7 after both instructions are executed.
|
|
|
|
|
2013-09-27 07:19:13 +02:00
|
|
|
#### Operator +=
|
2013-09-26 08:59:29 +02:00
|
|
|
|
|
|
|
Modifies a dictionary or array by adding new elements to it.
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
{
|
|
|
|
a = [ "hello" ],
|
|
|
|
a += [ "world" ]
|
|
|
|
}
|
|
|
|
|
|
|
|
In this example a contains both *"hello"* and *"world"*. This currently
|
|
|
|
only works for dictionaries and arrays.
|
|
|
|
|
|
|
|
<!--
|
2013-09-26 14:01:29 +02:00
|
|
|
|
2013-09-27 07:19:13 +02:00
|
|
|
#### Operator -=
|
2013-09-26 08:59:29 +02:00
|
|
|
|
|
|
|
Removes elements from a dictionary.
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
{
|
|
|
|
a = { "hello", "world" },
|
|
|
|
a -= [ "world" ]
|
|
|
|
}
|
|
|
|
|
|
|
|
In this example a contains *"hello"*. Trying to remove an item that does
|
|
|
|
not exist is not an error. Not implemented yet.
|
|
|
|
|
2013-09-27 07:19:13 +02:00
|
|
|
#### Operator \*=
|
2013-09-26 08:59:29 +02:00
|
|
|
|
|
|
|
Multiplies an existing dictionary element with the specified number. If
|
|
|
|
the dictionary element does not already exist 0 is used as its value.
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
{
|
|
|
|
a = 60,
|
|
|
|
a *= 5
|
|
|
|
}
|
|
|
|
|
|
|
|
In this example a is 300. This only works for numbers. Not implemented
|
|
|
|
yet.
|
|
|
|
|
2013-09-27 07:19:13 +02:00
|
|
|
#### Operator /=
|
2013-09-26 08:59:29 +02:00
|
|
|
|
|
|
|
Divides an existing dictionary element by the specified number. If the
|
|
|
|
dictionary element does not already exist 0 is used as its value.
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
{
|
|
|
|
a = 300,
|
|
|
|
a /= 5
|
|
|
|
}
|
|
|
|
|
|
|
|
In this example a is 60. This only works for numbers. Not implemented
|
|
|
|
yet.
|
2013-09-26 14:01:29 +02:00
|
|
|
|
2013-09-26 08:59:29 +02:00
|
|
|
-->
|
|
|
|
|
2013-09-27 07:19:13 +02:00
|
|
|
### Indexer
|
2013-09-26 08:59:29 +02:00
|
|
|
|
2013-09-27 07:19:13 +02:00
|
|
|
The indexer syntax provides a convenient way to set dictionary elements.
|
2013-09-26 08:59:29 +02:00
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
{
|
|
|
|
hello["key"] = "world"
|
|
|
|
}
|
|
|
|
|
|
|
|
This is equivalent to writing:
|
|
|
|
|
|
|
|
{
|
|
|
|
hello += {
|
|
|
|
key = "world"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-09-27 07:19:13 +02:00
|
|
|
### Inheritance
|
2013-09-26 08:59:29 +02:00
|
|
|
|
|
|
|
Objects can inherit attributes from other objects.
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
template Host "default-host" {
|
|
|
|
check_interval = 30,
|
|
|
|
|
|
|
|
macros["color"] = "red"
|
|
|
|
}
|
|
|
|
|
|
|
|
template Host "test-host" inherits "default-host" {
|
|
|
|
macros["color"] = "blue"
|
|
|
|
}
|
|
|
|
|
|
|
|
object Host "localhost" inherits "test-host" {
|
|
|
|
macros["address"] = "127.0.0.1",
|
|
|
|
macros["address6"] = "::1"
|
|
|
|
}
|
|
|
|
|
|
|
|
The *"default-host"* and *"test-host"* objects are marked as templates
|
|
|
|
using the *template* keyword. Unlike ordinary objects templates are not
|
|
|
|
instantiated at runtime. Parent objects do not necessarily have to be
|
|
|
|
templates though in general they are.
|
|
|
|
|
|
|
|
> **Note**
|
|
|
|
>
|
|
|
|
> The final macros dictionary contains all 3 macros and the macro
|
|
|
|
> *color* has the value *"blue"*.
|
|
|
|
|
2013-09-26 14:01:29 +02:00
|
|
|
Parent objects are resolved in the order they're specified using the
|
2013-09-26 08:59:29 +02:00
|
|
|
*inherits* keyword.
|
|
|
|
|
2013-09-27 07:19:13 +02:00
|
|
|
### Variables
|
2013-09-26 08:59:29 +02:00
|
|
|
|
|
|
|
Global variables can be set using the *set* keyword:
|
|
|
|
|
|
|
|
set VarName = "some value"
|
|
|
|
|
|
|
|
The value can be a string, number, array or a dictionary.
|
|
|
|
|
2013-09-27 07:19:13 +02:00
|
|
|
### Constant Expressions
|
2013-09-26 08:59:29 +02:00
|
|
|
|
|
|
|
Simple calculations can be performed using the constant expression syntax:
|
|
|
|
|
|
|
|
{
|
|
|
|
check_interval = (15 * 60)
|
|
|
|
}
|
|
|
|
|
|
|
|
Valid operators include +, -, * and /. The default precedence rules can be
|
|
|
|
overriden by grouping expressions using parentheses:
|
|
|
|
|
|
|
|
{
|
|
|
|
check_interval ((15 * 60) / 2)
|
|
|
|
}
|
|
|
|
|
|
|
|
Global variables may be used in constant expressions.
|
|
|
|
|
|
|
|
set MyCheckInterval = 10m
|
|
|
|
|
|
|
|
...
|
|
|
|
|
|
|
|
{
|
|
|
|
check_interval = (MyCheckInterval / 2.5)
|
|
|
|
}
|
|
|
|
|
|
|
|
> **Note**
|
|
|
|
>
|
|
|
|
> Constant expressions are evaluated as soon as they're encountered in
|
|
|
|
> the configuration file.
|
|
|
|
|
2013-09-27 10:44:24 +02:00
|
|
|
### <a id="comments"></a> Comments
|
2013-09-26 08:59:29 +02:00
|
|
|
|
|
|
|
The Icinga 2 configuration format supports C/C++-style comments.
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
/*
|
|
|
|
This is a comment.
|
|
|
|
*/
|
|
|
|
object Host "localhost" {
|
|
|
|
check_interval = 30, // this is also a comment.
|
|
|
|
retry_interval = 15
|
|
|
|
}
|
|
|
|
|
2013-09-27 07:19:13 +02:00
|
|
|
### Includes
|
2013-09-26 08:59:29 +02:00
|
|
|
|
|
|
|
Other configuration files can be included using the *include* directive.
|
|
|
|
Paths must be relative to the configuration file that contains the
|
|
|
|
*include* directive.
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
include "some/other/file.conf"
|
|
|
|
include "conf.d/*.conf"
|
|
|
|
|
|
|
|
> **Note**
|
|
|
|
>
|
|
|
|
> Wildcard includes are not recursive.
|
|
|
|
|
|
|
|
Icinga also supports include search paths similar to how they work in a
|
|
|
|
C/C++ compiler:
|
|
|
|
|
|
|
|
include <itl/itl.conf>
|
|
|
|
|
|
|
|
Note the use of angle brackets instead of double quotes. This causes the
|
|
|
|
config compiler to search the include search paths for the specified
|
|
|
|
file. By default $PREFIX/icinga2 is included in the list of search
|
2013-09-27 13:56:11 +02:00
|
|
|
paths. Additional include search paths can be added using
|
|
|
|
[command-line options](#cmdline).
|
2013-09-26 08:59:29 +02:00
|
|
|
|
|
|
|
Wildcards are not permitted when using angle brackets.
|
|
|
|
|
2013-09-27 13:56:11 +02:00
|
|
|
### <a id="library"></a> Library directive
|
2013-09-26 08:59:29 +02:00
|
|
|
|
|
|
|
The *library* directive can be used to manually load additional
|
|
|
|
libraries. Libraries can be used to provide additional object types and
|
|
|
|
methods.
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
library "snmphelper"
|
|
|
|
|
|
|
|
> **Note**
|
|
|
|
>
|
|
|
|
> The *icinga* library is automatically loaded at startup.
|
|
|
|
|
|
|
|
<!--
|
2013-09-26 14:01:29 +02:00
|
|
|
|
2013-09-27 07:19:13 +02:00
|
|
|
### Type Definition
|
2013-09-26 08:59:29 +02:00
|
|
|
|
|
|
|
By default Icinga has no way of semantically verifying its configuration
|
|
|
|
objects. This is where type definitions come in. Using type definitions
|
|
|
|
you can specify which attributes are allowed in an object definition.
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
type Pizza {
|
|
|
|
%require "radius",
|
|
|
|
%attribute number "radius",
|
|
|
|
|
|
|
|
%attribute dictionary "ingredients" {
|
|
|
|
%validator "ValidateIngredients",
|
|
|
|
|
|
|
|
%attribute string "*",
|
|
|
|
|
|
|
|
%attribute dictionary "*" {
|
|
|
|
%attribute number "quantity",
|
|
|
|
%attribute string "name"
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
%attribute any "custom::*"
|
|
|
|
}
|
|
|
|
|
|
|
|
The Pizza definition provides the following validation rules:
|
|
|
|
|
|
|
|
- Pizza objects must contain an attribute *radius* which has to be a
|
|
|
|
number.
|
|
|
|
|
|
|
|
- Pizza objects may contain an attribute *ingredients* which has to be
|
|
|
|
a dictionary.
|
|
|
|
|
|
|
|
- Elements in the ingredients dictionary can be either a string or a
|
|
|
|
dictionary.
|
|
|
|
|
2013-09-26 14:01:29 +02:00
|
|
|
- If they're a dictionary they may contain attributes *quantity* (of
|
2013-09-26 08:59:29 +02:00
|
|
|
type number) and *name* (of type string).
|
|
|
|
|
|
|
|
- The script function *ValidateIngredients* is run to perform further
|
|
|
|
validation of the ingredients dictionary.
|
|
|
|
|
|
|
|
- Pizza objects may contain attribute matching the pattern
|
|
|
|
*custom::\** of any type.
|
|
|
|
|
|
|
|
Valid types for type rules include: \* any \* number \* string \* scalar
|
|
|
|
(an alias for string) \* dictionary
|
2013-09-26 14:01:29 +02:00
|
|
|
|
|
|
|
-->
|