From 454c5ba97335b776633bb16277662a17e90ec998 Mon Sep 17 00:00:00 2001 From: John Keates Date: Sun, 17 May 2015 15:47:47 +0200 Subject: [PATCH] Add redirection capabilities to the frontend --- README.rst | 1 + haproxy/install.sls | 13 ++++++++++++- haproxy/templates/haproxy.jinja | 10 +++++++++- pillar.example | 1 + 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/README.rst b/README.rst index 353bd74..10cda13 100644 --- a/README.rst +++ b/README.rst @@ -55,6 +55,7 @@ Currently, only a handful of options can be set using the pillar: + name: the name haproxy will use for the frontend + bind: the bind string: this allows you to set the IP, Port and other paramters for the bind + + redirect: add a redirect line, an unparsed string like in the backend + reqadd: an array of reqadd statements. Looped over and put in the configuration, no parsing + default_backend: sets the default backend + acls: a list of acls, not parsed, simply looped and put in to the configuration diff --git a/haproxy/install.sls b/haproxy/install.sls index 7355f1b..5981aca 100644 --- a/haproxy/install.sls +++ b/haproxy/install.sls @@ -1,3 +1,14 @@ +# Because on Ubuntu we don't have a current HAProxy in the usual repo, we add a PPA +{% if salt['grains.get']('osfullname') == 'Ubuntu' %} +haproxy_ppa_repo: + pkgrepo.managed: + - ppa: vbernat/haproxy-1.5 + - require_in: + - pkg: haproxy.install + - watch_in: + - pkg: haproxy.install +{% endif %} + haproxy.install: pkg.installed: - - name: haproxy \ No newline at end of file + - name: haproxy diff --git a/haproxy/templates/haproxy.jinja b/haproxy/templates/haproxy.jinja index c70203c..04372cf 100644 --- a/haproxy/templates/haproxy.jinja +++ b/haproxy/templates/haproxy.jinja @@ -56,6 +56,10 @@ defaults {%- for frontend in salt['pillar.get']('haproxy:frontends', {}).iteritems() %} frontend {{ frontend[1].name }} bind {{ frontend[1].bind }} +{%- if 'redirects' in backend[1] %} +{%- for redirect in frontend[1].redirects %} +redirect {{ redirect }}{% endfor %} +{-% endif %} {%- if 'acls' in frontend[1] %} {%- for acl in frontend[1].acls %} acl {{ acl }} @@ -82,10 +86,14 @@ frontend {{ frontend[1].name }} {%- if 'backends' in salt['pillar.get']('haproxy', {}) %} {%- for backend in salt['pillar.get']('haproxy:backends', {}).iteritems() %} backend {{ backend[1].name }} +{%- if 'redirects' in backend[1] %} +{%- for redirect in backend[1].redirects %} +redirect {{ redirect }}{% endfor %} +{-% endif %} balance {{ backend[1].balance }} {%- if 'servers' in backend[1] %} {%- for server in backend[1].servers.iteritems() %} server {{ server[1].name }} {{ server[1].host }}:{{ server[1].port }} {{ server[1].check }}{% endfor %} {% endif %} {% endfor %} -{% endif %} \ No newline at end of file +{% endif %} diff --git a/pillar.example b/pillar.example index 137b9de..61f4b26 100644 --- a/pillar.example +++ b/pillar.example @@ -48,6 +48,7 @@ haproxy: frontend1: name: www-http bind: "*:80" + redirect: scheme https if !{ ssl_fc } reqadd: - "X-Forwarded-Proto:\\ http" default_backend: www-backend