6a92c567db543e47148ac683ac27824aa7f4f08a
[puppet_munin.git] / manifests / plugin.pp
1 # plugin.pp - configure a specific munin plugin
2 # Copyright (C) 2007 David Schmitt <david@schmitt.edv-bus.at>
3 # See LICENSE for the full license granted to you.
4 # adapted and improved by admin(at)immerda.ch
5
6
7 ### configpaths
8
9 class munin::plugin::scriptpaths {
10         case $operatingsystem {
11                 gentoo: {       
12             $script_path =  "/usr/libexec/munin/plugins"
13                         }
14                 debian: {               
15             $script_path =  "/usr/share/munin/plugins"
16                         }
17                 centos: {               
18             $script_path =  "/usr/share/munin/plugins"
19                         }
20                 default: {
21             $script_path =  "/usr/share/munin/plugins"
22                 }
23         }
24 }
25
26 ### defines
27
28 define munin::plugin (
29         $ensure = "present",
30         $script_path_in = '',
31         $config = '')
32 {
33
34     include munin::plugin::scriptpaths
35         $real_script_path = $script_path_in ? { '' => $munin::plugin::scriptpaths::script_path, default => $script_path_in }
36
37         $plugin_src = $ensure ? { "present" => $name, default => $ensure }
38         debug ( "munin_plugin: name=$name, ensure=$ensure, script_path=$munin::plugin::scriptpaths::script_path" )
39         $plugin = "/etc/munin/plugins/$name"
40         $plugin_conf = "/etc/munin/plugin-conf.d/$name.conf"
41         case $ensure {
42                 "absent": {
43                         debug ( "munin_plugin: suppressing $plugin" )
44                         file { $plugin: ensure => absent, } 
45                 }
46                 default: {
47                         debug ( "munin_plugin: making $plugin using src: $plugin_src" )
48                         file { $plugin:
49                             ensure => "${real_script_path}/${plugin_src}",
50                                 require => Package['munin-node'],
51                                 notify => Service['munin-node'];
52                         }
53                 }
54         }
55         case $config {
56                 '': {
57                         debug("no config for $name")
58                         file { $plugin_conf: ensure => absent }
59                 }
60                 default: {
61                         case $ensure {
62                                 absent: {
63                                         debug("removing config for $name")
64                                         file { $plugin_conf: ensure => absent }
65                                 }
66                                 default: {
67                                         debug("creating $plugin_conf")
68                                         file { $plugin_conf:
69                                                 content => "[${name}]\n$config\n",
70                                                 mode => 0644, owner => root, group => 0,
71                                         }
72                                 }
73                         }
74                 }
75         }
76 }
77
78 define munin::remoteplugin($ensure = "present", $source, $config = '') {
79         case $ensure {
80                 "absent": { munin::plugin{ $name: ensure => absent } }
81                 default: {
82                         file {
83                                 "/var/lib/puppet/modules/munin/plugins/${name}":
84                                         source => $source,
85                                         mode => 0755, owner => root, group => 0;
86                         }
87                         munin::plugin { $name:
88                                 ensure => $ensure,
89                                 config => $config,
90                                 script_path_in => "/var/lib/puppet/modules/munin/plugins",
91                         }
92                 }
93         }
94 }
95 define munin::plugin::deploy ($source = '', $ensure = 'present', $config = '') {
96     $plugin_src = $ensure ? { "present" => $name, default => $ensure }
97     $real_source = $source ? {
98         ''  =>  "munin/plugins/$plugin_src",
99         default => $source
100     }
101     include munin::plugin::scriptpaths
102         debug ( "munin_plugin_${name}: name=$name, source=$source, script_path=$munin::plugin::scriptpaths::script_path" )
103     file { "munin_plugin_${name}":
104             path => "$munin::plugin::scriptpaths::script_path/${name}",
105             source => "puppet://$server/$real_source",
106             ensure => file,
107             mode => 0755, owner => root, group => 0;
108     }
109
110     munin::plugin{$name: ensure => $ensure, config => $config }
111 }
112
113 ### clases for plugins
114
115 class munin::plugins::base {
116         case $operatingsystem {
117                 centos: {               
118                     file {
119                         [ "/etc/munin/plugins", "/etc/munin/plugin-conf.d" ]:
120                                 source => "puppet://$server/munin/empty",
121                                 ensure => directory, checksum => mtime,
122                                 recurse => true, purge => true, force => true, 
123                                 mode => 0755, owner => root, group => 0;
124                         "/etc/munin/plugin-conf.d/munin-node":
125                                 ensure => present, 
126                                 mode => 0644, owner => root, group => 0;
127                     }
128                 }
129
130                 default: {
131                     file {
132                         [ "/etc/munin/plugins", "/etc/munin/plugin-conf.d" ]:
133                                 source => "puppet://$server/munin/empty",
134                                 ensure => directory, checksum => mtime,
135                                 recurse => true, purge => true, force => true, 
136                                 mode => 0755, owner => root, group => 0,
137                                 notify => Service['munin-node'];
138                         "/etc/munin/plugin-conf.d/munin-node":
139                                 ensure => present, 
140                                 mode => 0644, owner => root, group => 0,
141                                 notify => Service['munin-node'],
142                 before => Package['munin-node'];
143                     }
144                 }
145         }
146     case $kernel {
147         linux: {
148             case $vserver {
149                 guest: { include munin::plugins::vserver }
150                 default: {
151                     include munin::plugins::linux
152                 }
153             }
154         }
155     }
156     case $virtual {
157         physical: { include munin::plugins::physical }
158         xen0: { include munin::plugins::dom0 }
159         xenu: { include munin::plugins::domU }
160     }
161 }
162
163 # handle if_ and if_err_ plugins
164 class munin::plugins::interfaces inherits munin::plugins::base {
165
166         $ifs = gsub(split($interfaces, " "), "(.+)", "if_\\1")
167         $if_errs = gsub(split($interfaces, " "), "(.+)", "if_err_\\1")
168         munin::plugin {
169                 $ifs: ensure => "if_";
170                 $if_errs: ensure => "if_err_";
171         }
172 }
173
174 class munin::plugins::linux inherits munin::plugins::base {
175
176         munin::plugin {
177                 [ df_abs, forks, memory, processes, cpu, df_inode, irqstats,
178                   netstat, open_files, swap, df, entropy, interrupts, load, open_inodes,
179                   vmstat
180                 ]:
181                         ensure => present;
182                 acpi: 
183                         ensure => $acpi_available;
184         }
185
186         include munin::plugins::interfaces
187 }
188
189 class munin::plugins::debian inherits munin::plugins::base {
190         munin::plugin { apt_all: ensure => present; }
191 }
192
193 class munin::plugins::vserver inherits munin::plugins::base {
194         munin::plugin {
195                 [ netstat, processes ]:
196                         ensure => present;
197         }
198 }
199
200 class munin::plugins::gentoo inherits munin::plugins::base {
201     munin::plugin::deploy { "gentoo_lastupdated": config => "user portage\nenv.logfile /var/log/emerge.log\nenv.tail        /usr/bin/tail\nenv.grep        /bin/grep"}
202 }
203
204 class munin::plugins::centos inherits munin::plugins::base {
205 }
206
207
208
209 class munin::plugins::dom0 inherits munin::plugins::physical {
210     munin::plugin::deploy { "xen": config => "user root"}
211     munin::plugin::deploy { "xen-cpu": config => "user root"}
212     munin::plugin::deploy { "xen_memory": config => "user root"}
213     munin::plugin::deploy { "xen_vbd": config => "user root"}
214     munin::plugin::deploy { "xen_traffic_all": config => "user root"}
215 }
216
217 class munin::plugins::physical inherits munin::plugins::base {
218      munin::plugin { iostat: }
219 }
220
221 class munin::plugins::muninhost inherits munin::plugins::base {
222     munin::plugin { munin_update: }
223     munin::plugin { munin_graph: }
224 }
225
226 class munin::plugins::domU inherits munin::plugins::base { }
227
228 class munin::plugins::djbdns inherits munin::plugins::base {
229     munin::plugin::deploy { "tinydns": }
230 }
231
232 class munin::plugins::apache inherits munin::plugins::base {
233     munin::plugin{ "apache_accesses": }
234     munin::plugin{ "apache_processes": }
235     munin::plugin{ "apache_volume": }
236     munin::plugin::deploy { "apache_activity": }
237 }
238
239 class munin::plugins::selinux inherits munin::plugins::base {
240     munin::plugin::deploy { "selinuxenforced": }
241     munin::plugin::deploy { "selinux_avcstats": }
242 }
243
244 class munin::plugins::postgres inherits munin::plugins::base {
245     munin::plugin::deploy { "pg_conn": }
246     munin::plugin::deploy { "pg__connections": ensure => false }
247     munin::plugin::deploy { "pg__locks": ensure => false }
248 }
249 class munin::plugins::nagios inherits munin::plugins::base {
250     munin::plugin::deploy {
251         nagios_hosts: config => 'user root';
252         nagios_svc: config => 'user root';
253         nagios_perf_hosts: ensure => nagios_perf_, config => 'user root';
254         nagios_perf_svc: ensure => nagios_perf_, config => 'user root';
255     }
256 }