-----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
Help-cfengine@cfengine.org
https://cfengine.org/mailman/listinfo/help-cfengine

Reply via email to