Skip to content

Instantly share code, notes, and snippets.

@chiradeep
Created August 10, 2016 19:02
  • Star 4 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save chiradeep/471b5a632c8d4117cedb7f0c40eca6bf to your computer and use it in GitHub Desktop.
Simple Jinja2 template to generate HAProxy cfg
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)
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
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 %}
@GaneshJayaram97
Copy link

Thanks for this post. Exactly what i was looking for

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment