From 2db6a85b51327ba5be4ca9daf5f146494883b2dd Mon Sep 17 00:00:00 2001 From: Lance Edgar Date: Thu, 1 Dec 2016 20:50:21 -0600 Subject: [PATCH] Wrap up basic shinken pack --- commands.cfg | 6 -- libexec/check_rattail_daemon_by_ssh.py | 114 +++++++++++++++++++++++++ pack/commands.cfg | 6 ++ pack/rattail.pack | 5 ++ templates.cfg => pack/templates.cfg | 0 rattail.pack => package.json | 8 +- 6 files changed, 132 insertions(+), 7 deletions(-) delete mode 100644 commands.cfg create mode 100755 libexec/check_rattail_daemon_by_ssh.py create mode 100644 pack/commands.cfg create mode 100644 pack/rattail.pack rename templates.cfg => pack/templates.cfg (100%) rename rattail.pack => package.json (68%) diff --git a/commands.cfg b/commands.cfg deleted file mode 100644 index efa4e5d..0000000 --- a/commands.cfg +++ /dev/null @@ -1,6 +0,0 @@ -# -*- mode: nagios -*- - -define command { - command_name check_rattail_daemon - command_line $PLUGINSDIR$/check_by_ssh -H $HOSTADDRESS$ -C "check-rattail-daemon $ARG1$" --logname=rattail -} diff --git a/libexec/check_rattail_daemon_by_ssh.py b/libexec/check_rattail_daemon_by_ssh.py new file mode 100755 index 0000000..1ce64c2 --- /dev/null +++ b/libexec/check_rattail_daemon_by_ssh.py @@ -0,0 +1,114 @@ +#!/usr/bin/env python + +# Copyright (C) 2013: +# Gabes Jean, naparuba@gmail.com +# Pasche Sebastien, sebastien.pasche@leshop.ch +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# + + +''' + This script is a check for lookup at another check over ssh without + having an agent on the other side +''' +import os +import sys +import optparse +import base64 +import subprocess +try: + import paramiko +except ImportError: + print "ERROR : this plugin needs the python-paramiko module. Please install it" + sys.exit(2) + +# Ok try to load our directory to load the plugin utils. +my_dir = os.path.dirname(__file__) +sys.path.insert(0, my_dir) + +try: + import schecks +except ImportError: + print "ERROR : this plugin needs the local schecks.py lib. Please install it" + sys.exit(2) + + +VERSION = "0.1" + + +def execute_check(client, check_path): + # Beware of the export! + stdin, stdout, stderr = client.exec_command(check_path) + + lines = [line for line in stdout] + if len(lines) == 0: + return False + + exitcode = stdout.channel.recv_exit_status() + + # Before return, close the client + client.close() + + return lines[0].strip(), exitcode + + +parser = optparse.OptionParser( + "%prog [options]", version="%prog " + VERSION) +parser.add_option('-H', '--hostname', + dest="hostname", help='Hostname to connect to') +parser.add_option('-p', '--port', + dest="port", type="int", default=22, + help='SSH port to connect to. Default : 22') +parser.add_option('-i', '--ssh-key', + dest="ssh_key_file", help='SSH key file to use. By default will take ~/.ssh/id_rsa.') +parser.add_option('-u', '--user', + dest="user", help='remote use to use. By default shinken.') +parser.add_option('-P', '--passphrase', + dest="passphrase", help='SSH key passphrase. By default will use void') +parser.add_option('-r', '--check_path', + dest="check_path", help='Path of the remote perfdata check to execute') + + +if __name__ == '__main__': + # Ok first job : parse args + opts, args = parser.parse_args() + if args: + parser.error("Does not accept any argument.") + + hostname = opts.hostname + if not hostname: + print "Error : hostname parameter (-H) is mandatory" + sys.exit(2) + + check_path = opts.check_path + if not check_path: + print "Error : check_path parameter (--check_path) is mandatory" + sys.exit(2) + port = opts.port + ssh_key_file = opts.ssh_key_file or os.path.expanduser('~/.ssh/id_rsa') + user = opts.user or 'shinken' + passphrase = opts.passphrase or '' + + # Ok now connect, and try to get values for memory + client = schecks.connect(hostname, port, ssh_key_file, passphrase, user) + result, exitcode = execute_check(client, check_path) + + print result + sys.exit(exitcode) diff --git a/pack/commands.cfg b/pack/commands.cfg new file mode 100644 index 0000000..7fd4777 --- /dev/null +++ b/pack/commands.cfg @@ -0,0 +1,6 @@ +# -*- mode: nagios -*- + +define command { + command_name check_rattail_daemon + command_line $PLUGINSDIR$/check_rattail_daemon_by_ssh.py -H $HOSTADDRESS$ -p $_HOSTSSH_PORT$ -u $_HOSTSSH_USER$ -i $_HOSTSSH_KEY$ -P "$_HOSTSSH_KEY_PASSPHRASE$" -r "check-rattail-daemon $ARG1$" +} diff --git a/pack/rattail.pack b/pack/rattail.pack new file mode 100644 index 0000000..04e4184 --- /dev/null +++ b/pack/rattail.pack @@ -0,0 +1,5 @@ +{ + "name": "rattail", + "description": "Can check various Rattail daemons to ensure they're running. Performs checks using SSH.", + "path": "software/" +} diff --git a/templates.cfg b/pack/templates.cfg similarity index 100% rename from templates.cfg rename to pack/templates.cfg diff --git a/rattail.pack b/package.json similarity index 68% rename from rattail.pack rename to package.json index 4d537bd..4585b83 100644 --- a/rattail.pack +++ b/package.json @@ -1,9 +1,15 @@ { "name": "rattail", "types": ["pack"], - "version": "1.0", + "version": "0.4", "homepage": "https://rattailproject.org/", "author": "Lance Edgar", + "contributors": [ + { + "name": "Lance Edgar", + "email": "lance@edbob.org" + } + ], "description": "Can check various Rattail daemons to ensure they're running. Performs checks using SSH.", "license": "AGPL" }