Filip Pytloun | 78944bc | 2016-04-13 13:03:54 +0200 | [diff] [blame] | 1 | {%- from "haproxy/map.jinja" import proxy with context -%} |
Filip Pytloun | 48d3830 | 2015-10-06 16:28:31 +0200 | [diff] [blame] | 2 | |
| 3 | global |
Filip Pytloun | 78944bc | 2016-04-13 13:03:54 +0200 | [diff] [blame] | 4 | log /dev/log local0 |
| 5 | log /dev/log local1 notice |
| 6 | chroot /var/lib/haproxy |
| 7 | stats socket {{ proxy.stats_socket }} mode 660 level admin |
| 8 | stats timeout 30s |
Filip Pytloun | 48d3830 | 2015-10-06 16:28:31 +0200 | [diff] [blame] | 9 | user haproxy |
Filip Pytloun | 78944bc | 2016-04-13 13:03:54 +0200 | [diff] [blame] | 10 | group haproxy |
| 11 | daemon |
| 12 | pidfile /var/run/haproxy.pid |
Filip Pytloun | 48d3830 | 2015-10-06 16:28:31 +0200 | [diff] [blame] | 13 | spread-checks 4 |
| 14 | tune.maxrewrite 1024 |
| 15 | tune.bufsize 32768 |
Filip Pytloun | 78944bc | 2016-04-13 13:03:54 +0200 | [diff] [blame] | 16 | maxconn 16000 |
Filip Pytloun | 48d3830 | 2015-10-06 16:28:31 +0200 | [diff] [blame] | 17 | |
| 18 | defaults |
| 19 | log global |
| 20 | mode http |
Filip Pytloun | 48d3830 | 2015-10-06 16:28:31 +0200 | [diff] [blame] | 21 | |
| 22 | maxconn 8000 |
| 23 | {# |
| 24 | timeout connect {{ proxy.get('connect_timeout', '5000') }}ms |
| 25 | timeout client {{ proxy.get('client_timeout', '50000ms') }}ms |
| 26 | timeout server {{ proxy.get('server_timeout', '50000ms') }}ms |
| 27 | #} |
| 28 | option redispatch |
| 29 | retries 3 |
| 30 | stats enable |
| 31 | timeout http-request 10s |
| 32 | timeout queue 1m |
| 33 | timeout connect 10s |
| 34 | timeout client 1m |
| 35 | timeout server 1m |
| 36 | timeout check 10s |
| 37 | |
Jiri Konecny | 371c6de | 2016-03-02 11:32:46 +0100 | [diff] [blame] | 38 | {%- if proxy.listen.admin_page is defined and proxy.listen.admin_page.user is defined %} |
Filip Pytloun | 48d3830 | 2015-10-06 16:28:31 +0200 | [diff] [blame] | 39 | |
| 40 | userlist STATSUSERS |
| 41 | group admin users admin |
| 42 | user {{ proxy.listen.admin_page.user }} insecure-password {{ proxy.listen.admin_page.password }} |
| 43 | user stats insecure-password {{ proxy.listen.admin_page.password }} |
| 44 | {# |
| 45 | {%- for listen_name, listen in proxy.get('listen', {}).iteritems() %} |
| 46 | {%- if listen.user is defined %} |
| 47 | user {{ listen.user }} insecure-password {{ listen.password }} |
| 48 | {%- endif %} |
| 49 | {%- endfor %} |
| 50 | #} |
| 51 | |
| 52 | {%- endif %} |
| 53 | |
| 54 | {%- for listen_name, listen in proxy.get('listen', {}).iteritems() %} |
| 55 | {%- if listen.get('format', 'listen') == 'listen' %} |
| 56 | |
| 57 | listen {{ listen_name }} |
| 58 | {%- for bind in listen.binds %} |
| 59 | bind {{ bind.address }}:{{ bind.port }} |
| 60 | {%- endfor %} |
Filip Pytloun | 7047366 | 2016-08-25 17:08:20 +0200 | [diff] [blame] | 61 | {%- if listen.get('type', None) == 'http' %} |
Filip Pytloun | 48d3830 | 2015-10-06 16:28:31 +0200 | [diff] [blame] | 62 | mode http |
| 63 | balance roundrobin |
| 64 | option httplog |
Filip Pytloun | 7047366 | 2016-08-25 17:08:20 +0200 | [diff] [blame] | 65 | {%- elif listen.get('type', None) == 'rabbitmq' %} |
Filip Pytloun | 48d3830 | 2015-10-06 16:28:31 +0200 | [diff] [blame] | 66 | balance roundrobin |
| 67 | mode tcp |
| 68 | option tcpka |
| 69 | timeout client 48h |
| 70 | timeout server 48h |
Filip Pytloun | 7047366 | 2016-08-25 17:08:20 +0200 | [diff] [blame] | 71 | {%- elif listen.get('type', None) == 'mysql' %} |
Filip Pytloun | 48d3830 | 2015-10-06 16:28:31 +0200 | [diff] [blame] | 72 | balance leastconn |
| 73 | mode tcp |
| 74 | option httpchk |
| 75 | option tcplog |
| 76 | option clitcpka |
| 77 | option srvtcpka |
| 78 | timeout client 28801s |
| 79 | timeout server 28801s |
| 80 | option mysql-check user haproxy |
Filip Pytloun | 7047366 | 2016-08-25 17:08:20 +0200 | [diff] [blame] | 81 | {%- elif listen.get('type', None) == 'horizon' %} |
Filip Pytloun | 48d3830 | 2015-10-06 16:28:31 +0200 | [diff] [blame] | 82 | balance source |
| 83 | capture cookie vgnvisitor= len 32 |
| 84 | cookie SERVERID insert indirect nocache |
| 85 | mode http |
| 86 | option forwardfor |
| 87 | option httpchk |
| 88 | option httpclose |
| 89 | option httplog |
| 90 | rspidel ^Set-cookie:\ IP= |
Filip Pytloun | 7047366 | 2016-08-25 17:08:20 +0200 | [diff] [blame] | 91 | {%- elif listen.get('type', None) == 'general-service' %} |
Filip Pytloun | 48d3830 | 2015-10-06 16:28:31 +0200 | [diff] [blame] | 92 | mode http |
| 93 | balance roundrobin |
| 94 | option httplog |
Filip Pytloun | 7047366 | 2016-08-25 17:08:20 +0200 | [diff] [blame] | 95 | {%- elif listen.get('type', None) == 'openstack-service' %} |
Filip Pytloun | 48d3830 | 2015-10-06 16:28:31 +0200 | [diff] [blame] | 96 | option httpchk |
| 97 | option httplog |
| 98 | option httpclose |
Filip Pytloun | 7047366 | 2016-08-25 17:08:20 +0200 | [diff] [blame] | 99 | {%- elif listen.get('type', None) == 'heat' %} |
Filip Pytloun | 48d3830 | 2015-10-06 16:28:31 +0200 | [diff] [blame] | 100 | balance source |
| 101 | option tcpka |
| 102 | option httpchk |
| 103 | option tcplog |
Filip Pytloun | 7047366 | 2016-08-25 17:08:20 +0200 | [diff] [blame] | 104 | {%- elif listen.get('type', None) == 'contrail-config' %} |
Filip Pytloun | 48d3830 | 2015-10-06 16:28:31 +0200 | [diff] [blame] | 105 | mode http |
| 106 | stats enable |
| 107 | stats uri / |
| 108 | stats auth {{ listen.user }}:{{ listen.password }} |
Filip Pytloun | 7047366 | 2016-08-25 17:08:20 +0200 | [diff] [blame] | 109 | {%- elif listen.get('type', None) == 'contrail-api' %} |
Filip Pytloun | 48d3830 | 2015-10-06 16:28:31 +0200 | [diff] [blame] | 110 | option nolinger |
| 111 | balance roundrobin |
Filip Pytloun | 7047366 | 2016-08-25 17:08:20 +0200 | [diff] [blame] | 112 | {%- elif listen.get('type', None) == 'contrail-analytics' %} |
Filip Pytloun | 48d3830 | 2015-10-06 16:28:31 +0200 | [diff] [blame] | 113 | option nolinger |
| 114 | balance roundrobin |
| 115 | option tcp-check |
| 116 | tcp-check connect port 6379 |
| 117 | default-server error-limit 1 on-error mark-down |
Filip Pytloun | 7047366 | 2016-08-25 17:08:20 +0200 | [diff] [blame] | 118 | {%- elif listen.get('type', None) == 'stats' %} |
Filip Pytloun | 48d3830 | 2015-10-06 16:28:31 +0200 | [diff] [blame] | 119 | mode http |
| 120 | stats enable |
| 121 | stats uri / |
Jiri Konecny | 371c6de | 2016-03-02 11:32:46 +0100 | [diff] [blame] | 122 | {%- if listen.user is defined %} |
Filip Pytloun | 48d3830 | 2015-10-06 16:28:31 +0200 | [diff] [blame] | 123 | stats auth {{ listen.user }}:{{ listen.password }} |
| 124 | {%- endif %} |
Filip Pytloun | 7047366 | 2016-08-25 17:08:20 +0200 | [diff] [blame] | 125 | {%- elif listen.get('type', None) == 'admin' %} |
Filip Pytloun | 48d3830 | 2015-10-06 16:28:31 +0200 | [diff] [blame] | 126 | mode http |
| 127 | acl AuthOkay_ReadOnly http_auth(STATSUSERS) |
| 128 | acl AuthOkay_Admin http_auth_group(STATSUSERS) {{ listen.user }} |
| 129 | stats enable |
| 130 | stats refresh 60s |
| 131 | stats uri / |
| 132 | stats http-request auth realm admin_page unless AuthOkay_ReadOnly |
| 133 | stats admin if AuthOkay_Admin |
Filip Pytloun | 7047366 | 2016-08-25 17:08:20 +0200 | [diff] [blame] | 134 | {%- else %} |
| 135 | {# no type specified #} |
| 136 | mode {{ listen.mode|default('tcp') }} |
| 137 | {%- for acl in listen.get('acl', []) %} |
| 138 | acl {{ acl }} |
| 139 | {%- endfor %} |
| 140 | balance {{ listen.balance|default('roundrobin') }} |
| 141 | {%- for option in listen.get('options', []) %} |
| 142 | option {{ option }} |
| 143 | {%- endfor %} |
Filip Pytloun | 161572b | 2016-08-26 10:28:29 +0200 | [diff] [blame^] | 144 | {%- for reqadd in listen.get('reqadd', []) %} |
Filip Pytloun | e9e246f | 2016-08-26 09:44:51 +0200 | [diff] [blame] | 145 | reqadd {{ reqadd }} |
| 146 | {%- endfor %} |
Filip Pytloun | 161572b | 2016-08-26 10:28:29 +0200 | [diff] [blame^] | 147 | {%- for reqirep in listen.get('reqirep', []) %} |
Filip Pytloun | e9e246f | 2016-08-26 09:44:51 +0200 | [diff] [blame] | 148 | reqirep {{ reqirep }} |
| 149 | {%- endfor %} |
Filip Pytloun | 48d3830 | 2015-10-06 16:28:31 +0200 | [diff] [blame] | 150 | {%- endif %} |
| 151 | {%- for server in listen.get('servers', []) %} |
| 152 | server {{ server.name }} {{ server.host }}:{{ server.port }} {{ server.get('params', '') }} |
| 153 | {%- endfor %} |
| 154 | {%- endif %} |
| 155 | {%- endfor %} |
| 156 | |
| 157 | {%- for listen_name, listen in proxy.get('listen', {}).iteritems() %} |
| 158 | {%- if listen.get('format', 'listen') == 'end' %} |
| 159 | |
| 160 | frontend {{ listen_name }} {{ listen.binds[0].address }}:{{ listen.binds[0].port }} |
| 161 | {%- for acl in listen.get('acls', []) %} |
| 162 | {%- for condition in acl.get('conditions', []) %} |
| 163 | acl {{ acl.name }} {{ condition.type }} {{ condition.condition }} |
| 164 | {%- endfor %} |
| 165 | use_backend {{ acl.name }}-backend if {{ acl.name }} |
| 166 | {%- endfor %} |
| 167 | default_backend {{ listen_name }}-backend |
| 168 | |
| 169 | backend {{ listen_name }}-backend |
Filip Pytloun | 7047366 | 2016-08-25 17:08:20 +0200 | [diff] [blame] | 170 | {%- if listen.get('type', None) == 'http' %} |
Filip Pytloun | 48d3830 | 2015-10-06 16:28:31 +0200 | [diff] [blame] | 171 | balance roundrobin |
| 172 | {%- endif %} |
| 173 | {%- for server in listen.get('servers', []) %} |
| 174 | server {{ server.get('name', server.host) }} {{ server.host }}:{{ server.port }} {{ server.get('params', '') }} |
| 175 | {%- endfor %} |
| 176 | {%- for acl in listen.get('acls', []) %} |
| 177 | |
| 178 | backend {{ acl.name }}-backend |
| 179 | balance roundrobin |
| 180 | {%- for server in acl.get('servers', []) %} |
| 181 | server {{ server.get('name', server.host) }} {{ server.host }}:{{ server.port }} {{ server.get('params', '') }} |
| 182 | {%- endfor %} |
| 183 | {%- endfor %} |
| 184 | {%- endif %} |
| 185 | {%- endfor %} |