+# XXX This file has been modified to add the ability to remove NRPE checks.
+# The original project that created this code has been abandoned so there
is
+# no upstream to which the modifications can be sent.
+
import subprocess
import pwd
import grp
import os
import re
import shlex
+import errno
Reviewers: mp+211781_ code.launchpad. net,
Message:
Please take a look.
Description:
Handle broken nrpe relations.
https:/ /code.launchpad .net/~benji/ charms/ precise/ juju-gui/ bug-1284088/ +merge/ 211781
(do not edit description out of merge proposal)
Please review this at https:/ /codereview. appspot. com/76860047/
Affected files (+51, -7 lines): charmsupport/ nrpe.py update- nrpe.py
A [revision details]
M scripts/
M scripts/
Index: [revision details]
=== added file '[revision details]'
--- [revision details] 2012-01-01 00:00:00 +0000
+++ [revision details] 2012-01-01 00:00:00 +0000
@@ -0,0 +1,2 @@
+Old revision: <email address hidden>
+New revision: <email address hidden>
Index: scripts/ update- nrpe.py update- nrpe.py' update- nrpe.py 2014-02-18 12:18:02 +0000 update- nrpe.py 2014-03-19 16:39:34 +0000 nrpe.NRPE( ) check(' app-is- accessible' , 'Check_ the_app_ can_be_ downloaded' , app-access. sh')
=== modified file 'scripts/
--- scripts/
+++ scripts/
@@ -1,14 +1,29 @@
#!/usr/bin/env python
-from charmsupport import nrpe
+import sys
+import charmsupport.nrpe
+
+
+def get_nrpe():
+ nrpe = charmsupport.
+ nrpe.add_
+ 'check-
+ return nrpe
def update_ nrpe_config( ): add_check( accessible' , 'Check_ the_app_ can_be_ downloaded' , app-access. sh') nrpe_check( ): checks( )
- nrpe_compat = nrpe.NRPE()
- nrpe_compat.
- 'app-is-
- 'check-
- nrpe_compat.write()
+ nrpe = get_nrpe()
+ nrpe.write()
+
+
+def remove_
+ nrpe = get_nrpe()
+ nrpe.remove_
if __name__ == '__main__': nrpe_config( ) nrpe_config( )
- update_
+ hook_name = sys.argv[0]
+ remove_nrpe_check()
+ if 'departed' in hook_name or 'broken' in hook_name:
+ remove_nrpe_check()
+ else:
+ update_
Index: scripts/ charmsupport/ nrpe.py charmsupport/ nrpe.py' charmsupport/ nrpe.py 2013-07-29 19:02:49 +0000 charmsupport/ nrpe.py 2014-03-19 16:39:34 +0000
=== modified file 'scripts/
--- scripts/
+++ scripts/
@@ -5,12 +5,17 @@
# Authors:
# Matthew Wedgwood <email address hidden>
+# XXX This file has been modified to add the ability to remove NRPE checks.
+# The original project that created this code has been abandoned so there
is
+# no upstream to which the modifications can be sent.
+
import subprocess
import pwd
import grp
import os
import re
import shlex
+import errno
from hookenv import config, local_unit
@@ -105,6 +110,11 @@
subprocess. call([' juju-log' , 'Check command not found: command[ 0])])
{}'.format(
return ''
+ def service_ file_name( self, nagios_context, hostname): _{}_check_ {}.cfg' .format( exportdir, hostname, self.shortname) NRPE.nagios_ exportdir) : '.*check_ {}.cfg' .format( self.shortname) , f):
nrpe_ service_ text = Check.service_ template. format( **templ_ vars)
nrpe_ service_ file = '{}/service_ _{}_check_ {}.cfg' .format(
NRPE.nagios_ exportdir, hostname, self.shortname) file_name( nagios_ context, service_ file, 'w') as nrpe_service_ config:
nrpe_service_ config. write(str( nrpe_service_ text))
+ return '{}/service_
+ NRPE.nagios_
+
+
def write(self, nagios_context, hostname):
for f in os.listdir(
if re.search(
@@ -119,6 +129,7 @@
+ nrpe_service_file = self.service_
hostname)
with open(nrpe_
@@ -128,9 +139,21 @@
nrpe_check_ config. write(" command[ check_{ }]={}\n" .format(
self. shortname, self.check_cmd))
+ def remove(self, nagios_context, hostname): self.service_ file_name( nagios_ context, hostname))
subprocess. call(self. check_cmd)
+ """Remove the configuration file for this check."""
+ try:
+ os.unlink(
+ except OSError, e:
+ if e.errno == errno.ENOENT:
+ # Ignore the fact that the file didn't exist.
+ pass
+ else:
+ raise
+
def run(self):
+ exportdir = '/var/lib/ nagios/ export'
class NRPE(object):
nagios_logdir = '/var/log/nagios'
nagios_
@@ -167,3 +190,7 @@
if os.path. isfile( '/etc/init. d/nagios- nrpe-server' ):
subprocess. call([' service' , 'nagios- nrpe-server' , 'reload']) checks( self): self.nagios_ context, self.hostname)
+
+ def remove_
+ for check in self.checks:
+ check.remove(