# Munin config class
# Many parts taken from David Schmitt's http://git.black.co.at/
# FreeBSD & Solaris + SNMP & custom plugins support by Nicolas Szalay <nico@gcu.info>
class munin::node {
case $operatingsystem {
openbsd: {}
debian: { include munin::node::debian}
freebsd: { include munin::node::freebsd}
solaris: { include munin::node::solaris}
default: {}
}
}
class munin::node::debian {
package { "munin-node": ensure => installed }
file {
"/etc/munin":
ensure => directory,
mode => 0755,
owner => root,
group => root;
"/etc/munin/munin-node.conf":
source => "puppet://$fileserver/files/apps/munin/munin-node-debian.conf",
owner => root,
group => root,
mode => 0644,
before => Package["munin-node"],
notify => Service["munin-node"],
}
service { "munin-node": ensure => running }
include munin::plugins::linux
}
class munin::node::freebsd {
package { "munin-node": ensure => installed, provider => freebsd }
file { "/usr/local/etc/munin/munin-node.conf":
source => "puppet://$fileserver/files/apps/munin/munin-node-freebsd.conf",
owner => root,
group => wheel,
mode => 0644,
before => Package["munin-node"],
notify => Service["munin-node"],
}
service { "munin-node": ensure => running }
include munin::plugins::freebsd
}
class munin::node::solaris {
# "hand made" install, no package.
file { "/etc/munin/munin-node.conf":
source => "puppet://$fileserver/files/apps/munin/munin-node-solaris.conf",
owner => root,
group => root,
mode => 0644
}
include munin::plugins::solaris
}
class munin::gatherer {
package { "munin":
ensure => installed
}
# custom version of munin-graph : forks & generates many graphs in parallel
file { "/usr/share/munin/munin-graph":
owner => root,
group => root,
mode => 0755,
source => "puppet://$fileserver/files/apps/munin/gatherer/munin-graph",
require => Package["munin"]
}
# custon version of debian cron file. Month & Year cron are generated once daily
file { "/etc/cron.d/munin":
owner => root,
group => root,
mode => 0644,
source => "puppet://$fileserver/files/apps/munin/gatherer/munin.cron",
require => Package["munin"]
}
# Ensure cron is running, to fetch every 5 minutes
service { "cron":
ensure => running
}
# Ruby DBI for mysql
package { "libdbd-mysql-ruby":
ensure => installed
}
# config generator
file { "/opt/scripts/muningen.rb":
owner => root,
group => root,
mode => 0755,
source => "puppet://$fileserver/files/apps/munin/gatherer/muningen.rb",
require => Package["munin", "libdbd-mysql-ruby"]
}
# regenerate munin's gatherer config every hour
cron { "munin_config":
command => "/opt/scripts/muningen.rb > /etc/munin/munin.conf",
user => "root",
minute => "0",
require => File["/opt/scripts/muningen.rb"]
}
include munin::plugins::snmp
include munin::plugins::linux
include munin::plugins::custom::gatherer
}
# define to create a munin plugin inside the right directory
define munin::plugin ($ensure = "present") {
case $operatingsystem {
freebsd: {
$script_path = "/usr/local/share/munin/plugins"
$plugins_dir = "/usr/local/etc/munin/plugins"
}
debian: {
$script_path = "/usr/share/munin/plugins"
$plugins_dir = "/etc/munin/plugins"
}
solaris: {
$script_path = "/usr/local/munin/lib/plugins"
$plugins_dir = "/etc/munin/plugins"
}
default: { }
}
$plugin = "$plugins_dir/$name"
case $ensure {
"absent": {
debug ( "munin_plugin: suppressing $plugin" )
file { $plugin: ensure => absent, }
}
default: {
$plugin_src = $ensure ? { "present" => $name, default => $ensure }
file { $plugin:
ensure => "$script_path/${plugin_src}",
require => Package["munin-node"],
notify => Service["munin-node"],
}
}
}
}
# snmp plugin define, almost same as above
define munin::snmp_plugin ($ensure = "present") {
$pluginname = get_plugin_name($name)
case $operatingsystem {
freebsd: {
$script_path = "/usr/local/share/munin/plugins"
$plugins_dir = "/usr/local/etc/munin/plugins"
}
debian: {
$script_path = "/usr/share/munin/plugins"
$plugins_dir = "/etc/munin/plugins"
}
solaris: {
$script_path = "/usr/local/munin/lib/plugins"
$plugins_dir = "/etc/munin/plugins"
}
default: { }
}
$plugin = "$plugins_dir/$name"
case $ensure {
"absent": {
debug ( "munin_plugin: suppressing $plugin" )
file { $plugin: ensure => absent, }
}
"present": {
file { $plugin:
ensure => "$script_path/${pluginname}",
require => Package["munin-node"],
notify => Service["munin-node"],
}
}
}
}
class munin::plugins::base
{
case $operatingsystem {
debian: { $plugins_dir = "/etc/munin/plugins" }
freebsd: { $plugins_dir = "/usr/local/etc/munin/plugins" }
solaris: { $plugins_dir = "/etc/munin/plugins" }
default: {}
}
file { $plugins_dir:
source => "puppet://$fileserver/files/empty",
ensure => directory,
checksum => mtime,
ignore => ".svn*",
mode => 0755,
recurse => true,
purge => true,
force => true,
owner => root
}
}
class munin::plugins::interfaces
{
$ifs = gsub(split($munin_interfaces, " "), "(.+)", "if_\\1")
$if_errs = gsub(split($munin_interfaces, " "), "(.+)", "if_err_\\1")
plugin {
$ifs: ensure => "if_";
$if_errs: ensure => "if_err_";
}
include munin::plugins::base
}
class munin::plugins::linux
{
plugin { [ cpu, load, memory, swap, irq_stats, df, processes, open_files, ntp_offset, vmstat ]:
ensure => "present"
}
include munin::plugins::base
include munin::plugins::interfaces
}
class munin::plugins::nfsclient
{
plugin { "nfs_client":
ensure => present
}
}
class munin::plugins::snmp
{
# initialize plugins
$snmp_plugins=extlookup("munin_snmp_plugins")
snmp_plugin { $snmp_plugins:
ensure => present
}
# SNMP communities used by plugins
file { "/etc/munin/plugin-conf.d/snmp_communities":
owner => root,
group => root,
mode => 0644,
source => "puppet://$fileserver/files/apps/munin/gatherer/snmp_communities"
}
}
define munin::custom_plugin($ensure = "present", $location = "/etc/munin/plugins") {
$plugin = "$location/$name"
case $ensure {
"absent": {
file { $plugin: ensure => absent, }
}
"present": {
file { $plugin:
owner => root,
mode => 0755,
source => "puppet://$fileserver/files/apps/munin/custom_plugins/$name",
require => Package["munin-node"],
notify => Service["munin-node"],
}
}
}
}
class munin::plugins::custom::gatherer
{
$plugins=extlookup("munin_custom_plugins")
custom_plugin { $plugins:
ensure => present
}
}
class munin::plugins::freebsd
{
plugin { [ cpu, load, memory, swap, irq_stats, df, processes, open_files, ntp_offset, vmstat ]:
ensure => "present",
}
include munin::plugins::base
include munin::plugins::interfaces
}
class munin::plugins::solaris
{
# Munin plugins on solaris are quite ... buggy. Will need rewrite / custom plugins.
plugin { [ cpu, load, netstat ]:
ensure => "present",
}
include munin::plugins::base
include munin::plugins::interfaces
}