diff --git a/doc/puppet_classes/cd_nagios.html b/doc/puppet_classes/cd_nagios.html
index f1c943f..7448d1d 100644
--- a/doc/puppet_classes/cd_nagios.html
+++ b/doc/puppet_classes/cd_nagios.html
@@ -139,7 +139,7 @@ class cd_nagios {
diff --git a/doc/puppet_classes/cd_nagios_3A_3Acertbot_3A_3Acerts.html b/doc/puppet_classes/cd_nagios_3A_3Acertbot_3A_3Acerts.html
index c035721..18a63c9 100644
--- a/doc/puppet_classes/cd_nagios_3A_3Acertbot_3A_3Acerts.html
+++ b/doc/puppet_classes/cd_nagios_3A_3Acertbot_3A_3Acerts.html
@@ -230,7 +230,7 @@ class cd_nagios::certbot::certs (
diff --git a/doc/puppet_classes/cd_nagios_3A_3Aclient_3A_3Atarget.html b/doc/puppet_classes/cd_nagios_3A_3Aclient_3A_3Atarget.html
index 27890a0..113dbd5 100644
--- a/doc/puppet_classes/cd_nagios_3A_3Aclient_3A_3Atarget.html
+++ b/doc/puppet_classes/cd_nagios_3A_3Aclient_3A_3Atarget.html
@@ -368,7 +368,7 @@ class cd_nagios::client::target (
diff --git a/doc/puppet_classes/cd_nagios_3A_3Afirewall_3A_3Aiptables.html b/doc/puppet_classes/cd_nagios_3A_3Afirewall_3A_3Aiptables.html
index f1ad5b9..b619962 100644
--- a/doc/puppet_classes/cd_nagios_3A_3Afirewall_3A_3Aiptables.html
+++ b/doc/puppet_classes/cd_nagios_3A_3Afirewall_3A_3Aiptables.html
@@ -207,7 +207,7 @@ class cd_nagios::firewall::iptables (
diff --git a/doc/puppet_classes/cd_nagios_3A_3Amain_3A_3Aconfig.html b/doc/puppet_classes/cd_nagios_3A_3Amain_3A_3Aconfig.html
index 30e3a93..15ce4a4 100644
--- a/doc/puppet_classes/cd_nagios_3A_3Amain_3A_3Aconfig.html
+++ b/doc/puppet_classes/cd_nagios_3A_3Amain_3A_3Aconfig.html
@@ -195,7 +195,7 @@ class cd_nagios::main::config (
diff --git a/doc/puppet_classes/cd_nagios_3A_3Amain_3A_3Adirs.html b/doc/puppet_classes/cd_nagios_3A_3Amain_3A_3Adirs.html
index 110c7f2..5f43310 100644
--- a/doc/puppet_classes/cd_nagios_3A_3Amain_3A_3Adirs.html
+++ b/doc/puppet_classes/cd_nagios_3A_3Amain_3A_3Adirs.html
@@ -468,7 +468,7 @@ class cd_nagios::main::dirs (
diff --git a/doc/puppet_classes/cd_nagios_3A_3Amain_3A_3Ainstall.html b/doc/puppet_classes/cd_nagios_3A_3Amain_3A_3Ainstall.html
index 0a24015..2797401 100644
--- a/doc/puppet_classes/cd_nagios_3A_3Amain_3A_3Ainstall.html
+++ b/doc/puppet_classes/cd_nagios_3A_3Amain_3A_3Ainstall.html
@@ -235,7 +235,7 @@ class cd_nagios::main::install (
diff --git a/doc/puppet_classes/cd_nagios_3A_3Amain_3A_3Auser.html b/doc/puppet_classes/cd_nagios_3A_3Amain_3A_3Auser.html
index 7899f32..3ff3271 100644
--- a/doc/puppet_classes/cd_nagios_3A_3Amain_3A_3Auser.html
+++ b/doc/puppet_classes/cd_nagios_3A_3Amain_3A_3Auser.html
@@ -200,7 +200,7 @@ class cd_nagios::main::user (
diff --git a/doc/puppet_classes/cd_nagios_3A_3Anagios_3A_3Aobjects_3A_3Acommands.html b/doc/puppet_classes/cd_nagios_3A_3Anagios_3A_3Aobjects_3A_3Acommands.html
index bc907ec..c7368ea 100644
--- a/doc/puppet_classes/cd_nagios_3A_3Anagios_3A_3Aobjects_3A_3Acommands.html
+++ b/doc/puppet_classes/cd_nagios_3A_3Anagios_3A_3Aobjects_3A_3Acommands.html
@@ -77,7 +77,8 @@
Summary
- Class manages all configuration files required for cd_nagios.
+ Class manages all commands known to NAGIOS through Puppet exports,
+and populates /etc/nagios/conf.d/nagios_commands.cfg.
+ Class manages /etc/nagios/conf.d/templates.cfg through concat.
+
+
Overview
+
+
+
+
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 www.gnu.org/licenses/.
+ }
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 www.gnu.org/licenses/.
+
+
\ No newline at end of file
diff --git a/doc/puppet_defined_types/cd_nagios_3A_3Aserver_3A_3Aaccess.html b/doc/puppet_defined_types/cd_nagios_3A_3Aserver_3A_3Aaccess.html
index 7bacdd4..ec329c8 100644
--- a/doc/puppet_defined_types/cd_nagios_3A_3Aserver_3A_3Aaccess.html
+++ b/doc/puppet_defined_types/cd_nagios_3A_3Aserver_3A_3Aaccess.html
@@ -220,7 +220,7 @@ $ng_service = $::cd_nagios::params::ng_service
diff --git a/doc/top-level-namespace.html b/doc/top-level-namespace.html
index cee4a67..2f4cabc 100644
--- a/doc/top-level-namespace.html
+++ b/doc/top-level-namespace.html
@@ -90,7 +90,7 @@
diff --git a/manifests/nagios/objects/commands.pp b/manifests/nagios/objects/commands.pp
index 9b44306..ca20522 100644
--- a/manifests/nagios/objects/commands.pp
+++ b/manifests/nagios/objects/commands.pp
@@ -18,8 +18,9 @@
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-# @summary Class manages all configuration files required for cd_nagios.
-##############################################################################
+# @summary Class manages all commands known to NAGIOS through Puppet exports,
+# 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..f802b18
--- /dev/null
+++ b/manifests/nagios/objects/template_rules.pp
@@ -0,0 +1,53 @@
+## 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.
+# @example cd_nagios::objects::templates { $name:
+# ng_template_object => 'service',
+# }
+################################################################################
+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,
+ seltype => nagios_etc_t,
+ seluser => system_u,
+ content => template[$ng_templates_head_erb],
+ notify => Service[$ng_service],
+ }
+
+ # example rule
+ cd_nagios::objects::templates { $name:
+ ng_template_object => 'contact',
+ }
+ }
+}
diff --git a/manifests/nagios/objects/templates.pp b/manifests/nagios/objects/templates.pp
new file mode 100644
index 0000000..7c05639
--- /dev/null
+++ b/manifests/nagios/objects/templates.pp
@@ -0,0 +1,48 @@
+## 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.
+################################################################################
+define cd_nagios::nagios::objects::templates (
+
+$ng_template_object = undef,
+$ng_template_object_name = undef,
+$ng_svc_notification_period = '24x7',
+$ng_host_notification_period = '24x7',
+$ng_service_notification_options = 'w,u,c,r,f,s',
+$ng_host_notification_options = 'd,u,r,f,s',
+$ng_service_notification_commands = 'notify-service-by-email',
+$ng_host_notification_commands = 'notify-host-by-email',
+$ng_object_register = '0',
+
+) {
+
+$ng_nagios_server = $::cd_nagios::params::ng_nagios_server
+$ng_target_templates = $::cd_nagios::params::ng_target_templates
+$ng_templates_rule_erb = $::cd_nagios::params::ng_templates_rule_erb
+
+ if $::fqdn == $ng_nagios_server {
+
+ concat::fragment { $name:
+ target => $ng_target_templates,
+ content => template($ng_templates_rule_erb),
+ }
+ }
+}
diff --git a/manifests/params.pp b/manifests/params.pp
index 66327cd..134e21c 100644
--- a/manifests/params.pp
+++ b/manifests/params.pp
@@ -959,8 +959,9 @@ $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_templates_rule_erb = 'cd_nagios/nagios/templates_cfg_rule.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 5d8cbd2..3ec4b42 100644
--- a/manifests/server/service.pp
+++ b/manifests/server/service.pp
@@ -28,6 +28,8 @@ 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.
diff --git a/templates/nagios/templates_cfg_rule.erb b/templates/nagios/templates_cfg_rule.erb
new file mode 100644
index 0000000..b5a213d
--- /dev/null
+++ b/templates/nagios/templates_cfg_rule.erb
@@ -0,0 +1,18 @@
+
+<% if @ng_template_object == 'contact' -%>
+define <%= @ng_template_object %>{
+ name <%= @ng_template_object_name %> ;
+ service_notification_period <%= @ng_svc_notification_period %> ;
+ host_notification_period <%= @ng_host_notification_period %> ;
+ service_notification_options <%= @ng_service_notification_options %> ;
+ host_notification_options <%= @ng_host_notification_options %> ;
+ service_notification_commands <%= @ng_service_notification_commands %> ;
+ host_notification_commands <%= @ng_host_notification_commands %> ;
+ register <%= @ng_object_register %> ;
+ }
+<% elsif @ng_template_object == 'host' -%>
+
+<% elsif @ng_template_object == 'service' -%>
+
+
+<% end -%>