-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
I posted an example of calling Nagios plugins from inside of Cfengine a while
back. One of my co-workers took a look at the code and suggested that I put it
in a bundle that could be called as a parameterized method promise. I think it
might be useful to the community so here it is.
First is an example bundle of how you might call the Nagios wrapper:
bundle agent main {
vars:
"nagios_plugin_path" string => "/opt/local/libexec/nagios";
methods:
any::
# Use check_dummy for some test cases
# A check that returns ok
"any"
usebundle => nagios_plugin_agent("$(nagios_plugin_path)",
"check_dummy",
"0 OK");
# A check that returns warning
"any"
usebundle => nagios_plugin_agent("$(nagios_plugin_path)",
"check_dummy",
"1 Hey!");
# A check that returns critical
"any"
usebundle => nagios_plugin_agent("$(nagios_plugin_path)",
"check_dummy",
"2 Help!");
# A check that returns unknown
"any"
usebundle => nagios_plugin_agent("$(nagios_plugin_path)",
"check_dummy",
"3 Clueless!");
}
Note how the plugin path is specified as one of the parameters. This is what
the cf-agent output looks like for me:
$ /usr/local/sbin/cf-agent --no-lock
M "/Users/rbc/.cfagent/modules/nagios_plugin_wrapper /opt/local/libexec/nagios
check_dummy 0 OK":
M "/Users/rbc/.cfagent/modules/nagios_plugin_wrapper /opt/local/libexec/nagios
check_dummy 1 Hey!":
R: Nagios plugin check_dummy on Roberts-Computer.local reports WARNING: Hey! on
Thu Feb 23 18:21:06 2012
M "/Users/rbc/.cfagent/modules/nagios_plugin_wrapper /opt/local/libexec/nagios
check_dummy 2 Help!":
R: Nagios plugin check_dummy on Roberts-Computer.local reports CRITICAL: Help!
on Thu Feb 23 18:21:06 2012
M "/Users/rbc/.cfagent/modules/nagios_plugin_wrapper /opt/local/libexec/nagios
check_dummy 3 Clueless!":
R: Nagios plugin check_dummy on Roberts-Computer.local reports UNKNOWN:
Clueless! on Thu Feb 23 18:21:06 2012
Next I'll show the bundle that calls the module:
bundle agent nagios_plugin_agent(nagios_plugin_path, nagios_plugin_name,
nagios_plugin_args)
{
classes:
"nagios_alert" or => {
"nagios_plugin_$(nagios_plugin_name)_warning",
"nagios_plugin_$(nagios_plugin_name)_critical",
"nagios_plugin_$(nagios_plugin_name)_unknown",
"nagios_plugin_$(nagios_plugin_name)_protocol_error"
};
commands:
"$(sys.workdir)/modules/nagios_plugin_wrapper $(nagios_plugin_path)
$(nagios_plugin_name) $(nagios_plugin_args)"
module => "true";
reports:
nagios_alert::
"Nagios plugin $(nagios_plugin_name) on $(sys.host) reports
$(nagios_plugin_wrapper.output) on $(sys.date)";
}
Note that the Nagios wrapper module is being called from
$(sys.workdir)/modules, so you have to figure out someway to get the wrapper
there. Finally we have the wrapper module itself.
#!/bin/sh
PREFIX=${1}
PLUGIN=${2}
shift 2
OUTPUT=`$PREFIX/$PLUGIN $@`
EXIT=$?
/bin/echo "=output=$OUTPUT"
case "$EXIT" in
'0')
echo "+nagios_plugin_${PLUGIN}_ok"
;;
'1')
echo "+nagios_plugin_${PLUGIN}_warning"
;;
'2')
echo "+nagios_plugin_${PLUGIN}_critical"
;;
'3')
echo "+nagios_plugin_${PLUGIN}_unknown"
;;
*)
echo "+nagios_plugin_${PLUGIN}_protocol_error"
;;
esac
I've been testing this with cfengine-3.1.2 and 3.1.5 compiled from source under
Mac OS Snow Leopard and Lion. Please let me know if you have any comments or
questions.
Best,
--Bruce
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (Darwin)
iQEcBAEBAgAGBQJPRs2RAAoJEPy/5L3ndSQsW28IAIXX1Hpxfri6KC03pdNd9zRB
OG0/SHr/0u1NhhU1fTzeZaiv+qnbgrAaMTETYNWV74VIx3PvE8+b1x89RiKN7wWw
UsKnchMl0LEjNbr1XXWXvcqUEe9MONKK3Q9kgkNDIOpMsJ1ZE6QmC0JYnnalEBEa
Mb6uPsgtFVpbYKTqUd4Sr+6gF+nCTQTxNHc2pxAxzDYlTyAI3qcAVof6y/rvvX6D
Py8MdePBSeqo0TDWZ1htbsBQm89NLwiEHSJawNnVOR2AAUf8d8bYK0lD2d0qaAQU
DM9qOo0x5dreLt0ZetMgBQoHU6ykv6G4hCRKcJNEnLgRPJVr4qdXkVAsh1hYERg=
=xBkq
-----END PGP SIGNATURE-----
_______________________________________________
Help-cfengine mailing list
[email protected]
https://cfengine.org/mailman/listinfo/help-cfengine