https://github.com/larhauga/haproxy_config_updater
Tip revision: 57f8e40d28ee3d1246e93dd04321ab990a9d78d7 authored by Lars Haugan on 14 May 2015, 23:47:40 UTC
Cleaned up config, and changed it to fit a project
Cleaned up config, and changed it to fit a project
Tip revision: 57f8e40
haproxy.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import subprocess
from haconn import HAconn
from os import path
from jinja2 import Environment, PackageLoader, FileSystemLoader
socket = "/var/run/haproxy/admin.sock"
class HAproxy:
services = {}
def __init__(self):
pass
def restart(self):
""" """
# Need to collect the current sessions before restart!
# service haproxy reload # < will reload the config with minimal service impact
# Needs to be run with root privileges
pr = subprocess.Popen("service haproxy reload".split(), stdout=subprocess.PIPE)
output, err = pr.communicate()
if not err:
return True
else:
return False
def compile(self, servicelist):
#http://jinja.pocoo.org/docs/dev/api/
p = path.dirname(path.abspath(__file__))
# This needs correcting
env = Environment(loader=FileSystemLoader(p + '/etc/'))
template = env.get_template('haproxy.cfg')
# Example
# nodes=[ {'name': 'node01', 'ip': '192.168.128.48','id':1},]
# services = [{'name': '', 'stage': '', 'port': 10000, 'nodes':
# [{'name': 'random', 'ip': 'backend_ip', 'port':'backendport'}]
# },]
with open('/etc/haproxy/haproxy.cfg', 'wb') as f:
f.write(template.render(services=servicelist))
def set_online(self, service, nodename):
conn = HAconn()
ret = conn.send_cmd('enable server %s/%s\r\n' % (service.name, nodename))
conn.close()
return ret
def set_offline(self, service, nodename):
conn = HAconn()
ret = conn.send_cmd('disable server %s/%s\r\n' % (service.name, nodename))
conn.close()
return ret
def drain(self, service, nodename):
conn = HAconn()
ret = conn.send_cmd('set server %s/%s state drain\r\n' % (service.name, nodename))
conn.close()
return ret
def main():
ha = HAproxy()
ha.compile()
if __name__ == '__main__':
main()