Merge branch 'feature/object_defined_types' into develop

Merging in so that we get the completed host object defined type added.
This commit is contained in:
Nick Chappell 2014-07-26 21:20:31 -07:00
commit 4dedb8bdea
6 changed files with 176 additions and 41 deletions

View file

@ -116,4 +116,78 @@ class { 'icinga2::server':
}
</pre>
This will stop the `icinga2::server` class from trying to install the plugins pacakges, since the `icinga2::nrpe` class will already be installing them and will prevent a resulting duplicate resource error.
This will stop the `icinga2::server` class from trying to install the plugins pacakges, since the `icinga2::nrpe` class will already be installing them and will prevent a resulting duplicate resource error.
####Object type usage
This module includes several defined types that can be used to automatically generate Icinga 2 format object definitions. They function in a similar way to [the built-in Nagios types that are included in Puppet](http://docs.puppetlabs.com/guides/exported_resources.html#exported-resources-with-nagios).
#####Exported resources
Like the built-in Nagios types, they can be exported to PuppetDB as virtual resources and collected on your Icinga 2 server.
Nodes that are being monitored can have the `@@` virtual resources applied to them:
<pre>
@@icinga2::object::host { $::fqdn:
display_name => $::fqdn,
ipv4_address => $::ipaddress_eth0,
groups => ['linux_servers', 'mysql_servers'],
vars => {
os => 'linux',
virtual_machine => 'true',
distro => $::operatingsystem,
},
target_dir => '/etc/icinga2/objects/hosts',
target_file_name => "${fqdn}.conf"
}
</pre>
Then, on your Icinga 2 server, you can collect the exported virtual resources (notice the camel casing in the class name):
<pre>
#Collect all @@icinga2::object::host resources from PuppetDB that were exported by other machines:
Icinga2::Object::Host <<| |>> { }
</pre>
Unlike the built-in Nagios types, the file owner, group and mode of the automatically generated files can be controlled via the `target_file_owner`, `target_file_group` and `target_file_mode` parameters:
<pre>
@@icinga2::object::host { $::fqdn:
display_name => $::fqdn,
ipv4_address => $::ipaddress_eth0,
groups => ['linux_servers', 'mysql_servers'],
vars => {
os => 'linux',
virtual_machine => 'true',
distro => $::operatingsystem,
},
target_dir => '/etc/icinga2/objects/hosts',
target_file_name => "${fqdn}.conf"
target_file_owner = 'root',
target_file_group = 'root',
target_file_mode = '644'
}
</pre>
#####`undef` and default object values
Most of the object parameters *in the Puppet module* are set to **undef**.
This means that they will not be added to the rendered object definition files.
**However**, this doesn't mean that the values are not set. Icinga 2 itself has default values for many object parameters and falls back to them if one isn't present in an object definition. See the docs for individual object types in [Configuring Icinga 2](http://docs.icinga.org/icinga2/latest/doc/module/icinga2/chapter/configuring-icinga2) for more info about which object parameters have what default values.
#####`icinga2::object::host`
**Note:** The `ipv6_address` parameter is set to **undef** by default. This is because `facter` can return either IPv4 or IPv6 addresses for the `ipaddress_ethX` facts. The default value for the `ipv6_address` parameter is set to **undef** and not `ipaddress_eth0` so that an IPv4 address isn't set as the value for `address6` in the rendered host definition.
If you would like to use an IPv6 address, make sure to set the `ipv6_address` parameter to the `ipaddress_ethX` fact that will give you the right IPv6 address for the machine:
<pre>
@@icinga2::object::host { $::fqdn:
display_name => $::fqdn,
ipv6_address => $::ipaddress_eth1,
....
}
</pre>

13
manifests/object.pp Normal file
View file

@ -0,0 +1,13 @@
# == Class: icinga2::params
#
# This class is intentionally empty. It just serves as a container class for other
# icinga2::object:: classes to make the module's file layout cleaner (all object defined types
# can be put into an objects/ subdirectory)
#
# === Parameters
#
# None. See inline comments for parameters on the individual object type manifests for
# more details.
#
class icinga2::objects { }

View file

@ -7,14 +7,34 @@
# See the inline comments.
#
define icinga2::objects::host (
define icinga2::object::host (
$object_hostname = $name,
$display_name = $fqdn,
$ipv4_address = $ipaddress_eth0,
$ipv6_address = $ipaddress_eth0,
$ipv6_address = undef,
$template_to_import = 'generic-host',
$groups = [],
$vars = {},
$check_command = undef,
$max_check_attempts = undef,
$check_period = undef,
$check_interval = undef,
$retry_interval = undef,
$enable_notifications = undef,
$enable_active_checks = undef,
$enable_passive_checks = undef,
$enable_event_handler = undef,
$enable_flap_detection = undef,
$enable_perfdata = undef,
$event_command = undef,
#flapping_threshold is defined as a percentage, eg. 10%, 50%, etc.
$flapping_threshold = undef,
$volatile = undef,
$notes = undef,
$notes_url = undef,
$action_url = undef,
$icon_image = undef,
$icon_image_alt = undef,
$target_dir = '/etc/icinga2/conf.d',
$target_file_name = "${fqdn}.conf",
$target_file_owner = 'root',

View file

@ -6,7 +6,7 @@
# See the inline comments.
#
define icinga2::objects::hostgroup (
define icinga2::object::hostgroup (
$object_hostgroup_name = $name,
$display_name = $name,
$template_to_import = undef,

View file

@ -1,11 +0,0 @@
# == Class: icinga2::params
#
# This class is purposefully empty. It just serves as a container class for other
# icinga2::objects:: classes.
#
# === Parameters
#
# See the inline comments.
#
class icinga2::objects { }

View file

@ -10,32 +10,6 @@
*
*/
//Parameters to include:
// * displayname
// * address
// * address6
// * groups
// * vars
// * check_command
// * max_check_attempts
// * check_period
// * check_interval
// * retry_interval
// * enable_notifications
// * enable_active_checks
// * enable_passive_checks
// * enable_event_handler
// * enable_flap_detection
// * enable_perfdata
// * event_command
// * flapping_threshold
// * volatile
// * notes
// * notes_url
// * action_url
// * icon_image
// * icon_image_alt
object Host "<%= @object_hostname %>" {
<%#- If any of the @ parameters are undefined, don't print anything for them: -%>
<%- if @template_to_import -%>
@ -48,7 +22,72 @@ object Host "<%= @object_hostname %>" {
<%- if @ipv4_address -%>
address = "<%= @ipv4_address -%>"
<%- end -%>
<%- if @ipv6_address -%>
address6 = "<%= @ipv6_address -%>"
<%- end -%>
<%- if @groups.length != 0 -%>
groups = [ <%- @groups.each do |group| -%> "<%= group %>", <%- end -%>]
<%- end -%>
<%- if @vars.empty? != true -%>
<%- @vars.each_pair do |key, value| -%>
vars.<%= key %> = "<%= value %>"
<%- end -%>
<%- end -%>
<%- if @check_command -%>
check_command = "<%= @check_command -%>"
<%- end -%>
<%- if @max_check_attempts -%>
max_check_attempts = <%= @max_check_attempts -%>
<%- end -%>
<%- if @check_period -%>
check_period = <%= @check_period -%>
<%- end -%>
<%- if @check_interval -%>
check_interval = <%= @check_interval -%>
<%- end -%>
<%- if @retry_interval -%>
retry_interval = <%= @retry_interval -%>
<%- end -%>
<%- if @enable_notifications -%>
enable_notifications = <%= @enable_notifications -%>
<%- end -%>
<%- if @enable_active_checks -%>
enable_active_checks = <%= @enable_active_checks -%>
<%- end -%>
<%- if @enable_passive_checks -%>
enable_passive_checks = <%= @enable_passive_checks -%>
<%- end -%>
<%- if @enable_event_handler -%>
enable_event_handler = <%= @enable_event_handler -%>
<%- end -%>
<%- if @enable_flap_detection -%>
enable_flap_detection = <%= @enable_flap_detection -%>
<%- end -%>
<%- if @enable_perfdata -%>
enable_perfdata = <%= @enable_perfdata -%>
<%- end -%>
<%- if @event_command -%>
event_command = "<%= @event_command -%>"
<%- end -%>
<%- if @flapping_threshold -%>
flapping_threshold = "<%= @flapping_threshold -%>"
<%- end -%>
<%- if @volatile -%>
volatile = "<%= @volatile -%>"
<%- end -%>
<%- if @notes -%>
notes = "<%= @notes -%>"
<%- end -%>
<%- if @notes_url -%>
notes_url = "<%= @notes_url -%>"
<%- end -%>
<%- if @action_url -%>
action_url = "<%= @action_url -%>"
<%- end -%>
<%- if @icon_image -%>
icon_image = "<%= @icon_image -%>"
<%- end -%>
<%- if @icon_image_alt -%>
icon_image_alt = "<%= @icon_image_alt -%>"
<%- end -%>
}