-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathradius-lb-health.py
80 lines (72 loc) · 2.85 KB
/
radius-lb-health.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#!/usr/bin/env python
# coding=utf-8
#
# Copyright © 2015 VMware, Inc. All Rights Reserved.
#
# 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.
# Author Yasen Simeonov, simeonovy at vmware com
__author__ = 'yasensim'
import radius, logging, daemon
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
### Edit below this line according to your enviropment ###
RAD_SECRET = "testing123"
RAD_USER = "nsx-lb-test"
RAD_PASS = "VMware1!"
HTTP_PORT = 8081
### Do not Edit below this line!!! ###
class httpHandler(BaseHTTPRequestHandler):
def _set_headers(self):
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
def do_GET(self):
LOG.info("Healthcheck from "+str(self.client_address))
self._set_headers()
self.wfile.write(self.__checkRAD())
def do_HEAD(self):
self._set_headers()
def __checkRAD(self):
r = radius.Radius(RAD_SECRET, host='127.0.0.1', port=1812)
try:
if r.authenticate(RAD_USER, RAD_PASS):
LOG.info("Authentication successful!")
return 'Success'
else:
LOG.error("RADIUS is UP but cannot authenticate!!!")
return 'Failure'
except radius.SocketError as e:
LOG.error("Cannot connect to RADIUS: "+ str(e) )
return 'Failure'
def run_hc():
global LOG
LOG = logging.getLogger("nsx-lb-healthcheck")
LOG.setLevel(logging.INFO)
handler = logging.FileHandler('/var/log/nsx-lb-healthcheck.log')
handler.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
LOG.addHandler(handler)
server_class = HTTPServer
httpd = server_class(('0.0.0.0', HTTP_PORT), httpHandler)
try:
httpd.serve_forever()
except KeyboardInterrupt:
pass
httpd.server_close()
def main():
with daemon.DaemonContext():
run_hc()
if __name__ == '__main__':
main()