diff --git a/manifests/icinga2/agent.pp b/manifests/icinga2/agent.pp index c6b1161..181a47e 100644 --- a/manifests/icinga2/agent.pp +++ b/manifests/icinga2/agent.pp @@ -1,72 +1,73 @@ # Icinga2 agent configuration class profile::icinga2::agent { $features = hiera('icinga2::features') $icinga2_network = hiera('icinga2::network') $hiera_host_vars = hiera_hash('icinga2::host::vars') $parent_zone = hiera('icinga2::parent_zone') $parent_endpoints = hiera('icinga2::parent_endpoints') + include profile::icinga2::objects::agent_checks + $local_host_vars = { disks => hash(flatten( $::mounts.map |$mount| { ["disk ${mount}", {disk_partitions => $mount}] }, - )), + )), + plugins => keys($profile::icinga2::objects::agent_checks::plugins), } class {'::icinga2': confd => true, features => $features, } class { '::icinga2::feature::api': accept_config => true, accept_commands => true, zones => { 'ZoneName' => { endpoints => ['NodeName'], parent => $parent_zone, }, }, } create_resources('::icinga2::object::endpoint', $parent_endpoints) ::icinga2::object::zone {$parent_zone: endpoints => keys($parent_endpoints), } @@::icinga2::object::endpoint {$::fqdn: target => "/etc/icinga2/zones.d/${parent_zone}/${::fqdn}.conf", } @@::icinga2::object::zone {$::fqdn: endpoints => [$::fqdn], parent => $parent_zone, target => "/etc/icinga2/zones.d/${parent_zone}/${::fqdn}.conf", } @@::icinga2::object::host {$::fqdn: address => ip_for_network($icinga2_network), display_name => $::fqdn, check_command => 'hostalive', vars => deep_merge($local_host_vars, $hiera_host_vars), target => "/etc/icinga2/zones.d/${parent_zone}/${::fqdn}.conf", } icinga2::object::zone { 'global-templates': global => true, } file {'/etc/icinga2/conf.d': ensure => directory, owner => 'nagios', group => 'nagios', mode => '0755', purge => true, recurse => true, tag => 'icinga2::config::file', } - - include profile::icinga2::objects::agent_checks } diff --git a/manifests/icinga2/master.pp b/manifests/icinga2/master.pp index 676a96f..e025eff 100644 --- a/manifests/icinga2/master.pp +++ b/manifests/icinga2/master.pp @@ -1,91 +1,101 @@ # An icinga master host class profile::icinga2::master { $zonename = hiera('icinga2::master::zonename') $features = hiera('icinga2::features') $icinga2_network = hiera('icinga2::network') - $icinga2_host_vars = hiera_hash('icinga2::host::vars') + $hiera_host_vars = hiera_hash('icinga2::host::vars') $icinga2_db_username = hiera('icinga2::master::db::username') $icinga2_db_password = hiera('icinga2::master::db::password') $icinga2_db_database = hiera('icinga2::master::db::database') include profile::icinga2::objects + include profile::icinga2::objects::agent_checks + + $local_host_vars = { + disks => hash(flatten( + $::mounts.map |$mount| { + ["disk ${mount}", {disk_partitions => $mount}] + }, + )), + plugins => keys($profile::icinga2::objects::agent_checks::plugins), + } include ::postgresql::server ::postgresql::server::db {$icinga2_db_database: user => $icinga2_db_username, password => postgresql_password($icinga2_db_username, $icinga2_db_password) } class {'::icinga2': confd => true, features => $features, constants => { 'ZoneName' => $zonename, }, } class { '::icinga2::feature::api': accept_commands => true, zones => {}, endpoints => {}, } class { '::icinga2::feature::idopgsql': user => $icinga2_db_username, password => $icinga2_db_password, database => $icinga2_db_database, import_schema => true, require => Postgresql::Server::Db[$icinga2_db_database], } @@::icinga2::object::endpoint {$::fqdn: target => "/etc/icinga2/zones.d/${zonename}/${::fqdn}.conf", } @@::icinga2::object::zone {$zonename: endpoints => [$::fqdn], target => "/etc/icinga2/zones.d/${zonename}/${::fqdn}.conf", } @@::icinga2::object::host {$::fqdn: address => ip_for_network($icinga2_network), display_name => $::fqdn, check_command => 'hostalive', - vars => $icinga2_host_vars, + vars => deep_merge($local_host_vars, $hiera_host_vars), target => "/etc/icinga2/zones.d/${zonename}/${::fqdn}.conf", } ::Icinga2::Object::Host <<| |>> ::Icinga2::Object::Endpoint <<| |>> ::Icinga2::Object::Zone <<| |>> ::icinga2::object::zone { 'global-templates': global => true, } file {[ '/etc/icinga2/zones.d/global-templates', "/etc/icinga2/zones.d/${zonename}", ]: ensure => directory, owner => 'nagios', group => 'nagios', mode => '0755', tag => 'icinga2::config::file', recurse => true, purge => true, } file {'/etc/icinga2/conf.d': ensure => directory, owner => 'nagios', group => 'nagios', mode => '0755', purge => true, recurse => true, tag => 'icinga2::config::file', } } diff --git a/manifests/icinga2/objects/common_checks.pp b/manifests/icinga2/objects/common_checks.pp index 836faa6..bf17c55 100644 --- a/manifests/icinga2/objects/common_checks.pp +++ b/manifests/icinga2/objects/common_checks.pp @@ -1,54 +1,63 @@ # Icinga2 common check definitions class profile::icinga2::objects::common_checks { $service_configuration = hiera('icinga2::service_configuration') ::icinga2::object::service {'ping4': import => ['generic-service'], apply => true, check_command => 'ping4', assign => ['host.address'], target => '/etc/icinga2/zones.d/global-templates/services.conf', } each($service_configuration['load']) |$name, $vars| { if $name == 'default' { $assign = 'host.vars.os == Linux' $ignore = 'host.vars.noagent || host.vars.load' } else { $assign = "host.vars.os == Linux && host.vars.load == ${name}" $ignore = 'host.vars.noagent' } ::icinga2::object::service {"linux_load_${name}": import => ['generic-service'], service_name => 'load', apply => true, check_command => 'load', command_endpoint => 'host.name', assign => [$assign], ignore => [$ignore], target => '/etc/icinga2/zones.d/global-templates/services.conf', vars => $vars, } } ::icinga2::object::service {'linux_disks': import => ['generic-service'], apply => 'disk_name => config in host.vars.disks', check_command => 'disk', command_endpoint => 'host.name', vars => 'vars + config', assign => ['host.vars.os == Linux'], ignore => ['host.vars.noagent'], target => '/etc/icinga2/zones.d/global-templates/services.conf', } ::icinga2::object::service {'linux-ssh': import => ['generic-service'], apply => true, check_command => 'ssh', assign => ['host.vars.os == Linux'], target => '/etc/icinga2/zones.d/global-templates/services.conf', } + + ::icinga2::object::service {'journalbeat': + import => ['generic-service'], + apply => true, + check_command => 'check_journal', + assign => ['host.vars.os == Linux'], + ignore => ['check_journal !in host.vars.plugins'], + target => '/etc/icinga2/zones.d/global-templates/services.conf', + } }