Created
August 10, 2016 19:02
-
-
Save chiradeep/471b5a632c8d4117cedb7f0c40eca6bf to your computer and use it in GitHub Desktop.
Simple Jinja2 template to generate HAProxy cfg
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from jinja2 import Environment, FileSystemLoader | |
def render_haproxy_cfg(services): | |
env = Environment(loader=FileSystemLoader ('templates'), trim_blocks=True) | |
templ = env.get_template('haproxy.jinja2.cfg') | |
outp = templ.render(services=services) | |
outp = templ.render(services=services) | |
with open('haproxy.cfg', 'wb') as f: | |
f.write(outp) | |
services = [{ | |
"name":"foo", | |
"port":80, | |
"backends": [ | |
{"name":"foo1", | |
"host":"10.62.35.88", | |
"port":8080 | |
}, | |
{"name":"foo2", | |
"host":"10.42.35.88", | |
"port":8080 | |
} | |
] | |
}, | |
{ | |
"name":"bar", | |
"port":80, | |
"backends": [ | |
{"name":"bar1", | |
"host":"10.62.35.88", | |
"port":8080 | |
}, | |
{"name":"bar2", | |
"host":"10.62.95.88", | |
"port":8080 | |
} | |
] | |
} | |
] | |
render_haproxy_cfg(services) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
global | |
daemon | |
maxconn 4000 | |
defaults | |
mode tcp | |
timeout connect 5000ms | |
timeout client 50000ms | |
timeout server 50000ms | |
frontend foo | |
bind *:80 | |
mode http | |
default_backend foo_backend | |
backend foo_backend | |
mode http | |
server foo1 10.62.35.88:8080 maxconn 250 | |
server foo2 10.42.35.88:8080 maxconn 250 | |
frontend bar | |
bind *:80 | |
mode http | |
default_backend bar_backend | |
backend bar_backend | |
mode http | |
server bar1 10.62.35.88:8080 maxconn 250 | |
server bar2 10.62.95.88:8080 maxconn 250 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
global | |
daemon | |
maxconn 4000 | |
defaults | |
mode tcp | |
timeout connect 5000ms | |
timeout client 50000ms | |
timeout server 50000ms | |
{% for svc in services %} | |
frontend {{svc.name}} | |
bind *:{{svc.port}} | |
mode http | |
default_backend {{svc.name}}_backend | |
backend {{svc.name}}_backend | |
mode http | |
{% for backend in svc.backends %} | |
server {{backend.name}} {{backend.host}}:{{backend.port}} maxconn 250 | |
{% endfor %} | |
{% endfor %} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thanks for this post. Exactly what i was looking for