diff --git a/haproxy/templates/haproxy.jinja b/haproxy/templates/haproxy.jinja index 9ad1544..f9e71dc 100644 --- a/haproxy/templates/haproxy.jinja +++ b/haproxy/templates/haproxy.jinja @@ -75,6 +75,9 @@ global {%- if 'ssl-default-bind-options' in salt['pillar.get']('haproxy:global', {}) %} {{- render_list_of_dictionaries('ssl-default-bind-options', salt['pillar.get']('haproxy:global:ssl-default-bind-options')) }} {%- endif %} +{%- if 'localpeer' in salt['pillar.get']('haproxy:global', {}) %} + localpeer {{ salt['pillar.get']('haproxy:global:localpeer') }} +{%- endif %} {%- if 'extra' in salt['pillar.get']('haproxy:global', {}) %} {%- if salt['pillar.get']('haproxy:global:extra', {}) is string %} {{ salt['pillar.get']('haproxy:global:extra') }} @@ -104,6 +107,36 @@ userlist {{ id }} {%- endfor %} {% endfor %} +{%- for group, peers in salt['pillar.get']('haproxy:peers', {}).items() %} +peers {{ group }} + {%- for peer, data in peers.get('peers', {}).items() %} + {%- if data is mapping %} + peer {{ peer }}{{ ' ' ~ data.address if 'address' in data else '' }}{{ ':' ~ data.port if 'port' in data else '' }}{{ ' ' ~ data.extra if 'extra' in data else '' }} + {%- else %} + peer {{ peer }} {{ data }} + {%- endif %} + {%- endfor %} + {%- if 'bind' in peers %} + {%- if peers.bind is mapping %} + bind {{ peers.bind.address }}:{{ peers.bind.port }}{{ ' ' ~ peers.bind.extra if 'extra' in peers.bind else '' }} + {%- else %} + bind {{ peers.bind }} + {%- endif %} + {%- endif %} + {%- if 'default-bind' in peers %} + default-bind {{ peers['default-bind'] }} + {%- endif %} + {%- if 'default-server' in peers %} + default-server {{ peers['default-server'] }} + {%- endif %} + {%- for server, data in peers.get('servers', {}).items() %} + server {{ server }}{{ ' ' ~ data.address if 'address' in data else '' }}{{ ':' ~ data.port if 'port' in data else '' }}{{ ' ' ~ data.extra if 'extra' in data else '' }} + {%- endfor %} + {%- if 'shards' in peers %} + shards {{ peers.shards }} + {%- endif %} +{%- endfor %} + #------------------ # common defaults that all the 'listen' and 'backend' sections will # use- if not designated in their block diff --git a/pillar.example b/pillar.example index 3a05a85..a66ace1 100644 --- a/pillar.example +++ b/pillar.example @@ -56,6 +56,35 @@ haproxy: john: insecure-password doe sam: insecure-password frodo + peers: + mygroup1: + peers: + myserver1: 2001:db8:100::1:1024 + # or + myserver1: + address: 2001:db8:100::1 + port: 1024 + + # HAProxy only allows either the above or the below peer configuration style - but this is not enforced by the formula + + bind: 2001:db8:100::1:1024 + # or + bind: + address: 2001:db8:100::1 + port: 1024 + extra: ssl crt /etc/ssl/crtkey + default-server: ssl verify required ca-file /etc/ssl/ca-bundle.pem + servers: + myserver1: + myserver1: {} + myserver2: + address: 2001:db8:100::2:1024 + # or + address: 2001:db8:100::2 + port: 1024 + + shards: 3 + defaults: log: global mode: http