diff --git a/doc/10-icinga-template-library.md b/doc/10-icinga-template-library.md
index 5195745dd..ae5efd9b6 100644
--- a/doc/10-icinga-template-library.md
+++ b/doc/10-icinga-template-library.md
@@ -27,24 +27,32 @@ Command template for check plugins executed by Icinga 2.
The `plugin-check-command` command does not support any vars.
+By default this template is automatically imported into all CheckCommand definitions.
+
### plugin-notification-command
Command template for notification scripts executed by Icinga 2.
The `plugin-notification-command` command does not support any vars.
+By default this template is automatically imported into all CheckCommand definitions.
+
### plugin-event-command
Command template for event handler scripts executed by Icinga 2.
The `plugin-event-command` command does not support any vars.
+By default this template is automatically imported into all CheckCommand definitions.
+
### legacy-timeperiod
Timeperiod template for [Timeperiod objects](9-object-types.md#objecttype-timeperiod).
The `legacy-timeperiod` timeperiod does not support any vars.
+By default this template is automatically imported into all CheckCommand definitions.
+
## Check Commands
These check commands are embedded into Icinga 2 and do not require any external
diff --git a/doc/17-language-reference.md b/doc/17-language-reference.md
index 8fa430ee8..b29d96de0 100644
--- a/doc/17-language-reference.md
+++ b/doc/17-language-reference.md
@@ -344,6 +344,19 @@ custom attributes and the custom attribute `colour` has the value `"blue"`.
Parent objects are resolved in the order they're specified using the
`import` keyword.
+Default templates which are automatically imported into all object definitions
+can be specified using the `default` keyword:
+
+ template CheckCommand "plugin-check-command" default {
+ // ...
+ }
+
+Default templates are imported before any other user-specified statement in an
+object definition is evaluated.
+
+If there are multiple default templates the order in which they are imported
+is unspecified.
+
## Constants
Global constants can be set using the `const` keyword:
diff --git a/doc/22-migrating-from-icinga-1x.md b/doc/22-migrating-from-icinga-1x.md
index 475888026..ab352e855 100644
--- a/doc/22-migrating-from-icinga-1x.md
+++ b/doc/22-migrating-from-icinga-1x.md
@@ -153,8 +153,6 @@ are referenced as `$ARGn$` where `n` is the argument counter.
While you could manually migrate this like (please note the new generic command arguments and default argument values!):
object CheckCommand "my-ping-check" {
- import "plugin-check-command"
-
command = [
PluginDir + "/check_ping", "-4"
]
@@ -233,7 +231,6 @@ Custom variables from Icinga 1.x are available as Icinga 2 custom attributes.
Can be written as the following in Icinga 2:
object CheckCommand "test_customvar" {
- import "plugin-check-command"
command = "echo "Host CV: $host.vars.CVTEST$ Service CV: $service.vars.CVTEST$\n""
}
diff --git a/doc/3-monitoring-basics.md b/doc/3-monitoring-basics.md
index 4a0117d82..a6aa6bb86 100644
--- a/doc/3-monitoring-basics.md
+++ b/doc/3-monitoring-basics.md
@@ -163,8 +163,6 @@ The special case here is that whenever Icinga 2 needs the value for such a custo
the function and uses whatever value the function returns:
object CheckCommand "random-value" {
- import "plugin-check-command"
-
command = [ PluginDir + "/check_dummy", "0", "$text$" ]
vars.text = {{ Math.random() * 100 }}
@@ -229,8 +227,6 @@ are used in command definitions to figure out which IP address a check should be
run against:
object CheckCommand "my-ping" {
- import "plugin-check-command"
-
command = [ PluginDir + "/check_ping", "-H", "$ping_address$" ]
arguments = {
@@ -1238,9 +1234,6 @@ using the `check_command` attribute.
#### Integrate the Plugin with a CheckCommand Definition
-[CheckCommand](9-object-types.md#objecttype-checkcommand) objects require the [ITL template](10-icinga-template-library.md#itl-plugin-check-command)
-`plugin-check-command` to support native plugin based check methods.
-
Unless you have done so already, download your check plugin and put it
into the [PluginDir](4-configuring-icinga-2.md#constants-conf) directory. The following example uses the
`check_mysql` plugin contained in the Monitoring Plugins package.
@@ -1299,8 +1292,6 @@ can also be inherited from a parent template using additive inheritance (`+=`).
# vim /etc/icinga2/conf.d/commands.conf
object CheckCommand "my-mysql" {
- import "plugin-check-command"
-
command = [ PluginDir + "/check_mysql" ] //constants.conf -> const PluginDir
arguments = {
@@ -1426,8 +1417,6 @@ at command execution. Or making arguments optional -- only set if the
macro value can be resolved by Icinga 2.
object CheckCommand "check_http" {
- import "plugin-check-command"
-
command = [ PluginDir + "/check_http" ]
arguments = {
@@ -1490,8 +1479,6 @@ This is useful for example for hiding sensitive information on the command line
when passing credentials to database checks:
object CheckCommand "mysql-health" {
- import "plugin-check-command"
-
command = [
PluginDir + "/check_mysql"
]
@@ -1520,9 +1507,6 @@ interfaces (email, XMPP, IRC, Twitter, etc.).
[NotificationCommand](9-object-types.md#objecttype-notificationcommand) objects are referenced by
[Notification](9-object-types.md#objecttype-notification) objects using the `command` attribute.
-`NotificationCommand` objects require the [ITL template](10-icinga-template-library.md#itl-plugin-notification-command)
-`plugin-notification-command` to support native plugin-based notifications.
-
> **Note**
>
> Make sure that the [notification](11-cli-commands.md#enable-features) feature is enabled
@@ -1536,8 +1520,6 @@ If you want to specify default values for some of the custom attribute definitio
you can add a `vars` dictionary as shown for the `CheckCommand` object.
object NotificationCommand "mail-service-notification" {
- import "plugin-notification-command"
-
command = [ SysconfDir + "/icinga2/scripts/mail-notification.sh" ]
env = {
@@ -1618,9 +1600,6 @@ Common use case scenarios are a failing HTTP check requiring an immediate
restart via event command, or if an application is locked and requires
a restart upon detection.
-`EventCommand` objects require the ITL template `plugin-event-command`
-to support native plugin based checks.
-
#### Use Event Commands to Restart Service Daemon
The following example will trigger a restart of the `httpd` daemon
@@ -1647,8 +1626,6 @@ which can be used for all event commands triggered using ssh:
/* pass event commands through ssh */
object EventCommand "event_by_ssh" {
- import "plugin-event-command"
-
command = [ PluginDir + "/check_by_ssh" ]
arguments = {
diff --git a/doc/5-service-monitoring.md b/doc/5-service-monitoring.md
index 9ce56f491..d1a96d86f 100644
--- a/doc/5-service-monitoring.md
+++ b/doc/5-service-monitoring.md
@@ -58,7 +58,6 @@ into your host and service objects.
Please make sure to follow these conventions when adding a new command object definition:
-* Always import the `plugin-check-command` template.
* Use [command arguments](3-monitoring-basics.md#command-arguments) whenever possible. The `command` attribute
must be an array in `[ ... ]` for shell escaping.
* Define a unique `prefix` for the command's specific arguments. That way you can safely
@@ -69,8 +68,6 @@ set them on host/service level and you'll always know which command they control
This is an example for a custom `my-snmp-int` check command:
object CheckCommand "my-snmp-int" {
- import "plugin-check-command"
-
command = [ CustomPluginDir + "/check_snmp_int.pl" ]
arguments = {
diff --git a/doc/6-distributed-monitoring.md b/doc/6-distributed-monitoring.md
index 6c75b5a51..ffa7d9667 100644
--- a/doc/6-distributed-monitoring.md
+++ b/doc/6-distributed-monitoring.md
@@ -658,8 +658,6 @@ If you have your own custom `CheckCommand` definition, add it to the global zone
[root@icinga2-master1.localdomain /]# vim /etc/icinga2/zones.d/global-templates/commands.conf
object CheckCommand "my-cmd" {
- import "plugin-check-command"
-
//...
}
@@ -1565,8 +1563,6 @@ Next, add a new check command, for example:
[root@icinga2-master1.localdomain /]# vim /etc/icinga2/zones.d/global-templates/commands.conf
object CheckCommand "my-cmd" {
- import "plugin-check-command"
-
//...
}
diff --git a/doc/7-agent-based-monitoring.md b/doc/7-agent-based-monitoring.md
index 70fbd23b1..ebeb8884b 100644
--- a/doc/7-agent-based-monitoring.md
+++ b/doc/7-agent-based-monitoring.md
@@ -211,8 +211,6 @@ match your Icinga convention.
Add an `EventCommand` configuration object for the passive service auto reset event.
object EventCommand "coldstart-reset-event" {
- import "plugin-event-command"
-
command = [ SysconfDir + "/icinga2/conf.d/custom/scripts/coldstart_reset_event.sh" ]
arguments = {
diff --git a/doc/8-advanced-topics.md b/doc/8-advanced-topics.md
index 68a4c0265..45d1b4e8c 100644
--- a/doc/8-advanced-topics.md
+++ b/doc/8-advanced-topics.md
@@ -323,7 +323,6 @@ and evaluating the host custom attribute `compellent` containing the `disks` thi
solved like this:
object CheckCommand "check_compellent" {
- import "plugin-check-command"
command = [ "/usr/bin/check_compellent" ]
arguments = {
"--disks" = {
@@ -410,7 +409,6 @@ returned.
You can omit the `log()` calls, they only help debugging.
object NotificationCommand "mail-host-notification-test" {
- import "plugin-notification-command"
command = {{
log("command as function")
var mailscript = "mail-host-notification-long.sh"
diff --git a/doc/9-object-types.md b/doc/9-object-types.md
index 665636262..fbcd8e1ce 100644
--- a/doc/9-object-types.md
+++ b/doc/9-object-types.md
@@ -84,8 +84,6 @@ defined here.
Example:
object CheckCommand "check_http" {
- import "plugin-check-command"
-
command = [ PluginDir + "/check_http" ]
arguments = {
@@ -122,7 +120,7 @@ Configuration Attributes:
Name |Description
----------------|----------------
- execute |**Required.** The "execute" script method takes care of executing the check. In virtually all cases you should import the "plugin-check-command" template to take care of this setting.
+ execute |**Required.** The "execute" script method takes care of executing the check. The default template "plugin-check-command" which is imported into all CheckCommand objects takes care of this setting.
command |**Required.** The command. This can either be an array of individual command arguments. Alternatively a string can be specified in which case the shell interpreter (usually /bin/sh) takes care of parsing the command. When using the "arguments" attribute this must be an array. Can be specified as function for advanced implementations.
env |**Optional.** A dictionary of macros which should be exported as environment variables prior to executing the command.
vars |**Optional.** A dictionary containing custom attributes that are specific to this command.
@@ -441,8 +439,6 @@ An event command definition.
Example:
object EventCommand "restart-httpd-event" {
- import "plugin-event-command"
-
command = "/opt/bin/restart-httpd.sh"
}
@@ -451,7 +447,7 @@ Configuration Attributes:
Name |Description
----------------|----------------
- execute |**Required.** The "execute" script method takes care of executing the event handler. In virtually all cases you should import the "plugin-event-command" template to take care of this setting.
+ execute |**Required.** The "execute" script method takes care of executing the event handler. The default template "plugin-event-command" which is imported into all CheckCommand objects takes care of this setting.
command |**Required.** The command. This can either be an array of individual command arguments. Alternatively a string can be specified in which case the shell interpreter (usually /bin/sh) takes care of parsing the command.
env |**Optional.** A dictionary of macros which should be exported as environment variables prior to executing the command.
vars |**Optional.** A dictionary containing custom attributes that are specific to this command.
@@ -1087,8 +1083,6 @@ A notification command definition.
Example:
object NotificationCommand "mail-service-notification" {
- import "plugin-notification-command"
-
command = [
SysconfDir + "/icinga2/scripts/mail-notification.sh"
]
@@ -1113,7 +1107,7 @@ Configuration Attributes:
Name |Description
----------------|----------------
- execute |**Required.** The "execute" script method takes care of executing the notification. In virtually all cases you should import the "plugin-notification-command" template to take care of this setting.
+ execute |**Required.** The "execute" script method takes care of executing the notification. The default template "plugin-notification-command" which is imported into all CheckCommand objects takes care of this setting.
command |**Required.** The command. This can either be an array of individual command arguments. Alternatively a string can be specified in which case the shell interpreter (usually /bin/sh) takes care of parsing the command.
env |**Optional.** A dictionary of macros which should be exported as environment variables prior to executing the command.
vars |**Optional.** A dictionary containing custom attributes that are specific to this command.
diff --git a/etc/icinga2/conf.d/commands.conf b/etc/icinga2/conf.d/commands.conf
index f39cfcd53..e97b087af 100644
--- a/etc/icinga2/conf.d/commands.conf
+++ b/etc/icinga2/conf.d/commands.conf
@@ -1,8 +1,6 @@
/* Command objects */
object NotificationCommand "mail-host-notification" {
- import "plugin-notification-command"
-
command = [ SysconfDir + "/icinga2/scripts/mail-host-notification.sh" ]
env = {
@@ -20,8 +18,6 @@ object NotificationCommand "mail-host-notification" {
}
object NotificationCommand "mail-service-notification" {
- import "plugin-notification-command"
-
command = [ SysconfDir + "/icinga2/scripts/mail-service-notification.sh" ]
env = {
diff --git a/itl/command-nscp-local.conf b/itl/command-nscp-local.conf
index f38f1830f..68b7ff911 100644
--- a/itl/command-nscp-local.conf
+++ b/itl/command-nscp-local.conf
@@ -22,8 +22,6 @@ if (!globals.contains("NscpPath")) {
}
object CheckCommand "nscp-local" {
- import "plugin-check-command"
-
command = [ NscpPath + "\\nscp.exe", "client" ]
arguments = {
diff --git a/itl/command-plugins-manubulon.conf b/itl/command-plugins-manubulon.conf
index 1ddb81db3..73dd4bcc6 100644
--- a/itl/command-plugins-manubulon.conf
+++ b/itl/command-plugins-manubulon.conf
@@ -22,7 +22,6 @@
*/
template CheckCommand "snmp-manubulon-command" {
- import "plugin-check-command"
import "ipv4-or-ipv6"
arguments = {
diff --git a/itl/command-plugins-windows.conf b/itl/command-plugins-windows.conf
index 3fb9aa3cd..77dcec3c0 100644
--- a/itl/command-plugins-windows.conf
+++ b/itl/command-plugins-windows.conf
@@ -18,8 +18,6 @@
******************************************************************************/
object CheckCommand "disk-windows" {
- import "plugin-check-command"
-
command = [ PluginDir + "/check_disk.exe" ]
arguments = {
@@ -51,8 +49,6 @@ object CheckCommand "disk-windows" {
}
object CheckCommand "load-windows" {
- import "plugin-check-command"
-
command = [ PluginDir + "/check_load.exe" ]
arguments = {
@@ -68,8 +64,6 @@ object CheckCommand "load-windows" {
}
object CheckCommand "memory-windows" {
- import "plugin-check-command"
-
command = [ PluginDir + "/check_memory.exe" ]
arguments = {
@@ -91,8 +85,6 @@ object CheckCommand "memory-windows" {
}
object CheckCommand "network-windows" {
- import "plugin-check-command"
-
command = [ PluginDir + "/check_network.exe" ]
arguments = {
@@ -108,8 +100,6 @@ object CheckCommand "network-windows" {
}
object CheckCommand "perfmon-windows" {
- import "plugin-check-command"
-
command = [ PluginDir + "/check_perfmon.exe" ]
arguments = {
@@ -143,8 +133,6 @@ object CheckCommand "perfmon-windows" {
template CheckCommand "ping-common-windows" {
- import "plugin-check-command"
-
command = [ PluginDir + "/check_ping.exe" ]
arguments = {
@@ -200,8 +188,6 @@ object CheckCommand "ping6-windows" {
}
object CheckCommand "procs-windows" {
- import "plugin-check-command"
-
command = [ PluginDir + "/check_procs.exe" ]
arguments = {
@@ -221,8 +207,6 @@ object CheckCommand "procs-windows" {
}
object CheckCommand "service-windows" {
- import "plugin-check-command"
-
command = [ PluginDir + "/check_service.exe" ]
arguments = {
@@ -239,8 +223,6 @@ object CheckCommand "service-windows" {
}
object CheckCommand "swap-windows" {
- import "plugin-check-command"
-
command = [ PluginDir + "/check_swap.exe" ]
arguments = {
@@ -263,8 +245,6 @@ object CheckCommand "swap-windows" {
}
object CheckCommand "update-windows" {
- import "plugin-check-command"
-
command = [ PluginDir + "/check_update.exe" ]
arguments = {
@@ -286,8 +266,6 @@ object CheckCommand "update-windows" {
}
object CheckCommand "uptime-windows" {
- import "plugin-check-command"
-
command = [ PluginDir + "/check_uptime.exe" ]
arguments = {
@@ -310,8 +288,6 @@ object CheckCommand "uptime-windows" {
}
object CheckCommand "users-windows" {
- import "plugin-check-command"
-
command = [ PluginDir + "/check_users.exe" ]
arguments = {
diff --git a/itl/command-plugins.conf b/itl/command-plugins.conf
index a0c109265..445e6d510 100644
--- a/itl/command-plugins.conf
+++ b/itl/command-plugins.conf
@@ -34,8 +34,6 @@ template CheckCommand "ipv4-or-ipv6" {
}
template CheckCommand "ping-common" {
- import "plugin-check-command"
-
command = [ PluginDir + "/check_ping" ]
arguments = {
@@ -99,8 +97,6 @@ object CheckCommand "hostalive6" {
}
template CheckCommand "fping-common" {
- import "plugin-check-command"
-
command = [
PluginDir + "/check_fping",
"$fping_address$"
@@ -142,8 +138,6 @@ object CheckCommand "fping6" {
}
object CheckCommand "dummy" {
- import "plugin-check-command"
-
command = [
PluginDir + "/check_dummy",
"$dummy_state$",
@@ -162,7 +156,6 @@ object CheckCommand "passive" {
}
object CheckCommand "tcp" {
- import "plugin-check-command"
import "ipv4-or-ipv6"
command = [ PluginDir + "/check_tcp" ]
@@ -266,7 +259,6 @@ object CheckCommand "tcp" {
}
object CheckCommand "ssl" {
- import "plugin-check-command"
import "ipv4-or-ipv6"
command = [ PluginDir + "/check_tcp" ]
@@ -283,7 +275,6 @@ object CheckCommand "ssl" {
}
object CheckCommand "udp" {
- import "plugin-check-command"
import "ipv4-or-ipv6"
command = [
@@ -318,7 +309,6 @@ object CheckCommand "udp" {
}
object CheckCommand "http" {
- import "plugin-check-command"
import "ipv4-or-ipv6"
command = [ PluginDir + "/check_http" ]
@@ -477,7 +467,6 @@ object CheckCommand "http" {
}
object CheckCommand "ftp" {
- import "plugin-check-command"
import "ipv4-or-ipv6"
command = [ PluginDir + "/check_ftp" ]
@@ -581,7 +570,6 @@ object CheckCommand "ftp" {
}
object CheckCommand "smtp" {
- import "plugin-check-command"
import "ipv4-or-ipv6"
command = [ PluginDir + "/check_smtp" ]
@@ -622,7 +610,6 @@ object CheckCommand "smtp" {
}
object CheckCommand "ssmtp" {
- import "plugin-check-command"
import "ipv4-or-ipv6"
command = [ PluginDir + "/check_ssmtp" ]
@@ -670,7 +657,6 @@ object CheckCommand "ssmtp" {
}
object CheckCommand "imap" {
- import "plugin-check-command"
import "ipv4-or-ipv6"
command = [ PluginDir + "/check_imap" ]
@@ -718,7 +704,6 @@ object CheckCommand "imap" {
}
object CheckCommand "simap" {
- import "plugin-check-command"
import "ipv4-or-ipv6"
command = [ PluginDir + "/check_simap" ]
@@ -766,7 +751,6 @@ object CheckCommand "simap" {
}
object CheckCommand "pop" {
- import "plugin-check-command"
import "ipv4-or-ipv6"
command = [ PluginDir + "/check_pop" ]
@@ -814,7 +798,6 @@ object CheckCommand "pop" {
}
object CheckCommand "spop" {
- import "plugin-check-command"
import "ipv4-or-ipv6"
command = [ PluginDir + "/check_spop" ]
@@ -862,7 +845,6 @@ object CheckCommand "spop" {
}
object CheckCommand "ntp_time" {
- import "plugin-check-command"
import "ipv4-or-ipv6"
command = [ PluginDir + "/check_ntp_time" ]
@@ -894,7 +876,6 @@ object CheckCommand "ntp_time" {
}
object CheckCommand "ntp_peer" {
- import "plugin-check-command"
import "ipv4-or-ipv6"
command = [ PluginDir + "/check_ntp_peer" ]
@@ -927,7 +908,6 @@ object CheckCommand "ntp_peer" {
}
object CheckCommand "ssh" {
- import "plugin-check-command"
import "ipv4-or-ipv6"
command = [ PluginDir + "/check_ssh" ]
@@ -956,8 +936,6 @@ object CheckCommand "ssh" {
}
object CheckCommand "disk" {
- import "plugin-check-command"
-
command = [ PluginDir + "/check_disk" ]
arguments = {
@@ -1115,8 +1093,6 @@ object CheckCommand "disk" {
}
object CheckCommand "disk_smb" {
- import "plugin-check-command"
-
command = [ PluginDir + "/check_disk_smb" ]
arguments = {
@@ -1163,8 +1139,6 @@ object CheckCommand "disk_smb" {
}
object CheckCommand "users" {
- import "plugin-check-command"
-
command = [ PluginDir + "/check_users" ]
arguments = {
@@ -1177,8 +1151,6 @@ object CheckCommand "users" {
}
object CheckCommand "procs" {
- import "plugin-check-command"
-
command = [ PluginDir + "/check_procs" ]
arguments = {
@@ -1251,8 +1223,6 @@ object CheckCommand "procs" {
}
object CheckCommand "swap" {
- import "plugin-check-command"
-
command = [ PluginDir + "/check_swap" ]
arguments = {
@@ -1287,8 +1257,6 @@ object CheckCommand "swap" {
}
object CheckCommand "load" {
- import "plugin-check-command"
-
command = [ PluginDir + "/check_load" ]
arguments = {
@@ -1318,8 +1286,6 @@ object CheckCommand "load" {
}
object CheckCommand "snmp" {
- import "plugin-check-command"
-
command = [ PluginDir + "/check_snmp" ]
arguments = {
@@ -1370,7 +1336,6 @@ object CheckCommand "snmp" {
}
object CheckCommand "snmpv3" {
- import "plugin-check-command"
import "ipv4-or-ipv6"
command = [ PluginDir + "/check_snmp" ]
@@ -1467,8 +1432,6 @@ object CheckCommand "snmp-uptime" {
}
object CheckCommand "apt" {
- import "plugin-check-command"
-
command = [ PluginDir + "/check_apt" ]
arguments = {
@@ -1506,8 +1469,6 @@ object CheckCommand "apt" {
}
object CheckCommand "dhcp" {
- import "plugin-check-command"
-
command = [ PluginDir + "/check_dhcp" ]
arguments = {
@@ -1525,7 +1486,6 @@ object CheckCommand "dhcp" {
}
object CheckCommand "dns" {
- import "plugin-check-command"
import "ipv4-or-ipv6"
command = [ PluginDir + "/check_dns" ]
@@ -1570,7 +1530,6 @@ object CheckCommand "dns" {
}
object CheckCommand "dig" {
- import "plugin-check-command"
import "ipv4-or-ipv6"
command = [ PluginDir + "/check_dig" ]
@@ -1605,7 +1564,6 @@ object CheckCommand "dig" {
}
object CheckCommand "nscp" {
- import "plugin-check-command"
import "ipv4-or-ipv6"
command = [ PluginDir + "/check_nt" ]
@@ -1638,7 +1596,6 @@ object CheckCommand "nscp" {
}
object CheckCommand "by_ssh" {
- import "plugin-check-command"
import "ipv4-or-ipv6"
command = [ PluginDir + "/check_by_ssh" ]
@@ -1689,7 +1646,6 @@ object CheckCommand "by_ssh" {
}
object CheckCommand "ups" {
- import "plugin-check-command"
import "ipv4-or-ipv6"
command = [ PluginDir + "/check_ups" ]
@@ -1736,7 +1692,6 @@ object CheckCommand "ups" {
}
object CheckCommand "nrpe" {
- import "plugin-check-command"
import "ipv4-or-ipv6"
command = [ PluginDir + "/check_nrpe" ]
@@ -1779,7 +1734,6 @@ object CheckCommand "nrpe" {
}
object CheckCommand "hpjd" {
- import "plugin-check-command"
import "ipv4-or-ipv6"
command = [ PluginDir + "/check_hpjd" ]
@@ -1794,8 +1748,6 @@ object CheckCommand "hpjd" {
}
object CheckCommand "icmp" {
- import "plugin-check-command"
-
command = [ PluginDir + "/check_icmp" ]
arguments = {
@@ -1823,7 +1775,6 @@ object CheckCommand "icmp" {
}
object CheckCommand "ldap" {
- import "plugin-check-command"
import "ipv4-or-ipv6"
command = [ PluginDir + "/check_ldap" ]
@@ -1896,8 +1847,6 @@ object CheckCommand "ldap" {
}
object CheckCommand "clamd" {
- import "plugin-check-command"
-
command = [ PluginDir + "/check_clamd" ]
arguments = {
@@ -2000,8 +1949,6 @@ object CheckCommand "clamd" {
}
object CheckCommand "mailq" {
- import "plugin-check-command"
-
command = [ PluginDir + "/check_mailq" ]
arguments = {
@@ -2035,7 +1982,6 @@ object CheckCommand "mailq" {
}
object CheckCommand "pgsql" {
- import "plugin-check-command"
import "ipv4-or-ipv6"
command = [ PluginDir + "/check_pgsql" ]
@@ -2059,7 +2005,6 @@ object CheckCommand "pgsql" {
}
object CheckCommand "mysql" {
- import "plugin-check-command"
import "ipv4-or-ipv6"
command = [ PluginDir + "/check_mysql" ]
@@ -2095,8 +2040,6 @@ object CheckCommand "mysql" {
}
object CheckCommand "negate" {
- import "plugin-check-command"
-
command = [ PluginDir + "/negate" ]
arguments = {
@@ -2132,8 +2075,6 @@ object CheckCommand "negate" {
}
object CheckCommand "file_age" {
- import "plugin-check-command"
-
command = [ PluginDir + "/check_file_age" ]
arguments = {
@@ -2167,8 +2108,6 @@ object CheckCommand "file_age" {
}
object CheckCommand "smart" {
- import "plugin-check-command"
-
command = [ PluginDir + "/check_ide_smart" ]
arguments = {
@@ -2181,7 +2120,6 @@ object CheckCommand "smart" {
}
object CheckCommand "breeze" {
- import "plugin-check-command"
import "ipv4-or-ipv6"
command = [ PluginDir + "/check_breeze" ]
@@ -2214,8 +2152,6 @@ object CheckCommand "breeze" {
}
object CheckCommand "flexlm" {
- import "plugin-check-command"
-
command = [ PluginDir + "/check_flexlm" ]
arguments = {
@@ -2232,7 +2168,6 @@ object CheckCommand "flexlm" {
}
object CheckCommand "game" {
- import "plugin-check-command"
import "ipv4-or-ipv6"
command = [ PluginDir + "/check_game" ]
@@ -2282,7 +2217,6 @@ object CheckCommand "game" {
}
object CheckCommand "mysql_query" {
- import "plugin-check-command"
import "ipv4-or-ipv6"
command = [ PluginDir + "/check_mysql_query" ]
diff --git a/itl/plugins-contrib.d/databases.conf b/itl/plugins-contrib.d/databases.conf
index 24b128bd5..9f3358cf0 100644
--- a/itl/plugins-contrib.d/databases.conf
+++ b/itl/plugins-contrib.d/databases.conf
@@ -18,8 +18,6 @@
******************************************************************************/
object CheckCommand "mssql_health" {
- import "plugin-check-command"
-
command = [ PluginContribDir + "/check_mssql_health" ]
arguments = {
@@ -95,7 +93,6 @@ object CheckCommand "mssql_health" {
}
object CheckCommand "mysql_health" {
- import "plugin-check-command"
import "ipv4-or-ipv6"
command = [ PluginContribDir + "/check_mysql_health" ]
@@ -247,8 +244,6 @@ object CheckCommand "mysql_health" {
}
object CheckCommand "db2_health" {
- import "plugin-check-command"
-
command = [ PluginContribDir + "/check_db2_health" ]
arguments = {
@@ -338,8 +333,6 @@ object CheckCommand "db2_health" {
}
object CheckCommand "oracle_health" {
- import "plugin-check-command"
-
command = [ PluginContribDir + "/check_oracle_health" ]
arguments = {
@@ -416,7 +409,6 @@ object CheckCommand "oracle_health" {
}
object CheckCommand "postgres" {
- import "plugin-check-command"
import "ipv4-or-ipv6"
command = [ PluginContribDir + "/check_postgres.pl" ]
@@ -504,8 +496,6 @@ object CheckCommand "postgres" {
}
object CheckCommand "mongodb" {
- import "plugin-check-command"
-
command = [ PluginContribDir + "/check_mongodb.py" ]
arguments = {
@@ -585,8 +575,6 @@ object CheckCommand "mongodb" {
}
object CheckCommand "elasticsearch" {
- import "plugin-check-command"
-
command = [ PluginContribDir + "/check_elasticsearch" ]
arguments = {
@@ -621,8 +609,6 @@ object CheckCommand "elasticsearch" {
}
object CheckCommand "redis" {
- import "plugin-check-command"
-
command = [ PluginContribDir + "/check_redis.pl" ]
arguments = {
diff --git a/itl/plugins-contrib.d/hardware.conf b/itl/plugins-contrib.d/hardware.conf
index e3700a9b0..9d8c0167c 100644
--- a/itl/plugins-contrib.d/hardware.conf
+++ b/itl/plugins-contrib.d/hardware.conf
@@ -18,7 +18,6 @@
******************************************************************************/
object CheckCommand "hpasm" {
- import "plugin-check-command"
import "ipv4-or-ipv6"
command = [ PluginContribDir + "/check_hpasm" ]
diff --git a/itl/plugins-contrib.d/icingacli.conf b/itl/plugins-contrib.d/icingacli.conf
index 38d47a0af..52b948614 100644
--- a/itl/plugins-contrib.d/icingacli.conf
+++ b/itl/plugins-contrib.d/icingacli.conf
@@ -18,8 +18,6 @@
******************************************************************************/
template CheckCommand "icingacli" {
- import "plugin-check-command"
-
command = [ PrefixDir + "/bin/icingacli" ]
}
diff --git a/itl/plugins-contrib.d/ipmi.conf b/itl/plugins-contrib.d/ipmi.conf
index 6bb6d9812..a64b59ef5 100644
--- a/itl/plugins-contrib.d/ipmi.conf
+++ b/itl/plugins-contrib.d/ipmi.conf
@@ -18,7 +18,6 @@
******************************************************************************/
object CheckCommand "ipmi-sensor" {
- import "plugin-check-command"
import "ipv4-or-ipv6"
command = [ PluginContribDir + "/check_ipmi_sensor" ]
diff --git a/itl/plugins-contrib.d/metrics.conf b/itl/plugins-contrib.d/metrics.conf
index acfbf2f0e..4d3860890 100644
--- a/itl/plugins-contrib.d/metrics.conf
+++ b/itl/plugins-contrib.d/metrics.conf
@@ -18,8 +18,6 @@
******************************************************************************/
object CheckCommand "graphite" {
- import "plugin-check-command"
-
command = [ PluginContribDir + "/check_graphite" ]
arguments = {
diff --git a/itl/plugins-contrib.d/network-components.conf b/itl/plugins-contrib.d/network-components.conf
index 9c87296be..3cba2c7a6 100644
--- a/itl/plugins-contrib.d/network-components.conf
+++ b/itl/plugins-contrib.d/network-components.conf
@@ -18,8 +18,6 @@
******************************************************************************/
object CheckCommand "interfacetable" {
- import "plugin-check-command"
-
command = [ PluginContribDir + "/check_interface_table_v3t" ]
arguments = {
@@ -302,7 +300,6 @@ object CheckCommand "interfacetable" {
}
object CheckCommand "iftraffic" {
- import "plugin-check-command"
import "ipv4-or-ipv6"
command = [ PluginContribDir + "/check_iftraffic.pl"]
@@ -351,7 +348,6 @@ object CheckCommand "iftraffic" {
}
object CheckCommand "iftraffic64" {
- import "plugin-check-command"
import "ipv4-or-ipv6"
command = [ PluginContribDir + "/check_iftraffic64.pl"]
@@ -400,7 +396,6 @@ object CheckCommand "iftraffic64" {
}
object CheckCommand "interfaces" {
- import "plugin-check-command"
import "ipv4-or-ipv6"
command = [ PluginContribDir + "/check_interfaces" ]
@@ -503,7 +498,6 @@ object CheckCommand "interfaces" {
}
object CheckCommand "nwc_health" {
- import "plugin-check-command"
import "ipv4-or-ipv6"
command = [ PluginContribDir + "/check_nwc_health" ]
diff --git a/itl/plugins-contrib.d/network-services.conf b/itl/plugins-contrib.d/network-services.conf
index 00cdf0984..168f1fa45 100644
--- a/itl/plugins-contrib.d/network-services.conf
+++ b/itl/plugins-contrib.d/network-services.conf
@@ -18,7 +18,6 @@
******************************************************************************/
object CheckCommand "kdc" {
- import "plugin-check-command"
import "ipv4-or-ipv6"
command = [ PluginContribDir + "/check_kdc" ]
@@ -48,7 +47,6 @@ object CheckCommand "kdc" {
}
object CheckCommand "rbl" {
- import "plugin-check-command"
import "ipv4-or-ipv6"
command = [ PluginContribDir + "/check_rbl" ]
diff --git a/itl/plugins-contrib.d/operating-system.conf b/itl/plugins-contrib.d/operating-system.conf
index 5d47f5cba..0fce013a6 100644
--- a/itl/plugins-contrib.d/operating-system.conf
+++ b/itl/plugins-contrib.d/operating-system.conf
@@ -18,8 +18,6 @@
******************************************************************************/
object CheckCommand "mem" {
- import "plugin-check-command"
-
command = [ PluginContribDir + "/check_mem.pl" ]
arguments = {
@@ -51,8 +49,6 @@ object CheckCommand "mem" {
}
object CheckCommand "running_kernel" {
- import "plugin-check-command"
-
command = {{
var use_sudo = macro("$running_kernel_use_sudo$")
@@ -75,8 +71,6 @@ object CheckCommand "running_kernel" {
}
object CheckCommand "yum" {
- import "plugin-check-command"
-
command = [ PluginContribDir + "/check_yum" ]
arguments = {
@@ -128,8 +122,6 @@ object CheckCommand "yum" {
}
object CheckCommand "iostat" {
- import "plugin-check-command"
-
command = [ PluginContribDir + "/check_iostat" ]
arguments = {
diff --git a/itl/plugins-contrib.d/virtualization.conf b/itl/plugins-contrib.d/virtualization.conf
index 035e4cad8..fa63432cf 100644
--- a/itl/plugins-contrib.d/virtualization.conf
+++ b/itl/plugins-contrib.d/virtualization.conf
@@ -18,8 +18,6 @@
******************************************************************************/
object CheckCommand "esxi_hardware" {
- import "plugin-check-command"
-
command = [ PluginContribDir + "/check_esxi_hardware.py" ]
arguments = {
diff --git a/itl/plugins-contrib.d/vmware.conf b/itl/plugins-contrib.d/vmware.conf
index 406e6e4e8..caf7647f1 100644
--- a/itl/plugins-contrib.d/vmware.conf
+++ b/itl/plugins-contrib.d/vmware.conf
@@ -22,8 +22,6 @@
*/
template CheckCommand "vmware-esx-command" {
- import "plugin-check-command"
-
command = [ PluginContribDir + "/check_vmware_esx" ]
arguments = {
diff --git a/itl/plugins-contrib.d/web.conf b/itl/plugins-contrib.d/web.conf
index 9e2a785ef..e8999c0ab 100644
--- a/itl/plugins-contrib.d/web.conf
+++ b/itl/plugins-contrib.d/web.conf
@@ -18,8 +18,6 @@
******************************************************************************/
object CheckCommand "webinject" {
- import "plugin-check-command"
-
command = [ PluginContribDir + "/check_webinject" ]
arguments = {
@@ -63,8 +61,6 @@ object CheckCommand "webinject" {
}
object CheckCommand "jmx4perl" {
- import "plugin-check-command"
-
command = [ PluginContribDir + "/check_jmx4perl" ]
arguments = {
diff --git a/lib/base/configwriter.cpp b/lib/base/configwriter.cpp
index 5cd6013df..124d5d79b 100644
--- a/lib/base/configwriter.cpp
+++ b/lib/base/configwriter.cpp
@@ -243,6 +243,7 @@ const std::vector& ConfigWriter::GetKeywords(void)
keywords.push_back("locals");
keywords.push_back("use");
keywords.push_back("__using");
+ keywords.push_back("default");
keywords.push_back("ignore_on_error");
keywords.push_back("current_filename");
keywords.push_back("current_line");
diff --git a/lib/config/config_lexer.ll b/lib/config/config_lexer.ll
index 8cac9f157..50614d18f 100644
--- a/lib/config/config_lexer.ll
+++ b/lib/config/config_lexer.ll
@@ -182,6 +182,7 @@ locals return T_LOCALS;
use return T_USE;
__using return T_USING;
apply return T_APPLY;
+default return T_DEFAULT;
to return T_TO;
where return T_WHERE;
import return T_IMPORT;
diff --git a/lib/config/config_parser.yy b/lib/config/config_parser.yy
index 5d4d2b6f1..a7c9bc573 100644
--- a/lib/config/config_parser.yy
+++ b/lib/config/config_parser.yy
@@ -144,6 +144,7 @@ static void MakeRBinaryOp(Expression** result, Expression *left, Expression *rig
%token T_GLOBALS "globals (T_GLOBALS)"
%token T_LOCALS "locals (T_LOCALS)"
%token T_CONST "const (T_CONST)"
+%token T_DEFAULT "default (T_DEFAULT)"
%token T_IGNORE_ON_ERROR "ignore_on_error (T_IGNORE_ON_ERROR)"
%token T_CURRENT_FILENAME "current_filename (T_CURRENT_FILENAME)"
%token T_CURRENT_LINE "current_line (T_CURRENT_LINE)"
@@ -199,6 +200,7 @@ static void MakeRBinaryOp(Expression** result, Expression *left, Expression *rig
%type apply
%type optional_rterm
%type target_type_specifier
+%type default_specifier
%type ignore_specifier
%type use_specifier
%type use_specifier_items
@@ -370,7 +372,7 @@ object:
context->m_Assign.push(0);
context->m_Ignore.push(0);
}
- object_declaration identifier optional_rterm use_specifier ignore_specifier
+ object_declaration identifier optional_rterm use_specifier default_specifier ignore_specifier
{
BeginFlowControlBlock(context, FlowControlReturn, false);
}
@@ -381,6 +383,10 @@ object:
context->m_ObjectAssign.pop();
bool abstract = $2;
+ bool defaultTmpl = $6;
+
+ if (!abstract && defaultTmpl)
+ BOOST_THROW_EXCEPTION(ScriptError("'default' keyword is invalid for object definitions", DebugInfoRange(@2, @4)));
String type = *$3;
delete $3;
@@ -416,7 +422,7 @@ object:
BOOST_THROW_EXCEPTION(ScriptError("object rule 'ignore' is missing 'assign' for type '" + type + "'", DebugInfoRange(@2, @4)));
}
- $$ = new ObjectExpression(abstract, type, $4, filter, context->GetZone(), context->GetPackage(), $5, $6, $8, DebugInfoRange(@2, @6));
+ $$ = new ObjectExpression(abstract, type, $4, filter, context->GetZone(), context->GetPackage(), $5, $6, $7, $9, DebugInfoRange(@2, @7));
}
;
@@ -1044,6 +1050,16 @@ target_type_specifier: /* empty */
}
;
+default_specifier: /* empty */
+ {
+ $$ = false;
+ }
+ | T_DEFAULT
+ {
+ $$ = true;
+ }
+ ;
+
ignore_specifier: /* empty */
{
$$ = false;
diff --git a/lib/config/configitem.cpp b/lib/config/configitem.cpp
index 8b4f93ce3..197738438 100644
--- a/lib/config/configitem.cpp
+++ b/lib/config/configitem.cpp
@@ -59,11 +59,12 @@ REGISTER_SCRIPTFUNCTION_NS(Internal, run_with_activation_context, &ConfigItem::R
*/
ConfigItem::ConfigItem(const String& type, const String& name,
bool abstract, const boost::shared_ptr& exprl,
- const boost::shared_ptr& filter, bool ignoreOnError,
+ const boost::shared_ptr& filter, bool defaultTmpl, bool ignoreOnError,
const DebugInfo& debuginfo, const Dictionary::Ptr& scope,
const String& zone, const String& package)
: m_Type(type), m_Name(name), m_Abstract(abstract),
- m_Expression(exprl), m_Filter(filter), m_IgnoreOnError(ignoreOnError),
+ m_Expression(exprl), m_Filter(filter),
+ m_DefaultTmpl(defaultTmpl), m_IgnoreOnError(ignoreOnError),
m_DebugInfo(debuginfo), m_Scope(scope), m_Zone(zone),
m_Package(package)
{
@@ -99,6 +100,16 @@ bool ConfigItem::IsAbstract(void) const
return m_Abstract;
}
+bool ConfigItem::IsDefaultTemplate(void) const
+{
+ return m_DefaultTmpl;
+}
+
+bool ConfigItem::IsIgnoreOnError(void) const
+{
+ return m_IgnoreOnError;
+}
+
/**
* Retrieves the debug information for the configuration item.
*
@@ -649,6 +660,26 @@ std::vector ConfigItem::GetItems(const String& type)
return items;
}
+std::vector ConfigItem::GetDefaultTemplates(const String& type)
+{
+ std::vector items;
+
+ boost::mutex::scoped_lock lock(m_Mutex);
+
+ auto it = m_Items.find(type);
+
+ if (it == m_Items.end())
+ return items;
+
+ for (const ItemMap::value_type& kv : it->second)
+ {
+ if (kv.second->IsDefaultTemplate())
+ items.push_back(kv.second);
+ }
+
+ return items;
+}
+
void ConfigItem::RemoveIgnoredItems(const String& allowedConfigPath)
{
boost::mutex::scoped_lock lock(m_Mutex);
diff --git a/lib/config/configitem.hpp b/lib/config/configitem.hpp
index 96e5e6ea4..6cd80aa64 100644
--- a/lib/config/configitem.hpp
+++ b/lib/config/configitem.hpp
@@ -43,14 +43,15 @@ public:
ConfigItem(const String& type, const String& name, bool abstract,
const boost::shared_ptr& exprl,
const boost::shared_ptr& filter,
- bool ignoreOnError, const DebugInfo& debuginfo,
+ bool defaultTmpl, bool ignoreOnError, const DebugInfo& debuginfo,
const Dictionary::Ptr& scope, const String& zone,
const String& package);
String GetType(void) const;
String GetName(void) const;
bool IsAbstract(void) const;
- bool GetIgnoreOnError(void) const;
+ bool IsDefaultTemplate(void) const;
+ bool IsIgnoreOnError(void) const;
std::vector GetParents(void) const;
@@ -74,6 +75,7 @@ public:
static bool RunWithActivationContext(const Function::Ptr& function);
static std::vector GetItems(const String& type);
+ static std::vector GetDefaultTemplates(const String& type);
static void RemoveIgnoredItems(const String& allowedConfigPath);
@@ -84,6 +86,7 @@ private:
boost::shared_ptr m_Expression;
boost::shared_ptr m_Filter;
+ bool m_DefaultTmpl;
bool m_IgnoreOnError;
DebugInfo m_DebugInfo; /**< Debug information. */
Dictionary::Ptr m_Scope; /**< variable scope. */
diff --git a/lib/config/configitembuilder.cpp b/lib/config/configitembuilder.cpp
index f45128b1c..9f7637ddf 100644
--- a/lib/config/configitembuilder.cpp
+++ b/lib/config/configitembuilder.cpp
@@ -79,6 +79,11 @@ void ConfigItemBuilder::SetFilter(const boost::shared_ptr& filter)
m_Filter = filter;
}
+void ConfigItemBuilder::SetDefaultTemplate(bool defaultTmpl)
+{
+ m_DefaultTmpl = defaultTmpl;
+}
+
void ConfigItemBuilder::SetIgnoreOnError(bool ignoreOnError)
{
m_IgnoreOnError = ignoreOnError;
@@ -119,10 +124,25 @@ ConfigItem::Ptr ConfigItemBuilder::Compile(void)
dexpr->MakeInline();
exprs.push_back(dexpr);
+#ifdef I2_DEBUG
+ if (!m_Abstract) {
+ bool foundDefaultImport = false;
+
+ for (Expression *expr : m_Expressions) {
+ if (dynamic_cast(expr)) {
+ foundDefaultImport = true;
+ break;
+ }
+ }
+
+ ASSERT(foundDefaultImport);
+ }
+#endif /* I2_DEBUG */
+
boost::shared_ptr exprl = boost::make_shared(exprs, m_DebugInfo);
exprl->MakeInline();
return new ConfigItem(m_Type, m_Name, m_Abstract, exprl, m_Filter,
- m_IgnoreOnError, m_DebugInfo, m_Scope, m_Zone, m_Package);
+ m_DefaultTmpl, m_IgnoreOnError, m_DebugInfo, m_Scope, m_Zone, m_Package);
}
diff --git a/lib/config/configitembuilder.hpp b/lib/config/configitembuilder.hpp
index 621699054..e4dbab17d 100644
--- a/lib/config/configitembuilder.hpp
+++ b/lib/config/configitembuilder.hpp
@@ -48,6 +48,7 @@ public:
void SetScope(const Dictionary::Ptr& scope);
void SetZone(const String& zone);
void SetPackage(const String& package);
+ void SetDefaultTemplate(bool defaultTmpl);
void SetIgnoreOnError(bool ignoreOnError);
void AddExpression(Expression *expr);
@@ -65,6 +66,7 @@ private:
Dictionary::Ptr m_Scope; /**< variable scope. */
String m_Zone; /**< The zone. */
String m_Package; /**< The package name. */
+ bool m_DefaultTmpl;
bool m_IgnoreOnError; /**< Whether the object should be ignored when an error occurs in one of the expressions. */
};
diff --git a/lib/config/expression.cpp b/lib/config/expression.cpp
index 392db1d6d..c078c33f1 100644
--- a/lib/config/expression.cpp
+++ b/lib/config/expression.cpp
@@ -761,6 +761,26 @@ ExpressionResult ImportExpression::DoEvaluate(ScriptFrame& frame, DebugHint *dhi
return Empty;
}
+ExpressionResult ImportDefaultTemplatesExpression::DoEvaluate(ScriptFrame& frame, DebugHint *dhint) const
+{
+ if (frame.Sandboxed)
+ BOOST_THROW_EXCEPTION(ScriptError("Imports are not allowed in sandbox mode.", m_DebugInfo));
+
+ String type = VMOps::GetField(frame.Self, "type", frame.Sandboxed, m_DebugInfo);
+
+ for (const ConfigItem::Ptr& item : ConfigItem::GetDefaultTemplates(type)) {
+ Dictionary::Ptr scope = item->GetScope();
+
+ if (scope)
+ scope->CopyTo(frame.Locals);
+
+ ExpressionResult result = item->GetExpression()->Evaluate(frame, dhint);
+ CHECK_RESULT(result);
+ }
+
+ return Empty;
+}
+
ExpressionResult FunctionExpression::DoEvaluate(ScriptFrame& frame, DebugHint *dhint) const
{
return VMOps::NewFunction(frame, m_Name, m_Args, m_ClosedVars, m_Expression);
@@ -793,7 +813,7 @@ ExpressionResult ObjectExpression::DoEvaluate(ScriptFrame& frame, DebugHint *dhi
}
return VMOps::NewObject(frame, m_Abstract, m_Type, name, m_Filter, m_Zone,
- m_Package, m_IgnoreOnError, m_ClosedVars, m_Expression, m_DebugInfo);
+ m_Package, m_DefaultTmpl, m_IgnoreOnError, m_ClosedVars, m_Expression, m_DebugInfo);
}
ExpressionResult ForExpression::DoEvaluate(ScriptFrame& frame, DebugHint *dhint) const
diff --git a/lib/config/expression.hpp b/lib/config/expression.hpp
index 84cf464c7..dcde002cd 100644
--- a/lib/config/expression.hpp
+++ b/lib/config/expression.hpp
@@ -800,6 +800,17 @@ private:
Expression *m_Name;
};
+class I2_CONFIG_API ImportDefaultTemplatesExpression : public DebuggableExpression
+{
+public:
+ ImportDefaultTemplatesExpression(const DebugInfo& debugInfo = DebugInfo())
+ : DebuggableExpression(debugInfo)
+ { }
+
+protected:
+ virtual ExpressionResult DoEvaluate(ScriptFrame& frame, DebugHint *dhint) const override;
+};
+
class I2_CONFIG_API FunctionExpression : public DebuggableExpression
{
public:
@@ -879,9 +890,9 @@ class I2_CONFIG_API ObjectExpression : public DebuggableExpression
public:
ObjectExpression(bool abstract, const String& type, Expression *name, Expression *filter,
const String& zone, const String& package, std::map *closedVars,
- bool ignoreOnError, Expression *expression, const DebugInfo& debugInfo = DebugInfo())
+ bool defaultTmpl, bool ignoreOnError, Expression *expression, const DebugInfo& debugInfo = DebugInfo())
: DebuggableExpression(debugInfo), m_Abstract(abstract), m_Type(type),
- m_Name(name), m_Filter(filter), m_Zone(zone), m_Package(package),
+ m_Name(name), m_Filter(filter), m_Zone(zone), m_Package(package), m_DefaultTmpl(defaultTmpl),
m_IgnoreOnError(ignoreOnError), m_ClosedVars(closedVars), m_Expression(expression)
{ }
@@ -909,6 +920,7 @@ private:
boost::shared_ptr m_Filter;
String m_Zone;
String m_Package;
+ bool m_DefaultTmpl;
bool m_IgnoreOnError;
std::map *m_ClosedVars;
boost::shared_ptr m_Expression;
diff --git a/lib/config/vmops.hpp b/lib/config/vmops.hpp
index 948cce1da..fe557d07b 100644
--- a/lib/config/vmops.hpp
+++ b/lib/config/vmops.hpp
@@ -129,7 +129,7 @@ public:
}
static inline Value NewObject(ScriptFrame& frame, bool abstract, const String& type, const String& name, const boost::shared_ptr& filter,
- const String& zone, const String& package, bool ignoreOnError, std::map *closedVars, const boost::shared_ptr& expression, const DebugInfo& debugInfo = DebugInfo())
+ const String& zone, const String& package, bool defaultTmpl, bool ignoreOnError, std::map *closedVars, const boost::shared_ptr& expression, const DebugInfo& debugInfo = DebugInfo())
{
ConfigItemBuilder::Ptr item = new ConfigItemBuilder(debugInfo);
@@ -157,12 +157,16 @@ public:
item->SetType(type);
item->SetName(name);
+ if (!abstract)
+ item->AddExpression(new ImportDefaultTemplatesExpression());
+
item->AddExpression(new OwnedExpression(expression));
item->SetAbstract(abstract);
item->SetScope(EvaluateClosedVars(frame, closedVars));
item->SetZone(zone);
item->SetPackage(package);
item->SetFilter(filter);
+ item->SetDefaultTemplate(defaultTmpl);
item->SetIgnoreOnError(ignoreOnError);
item->Compile()->Register();
diff --git a/lib/icinga/dependency-apply.cpp b/lib/icinga/dependency-apply.cpp
index 7615776af..ec0548c93 100644
--- a/lib/icinga/dependency-apply.cpp
+++ b/lib/icinga/dependency-apply.cpp
@@ -71,7 +71,9 @@ bool Dependency::EvaluateApplyRuleInstance(const Checkable::Ptr& checkable, cons
builder->AddExpression(new SetExpression(MakeIndexer(ScopeThis, "zone"), OpSetLiteral, MakeLiteral(zone), di));
builder->AddExpression(new SetExpression(MakeIndexer(ScopeThis, "package"), OpSetLiteral, MakeLiteral(rule.GetPackage()), di));
-
+
+ builder->AddExpression(new ImportDefaultTemplatesExpression());
+
builder->AddExpression(new OwnedExpression(rule.GetExpression()));
ConfigItem::Ptr dependencyItem = builder->Compile();
diff --git a/lib/icinga/icinga-itl.conf b/lib/icinga/icinga-itl.conf
index 9c94dd068..769dba490 100644
--- a/lib/icinga/icinga-itl.conf
+++ b/lib/icinga/icinga-itl.conf
@@ -20,7 +20,7 @@
System.assert(Internal.run_with_activation_context(function() {
var _Internal = Internal.clone()
- template TimePeriod "legacy-timeperiod" use (_Internal) {
+ template TimePeriod "legacy-timeperiod" use (_Internal) default {
update = _Internal.LegacyTimePeriod
}
}))
diff --git a/lib/icinga/notification-apply.cpp b/lib/icinga/notification-apply.cpp
index af77c2285..6f5fc2a8d 100644
--- a/lib/icinga/notification-apply.cpp
+++ b/lib/icinga/notification-apply.cpp
@@ -73,6 +73,8 @@ bool Notification::EvaluateApplyRuleInstance(const Checkable::Ptr& checkable, co
builder->AddExpression(new OwnedExpression(rule.GetExpression()));
+ builder->AddExpression(new ImportDefaultTemplatesExpression());
+
ConfigItem::Ptr notificationItem = builder->Compile();
notificationItem->Register();
diff --git a/lib/icinga/scheduleddowntime-apply.cpp b/lib/icinga/scheduleddowntime-apply.cpp
index 6729587e5..5bafe404e 100644
--- a/lib/icinga/scheduleddowntime-apply.cpp
+++ b/lib/icinga/scheduleddowntime-apply.cpp
@@ -72,6 +72,8 @@ bool ScheduledDowntime::EvaluateApplyRuleInstance(const Checkable::Ptr& checkabl
builder->AddExpression(new OwnedExpression(rule.GetExpression()));
+ builder->AddExpression(new ImportDefaultTemplatesExpression());
+
ConfigItem::Ptr downtimeItem = builder->Compile();
downtimeItem->Register();
diff --git a/lib/icinga/service-apply.cpp b/lib/icinga/service-apply.cpp
index ac34327a2..352bb49a8 100644
--- a/lib/icinga/service-apply.cpp
+++ b/lib/icinga/service-apply.cpp
@@ -66,6 +66,8 @@ bool Service::EvaluateApplyRuleInstance(const Host::Ptr& host, const String& nam
builder->AddExpression(new OwnedExpression(rule.GetExpression()));
+ builder->AddExpression(new ImportDefaultTemplatesExpression());
+
ConfigItem::Ptr serviceItem = builder->Compile();
serviceItem->Register();
diff --git a/lib/methods/methods-itl.conf b/lib/methods/methods-itl.conf
index 4e0c89291..c19bae311 100644
--- a/lib/methods/methods-itl.conf
+++ b/lib/methods/methods-itl.conf
@@ -32,7 +32,7 @@ System.assert(Internal.run_with_activation_context(function() {
execute = _Internal.ClusterZoneCheck
}
- template CheckCommand "plugin-check-command" use (_Internal) {
+ template CheckCommand "plugin-check-command" use (_Internal) default {
execute = _Internal.PluginCheck
}
@@ -44,11 +44,11 @@ System.assert(Internal.run_with_activation_context(function() {
}
}
- template NotificationCommand "plugin-notification-command" use (_Internal) {
+ template NotificationCommand "plugin-notification-command" use (_Internal) default {
execute = _Internal.PluginNotification
}
- template EventCommand "plugin-event-command" use (_Internal) {
+ template EventCommand "plugin-event-command" use (_Internal) default {
execute = _Internal.PluginEvent
}