diff --git a/manifests/nagios/objects/commands.pp b/manifests/nagios/objects/commands.pp
index 22dc856..ca20522 100644
--- a/manifests/nagios/objects/commands.pp
+++ b/manifests/nagios/objects/commands.pp
@@ -19,8 +19,8 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
# @summary Class manages all commands known to NAGIOS through Puppet exports,
-# and populates /etc/nagios/conf.d/nagios_commands.cfg
-##############################################################################
+# and populates /etc/nagios/conf.d/nagios_commands.cfg.
+################################################################################
class cd_nagios::nagios::objects::commands (
) inherits cd_nagios::params {
diff --git a/manifests/nagios/objects/template_rules.pp b/manifests/nagios/objects/template_rules.pp
new file mode 100644
index 0000000..19bcf6c
--- /dev/null
+++ b/manifests/nagios/objects/template_rules.pp
@@ -0,0 +1,45 @@
+## cd_nagios::nagios::objects::template_rules.pp
+# Module name: cd_nagios
+# Author: Arne Teuke (arne_teuke@ConfDroid.com)
+# # License:
+# This file is part of cd_nagios.
+#
+# cd_nagios is used for providing automatic configuration of Nagios
+# Copyright (C) 2016 ConfDroid (copyright@ConfDroid.com)
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+# @summary Class manages /etc/nagios/conf.d/templates.cfg through concat.
+################################################################################
+class cd_nagios::nagios::objects::template_rules (
+
+) inherits cd_nagios::params {
+
+ if $::fqdn == $ng_nagios_server {
+
+ # create the templates.cfg file
+
+ concat { $ng_target_templates:
+ ensure => present,
+ path => $ng_target_templates,
+ owner => $ng_user,
+ group => $ng_user,
+ mode => '0640',
+ selrange => s0,
+ selrole => object_r,
+ aeltype => nagios_etc_t,
+ seluser => system_u,
+ content => template[$ng_templates_head_erb]
+ notify => Service[$ng_service],
+ }
+ }
+}
diff --git a/manifests/nagios/objects/templates.pp b/manifests/nagios/objects/templates.pp
new file mode 100644
index 0000000..590d05c
--- /dev/null
+++ b/manifests/nagios/objects/templates.pp
@@ -0,0 +1,29 @@
+## cd_nagios::nagios::objects::templates.pp
+# Module name: cd_nagios
+# Author: Arne Teuke (arne_teuke@ConfDroid.com)
+# # License:
+# This file is part of cd_nagios.
+#
+# cd_nagios is used for providing automatic configuration of Nagios
+# Copyright (C) 2016 ConfDroid (copyright@ConfDroid.com)
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+# @summary Define manages populates /etc/nagios/conf.d/templates.cfg.
+################################################################################
+defie cd_nagios::nagios::objects::templates (
+
+) {
+
+$ng_target_templates = $::cd_nagios::params::ng_target_templates
+
+}
diff --git a/manifests/params.pp b/manifests/params.pp
index 66327cd..95b88ee 100644
--- a/manifests/params.pp
+++ b/manifests/params.pp
@@ -959,8 +959,8 @@ $ng_certbot_check = "${ng_certbot_archive}/${ng_webserver_name}/cert1.pe
$ng_certbot_live = "${ng_certbot_main_dir}/live"
# nagios
-
$ng_target_templates = "${ng_conf_d_dir}/templates.cfg"
+$ng_templates_head_erb = 'cd_nagios/nagios/templates_cfg_head.erb'
$ng_target_timeperiods = "${ng_conf_d_dir}/timeperiods.cfg"
$ng_target_localhost = "${ng_conf_d_dir}/nagios_localhost.cfg"
$ng_target_host = "${ng_conf_d_dir}/nagios_host.cfg"
diff --git a/manifests/server/service.pp b/manifests/server/service.pp
index 315f7f8..3ec4b42 100644
--- a/manifests/server/service.pp
+++ b/manifests/server/service.pp
@@ -29,6 +29,7 @@ class cd_nagios::server::service (
require cd_nagios::server::files
require cd_nagios::server::access_rules
require cd_nagios::nagios::objects::commands
+ require cd_nagios::nagios::objects::template_rules
service { $ng_service:
ensure => running,
diff --git a/templates/nagios/templates_cfg.erb b/templates/nagios/templates_cfg.erb
new file mode 100755
index 0000000..fad436e
--- /dev/null
+++ b/templates/nagios/templates_cfg.erb
@@ -0,0 +1,197 @@
+###############################################################################
+# TEMPLATES.CFG - SAMPLE OBJECT TEMPLATES
+#
+#
+# NOTES: This config file provides you with some example object definition
+# templates that are refered by other host, service, contact, etc.
+# definitions in other config files.
+#
+# You don't need to keep these definitions in a separate file from your
+# other object definitions. This has been done just to make things
+# easier to understand.
+#
+###############################################################################
+
+
+
+###############################################################################
+###############################################################################
+#
+# CONTACT TEMPLATES
+#
+###############################################################################
+###############################################################################
+
+# Generic contact definition template - This is NOT a real contact, just a template!
+
+define contact{
+ name generic-contact ; The name of this contact template
+ service_notification_period 24x7 ; service notifications can be sent anytime
+ host_notification_period 24x7 ; host notifications can be sent anytime
+ service_notification_options w,u,c,r,f,s ; send notifications for all service states, flapping events, and scheduled downtime events
+ host_notification_options d,u,r,f,s ; send notifications for all host states, flapping events, and scheduled downtime events
+ service_notification_commands notify-service-by-email ; send service notifications via email
+ host_notification_commands notify-host-by-email ; send host notifications via email
+ register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL CONTACT, JUST A TEMPLATE!
+ }
+
+
+
+
+###############################################################################
+###############################################################################
+#
+# HOST TEMPLATES
+#
+###############################################################################
+###############################################################################
+
+# Generic host definition template - This is NOT a real host, just a template!
+
+define host{
+ name generic-host ; The name of this host template
+ notifications_enabled 1 ; Host notifications are enabled
+ event_handler_enabled 1 ; Host event handler is enabled
+ flap_detection_enabled 1 ; Flap detection is enabled
+ process_perf_data 1 ; Process performance data
+ retain_status_information 1 ; Retain status information across program restarts
+ retain_nonstatus_information 1 ; Retain non-status information across program restarts
+ notification_period 24x7 ; Send host notifications at any time
+ register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE!
+ }
+
+
+# Linux host definition template - This is NOT a real host, just a template!
+
+define host{
+ name linux-server ; The name of this host template
+ use generic-host ; This template inherits other values from the generic-host template
+ check_period 24x7 ; By default, Linux hosts are checked round the clock
+ check_interval 5 ; Actively check the host every 5 minutes
+ retry_interval 1 ; Schedule host check retries at 1 minute intervals
+ max_check_attempts 10 ; Check each Linux host 10 times (max)
+ check_command check-host-alive ; Default command to check Linux hosts
+ notification_period workhours ; Linux admins hate to be woken up, so we only notify during the day
+ ; Note that the notification_period variable is being overridden from
+ ; the value that is inherited from the generic-host template!
+ notification_interval 120 ; Resend notifications every 2 hours
+ notification_options d,u,r ; Only send notifications for specific host states
+ contact_groups admins ; Notifications get sent to the admins by default
+ register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE!
+ }
+
+
+
+# Windows host definition template - This is NOT a real host, just a template!
+
+define host{
+ name windows-server ; The name of this host template
+ use generic-host ; Inherit default values from the generic-host template
+ check_period 24x7 ; By default, Windows servers are monitored round the clock
+ check_interval 5 ; Actively check the server every 5 minutes
+ retry_interval 1 ; Schedule host check retries at 1 minute intervals
+ max_check_attempts 10 ; Check each server 10 times (max)
+ check_command check-host-alive ; Default command to check if servers are "alive"
+ notification_period 24x7 ; Send notification out at any time - day or night
+ notification_interval 30 ; Resend notifications every 30 minutes
+ notification_options d,r ; Only send notifications for specific host states
+ contact_groups admins ; Notifications get sent to the admins by default
+ hostgroups windows-servers ; Host groups that Windows servers should be a member of
+ register 0 ; DONT REGISTER THIS - ITS JUST A TEMPLATE
+ }
+
+
+# We define a generic printer template that can be used for most printers we monitor
+
+define host{
+ name generic-printer ; The name of this host template
+ use generic-host ; Inherit default values from the generic-host template
+ check_period 24x7 ; By default, printers are monitored round the clock
+ check_interval 5 ; Actively check the printer every 5 minutes
+ retry_interval 1 ; Schedule host check retries at 1 minute intervals
+ max_check_attempts 10 ; Check each printer 10 times (max)
+ check_command check-host-alive ; Default command to check if printers are "alive"
+ notification_period workhours ; Printers are only used during the workday
+ notification_interval 30 ; Resend notifications every 30 minutes
+ notification_options d,r ; Only send notifications for specific host states
+ contact_groups admins ; Notifications get sent to the admins by default
+ statusmap_image printer.png
+ register 0 ; DONT REGISTER THIS - ITS JUST A TEMPLATE
+ }
+
+
+# Define a template for switches that we can reuse
+define host{
+ name generic-switch ; The name of this host template
+ use generic-host ; Inherit default values from the generic-host template
+ check_period 24x7 ; By default, switches are monitored round the clock
+ check_interval 5 ; Switches are checked every 5 minutes
+ retry_interval 1 ; Schedule host check retries at 1 minute intervals
+ max_check_attempts 10 ; Check each switch 10 times (max)
+ check_command check-host-alive ; Default command to check if routers are "alive"
+ notification_period 24x7 ; Send notifications at any time
+ notification_interval 30 ; Resend notifications every 30 minutes
+ notification_options d,r ; Only send notifications for specific host states
+ contact_groups admins ; Notifications get sent to the admins by default
+ statusmap_image switch.png
+ register 0 ; DONT REGISTER THIS - ITS JUST A TEMPLATE
+ }
+
+# Define a template for routers that we can reuse
+define host{
+ name generic-router ; The name of this host template
+ use generic-switch ; Inherit default values from the generic-host template
+ statusmap_image router.png
+ register 0 ; DONT REGISTER THIS - ITS JUST A TEMPLATE
+ }
+
+
+
+
+###############################################################################
+###############################################################################
+#
+# SERVICE TEMPLATES
+#
+###############################################################################
+###############################################################################
+
+# Generic service definition template - This is NOT a real service, just a template!
+
+define service{
+ name generic-service ; The 'name' of this service template
+ active_checks_enabled 1 ; Active service checks are enabled
+ passive_checks_enabled 1 ; Passive service checks are enabled/accepted
+ parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems)
+ obsess_over_service 1 ; We should obsess over this service (if necessary)
+ check_freshness 0 ; Default is to NOT check service 'freshness'
+ notifications_enabled 1 ; Service notifications are enabled
+ event_handler_enabled 1 ; Service event handler is enabled
+ flap_detection_enabled 1 ; Flap detection is enabled
+ process_perf_data 1 ; Process performance data
+ retain_status_information 1 ; Retain status information across program restarts
+ retain_nonstatus_information 1 ; Retain non-status information across program restarts
+ is_volatile 0 ; The service is not volatile
+ check_period 24x7 ; The service can be checked at any time of the day
+ max_check_attempts 3 ; Re-check the service up to 3 times in order to determine its final (hard) state
+ check_interval 10 ; Check the service every 10 minutes under normal conditions
+ retry_interval 2 ; Re-check the service every two minutes until a hard state can be determined
+ contact_groups admins ; Notifications get sent out to everyone in the 'admins' group
+ notification_options w,u,c,r ; Send notifications about warning, unknown, critical, and recovery events
+ notification_interval 60 ; Re-notify about service problems every hour
+ notification_period 24x7 ; Notifications can be sent out at any time
+ register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE!
+ }
+
+
+# Local service definition template - This is NOT a real service, just a template!
+
+define service{
+ name local-service ; The name of this service template
+ use generic-service ; Inherit default values from the generic-service definition
+ max_check_attempts 4 ; Re-check the service up to 4 times in order to determine its final (hard) state
+ check_interval 5 ; Check the service every 5 minutes under normal conditions
+ retry_interval 1 ; Re-check the service every minute until a hard state can be determined
+ register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE!
+ }
+
diff --git a/templates/nagios/templates_cfg_head.erb b/templates/nagios/templates_cfg_head.erb
new file mode 100644
index 0000000..cbd2b0c
--- /dev/null
+++ b/templates/nagios/templates_cfg_head.erb
@@ -0,0 +1,7 @@
+###############################################################################
+### templates.cfg generated by Puppet | manual changes will be overwritten! ###
+###############################################################################
+########## Full reference file available at ##########
+########## https://confdroid.com/2017/07/nagios-templates-cfg/ ##########
+###############################################################################
+# rules are created below by external puppet rules.