apache-custom-slave-list.cfg.in 15.5 KB
Newer Older
1 2
{% if software_type == slap_software_type -%}

3 4
{% set cached_server_dict = {} -%}
{% set part_list = [] -%}
5 6 7
{% set cache_port = apache_configuration.get('cache-port') %}
{% set cached_port = apache_configuration.get('cache-through-port') %}
{% set ssl_cached_port = apache_configuration.get('ssl-cache-through-port') %}
8
{% set cache_access = "http://%s:%s" % (local_ipv4, cache_port) -%}
9
{% set ssl_cache_access = "http://%s:%s/HTTPS" % (local_ipv4, cache_port) -%}
10
{% set TRUE_VALUES = ['y', 'yes', '1', 'true'] -%}
11
{% set NGINX_TYPE_LIST = ['eventsource', 'notebook'] -%}
12
{% set generic_instance_parameter_dict = {'cache_access': cache_access,} -%}
13
{% set slave_log_dict = {} -%}
14
{% if extra_slave_instance_list -%}
15
{%   set slave_instance_information_list = [] -%}
16 17
{%   set slave_instance_list = slave_instance_list + json_module.loads(extra_slave_instance_list) -%}
{% endif -%}
18 19
[jinja2-template-base]
recipe = slapos.recipe.template:jinja2
20
extensions = jinja2.ext.do
21 22 23 24 25 26
extra-context =
context =
    key eggs_directory buildout:eggs-directory
    key develop_eggs_directory buildout:develop-eggs-directory
    ${:extra-context}

27 28 29 30 31 32
{% do logrotate_dict.pop('recipe') %}
[logrotate]
{% for key, value in logrotate_dict.iteritems() -%}
{{ key }} = {{ value }}
{% endfor %}

33
post = {{ frontend_lazy_graceful_reload }} &
34 35 36 37 38 39
frequency = daily
rotatep-num = 30
sharedscripts = true
notifempty = true
create = true

40 41 42 43 44 45 46 47 48
[cadirectory]
recipe = slapos.cookbook:mkdirectory
requests = {{ custom_ssl_directory }}/requests/
private = {{ custom_ssl_directory }}/private/
certs = {{ custom_ssl_directory }}/certs/
newcerts = {{ custom_ssl_directory }}/newcerts/
crl = {{ custom_ssl_directory }}/crl/

{# Loop throught slave list to set up slaves #}
49
{% for slave_instance in slave_instance_list -%}
50
{#   # Do all set and do upper, so it makes easy to read the file later #} 
51
{%   set slave_reference = slave_instance.get('slave_reference') -%}
52
{%   set slave_type = slave_instance.get('type', '') -%}
53
{%   set slave_section_title = 'dynamic-template-slave-instance-%s' % slave_reference -%}
54
{%   set slave_parameter_dict = generic_instance_parameter_dict.copy() -%}
55
{%   set slave_publish_dict = {} -%}
56
{%   set slave_configuration_section_name = 'slave-instance-%s-configuration' % slave_reference %}
57 58 59 60
{%   set slave_logrotate_section = slave_reference + "-logs" -%}
{%   set slave_password_section = slave_reference + "-password" -%}
{%   set slave_ln_section = slave_reference + "-ln" -%}
{%   set slave_htaccess_section = slave_reference + '-htaccess' %}
61

62 63 64
{#   extend parts #}
{%   do part_list.extend([slave_htaccess_section, slave_ln_section]) -%}
{%   do part_list.extend([slave_logrotate_section, slave_section_title]) -%}
65 66 67

{%   set slave_log_folder = logrotate_dict.get('backup') + '/' + slave_reference + "-logs" -%}

68
{#   Set Up log files #}
69 70
{%   do slave_parameter_dict.__setitem__('access_log', '/'.join([apache_log_directory, '%s_access_log' % slave_reference])) -%}
{%   do slave_parameter_dict.__setitem__('error_log', '/'.join([apache_log_directory, '%s_error_log' % slave_reference])) -%}
71 72
{%   do slave_instance.__setitem__('access_log', slave_parameter_dict.get('access_log')) -%}
{%   do slave_instance.__setitem__('error_log', slave_parameter_dict.get('error_log')) -%}
73

74 75 76 77 78 79 80 81 82 83
{#   Add slave log directory to the slave log access dict #}
{%   do slave_log_dict.__setitem__(slave_reference, slave_log_folder) %}

{%   set slave_log_access_url = 'https://' + slave_reference + ':${'+ slave_password_section +':passwd}@[' + frontend_configuration.get('apache-ipv6') + ']:' + frontend_configuration.get('apache-https-port') + '/' + slave_reference.lower() + '/' %}
{%   do slave_publish_dict.__setitem__('log-access', slave_log_access_url) %}
{%   do slave_publish_dict.__setitem__('slave-reference', slave_reference) %}
{%   do slave_publish_dict.__setitem__('public-ipv4', public_ipv4) %}

{# Set slave domain if none was defined #}
{%   if slave_instance.get('custom_domain', None) == None -%}
84
{%     set domain_prefix = slave_instance.get('slave_reference').replace("-", "").replace("_", "").lower() -%}
85 86 87 88 89
{%     if slave_type in NGINX_TYPE_LIST -%}
{%       do slave_instance.__setitem__('custom_domain', "%s.%s" % (domain_prefix, slapparameter_dict.get('nginx-domain', slapparameter_dict.get('domain')))) -%}
{%     else -%}
{%       do slave_instance.__setitem__('custom_domain', "%s.%s" % (domain_prefix, slapparameter_dict.get('domain'))) -%}
{%     endif -%}
90 91
{%   endif -%}

92
{%   set enable_cache = (('' ~ slave_instance.get('enable_cache', '')).lower() in TRUE_VALUES and slave_type != 'redirect') -%}
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
{%   if enable_cache and 'url' in slave_instance -%}
{%     if 'domain' in slave_instance -%}
{%       do slave_instance.__setitem__('custom_domain', slave_instance.get('domain')) -%}
{%     endif -%}
{%     do slave_instance.__setitem__('backend_url', slave_instance.get('url')) -%}
{%     do slave_instance.__setitem__('https_backend_url', slave_instance.get('https-url', slave_instance.get('url'))) -%}
{%     do slave_instance.__setitem__('url', cache_access) -%}
{%     do slave_instance.__setitem__('https-url', ssl_cache_access) -%}
{%     do cached_server_dict.__setitem__(slave_reference, slave_configuration_section_name) -%}
{%   endif -%}

{%   if not slave_instance.has_key('apache_custom_http') %}
{%     do slave_publish_dict.__setitem__('domain', slave_instance.get('custom_domain')) -%}
{%     do slave_publish_dict.__setitem__('url', "http://%s" % slave_instance.get('custom_domain')) -%}
{%     do slave_publish_dict.__setitem__('site_url', "http://%s" % slave_instance.get('custom_domain')) -%}
{%     do slave_publish_dict.__setitem__('secure_access', 'https://%s' % slave_instance.get('custom_domain')) -%}
{%   endif -%}

111
[slave-log-directories]
112
{{slave_reference}} = {{ slave_log_folder }}
113 114

{# Set slave logrotate entry #}
115 116 117 118 119
[{{slave_logrotate_section}}]
<= logrotate
recipe = slapos.cookbook:logrotate.d
name = ${:_buildout_section_name_}
log = {{slave_parameter_dict.get('access_log')}} {{slave_parameter_dict.get('error_log')}}
120
backup = {{ slave_log_folder }} 
121

122
{# integrate current logs inside #}
123 124 125
[{{slave_ln_section}}]
recipe = plone.recipe.command
stop-on-error = false
126
command = ln -s {{slave_parameter_dict.get('error_log')}} {{ slave_log_folder }}/apache-error.log && ln -s {{slave_parameter_dict.get('access_log')}} {{ slave_log_folder }}/apache-access.log
127

128
{# Set password for slave #}
129 130 131 132 133
[{{slave_password_section}}]
recipe = slapos.cookbook:generate.password
storage-path = {{apache_configuration_directory}}/.{{slave_reference}}.passwd
bytes = 8

134
{# Set up htaccess file for slave #}
135 136 137 138 139 140
[{{slave_htaccess_section}}]
recipe = plone.recipe.command
stop-on-error = true
htaccess-path = {{apache_configuration_directory}}/.{{slave_reference}}.htaccess
command = {{frontend_configuration.get('apache-directory')}}/bin/htpasswd -cb ${:htaccess-path} {{ slave_reference }} {{ '${' + slave_password_section + ':passwd}' }}

141 142
{# ################################################## #}
{# Set Slave Certificates if needed                   #}
143

144
{# Set ssl certificates for each slave #}
145
{%   for cert_name in ('ssl_ca_crt', 'ssl_csr', 'ssl_proxy_ca_crt')-%}
146 147 148 149
{%     if cert_name in slave_instance -%}
{%       set cert_title = '%s-%s' % (slave_reference, cert_name.replace('ssl_', '')) -%}
{%       set cert_file = '/'.join([custom_ssl_directory, cert_title.replace('-','.')]) -%}
{%       do part_list.append(cert_title) -%}
150
{%       do slave_parameter_dict.__setitem__(cert_name, cert_file) -%}
151
{%       do slave_instance.__setitem__('path_to_' + cert_name, cert_file) -%}
152
{# Store certificates on fs #}
153 154 155 156 157 158
[{{ cert_title }}]
< = jinja2-template-base
template = {{ empty_template }}
rendered = {{ cert_file }}
extra-context =
    key content {{ cert_title + '-config:value' }}
159
# Store certificate in config
160 161 162 163 164
[{{ cert_title + '-config' }}]
value = {{ dumps(slave_instance.get(cert_name)) }}
{%     endif -%}
{%   endfor -%}

165 166 167 168 169 170
{%   if 'ssl_key' in slave_instance and 'ssl_crt' in slave_instance -%}
{%     set cert_title = '%s-crt' % (slave_reference) -%}
{%     set key_title = '%s-key' % (slave_reference) -%}
{%     set cert_file = '/'.join([custom_ssl_directory, cert_title.replace('-','.')]) -%}
{%     set key_file = '/'.join([custom_ssl_directory, key_title.replace('-','.')]) -%}
{%     do part_list.append(cert_title) -%}
171 172
{%     do slave_parameter_dict.__setitem__("ssl_crt", cert_file) -%}
{%     do slave_parameter_dict.__setitem__("ssl_key", key_file) -%}
173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191
{%     do slave_instance.__setitem__('path_to_ssl_crt', cert_file) -%}
{%     do slave_instance.__setitem__('path_to_ssl_key', key_file) -%}

[{{cert_title}}]
recipe = slapos.cookbook:certificate_authority.request
#openssl-binary = ${openssl:location}/bin/openssl

requests-directory = ${cadirectory:requests}
ca-private = ${cadirectory:private}
ca-certs = ${cadirectory:certs}
ca-newcerts = ${cadirectory:newcerts}
ca-crl = ${cadirectory:crl}

key-file = {{ key_file }}
cert-file = {{ cert_file }}
key-content = {{ dumps(slave_instance.get('ssl_key')) }}
cert-content = {{ dumps(slave_instance.get('ssl_crt')) }} 
{%     endif -%}

192 193
{# ########################################## #}
{# Set Slave Configuration                    #}
194
[{{ slave_configuration_section_name }}]
195 196
{%     set apache_custom_http = ((slave_instance.pop('apache_custom_http', '')) % slave_parameter_dict) -%}
{%     set apache_custom_https = ((slave_instance.pop('apache_custom_https', '')) % slave_parameter_dict) -%}
197 198
apache_custom_http = {{ dumps(apache_custom_http) }}
apache_custom_https = {{ dumps(apache_custom_https) }}
199 200 201 202
{{ '\n' }}
{%     for key, value in slave_instance.iteritems() -%}
{{ key }} = {{ dumps(value) }}
{%     endfor %}
203 204 205

[{{ slave_section_title }}]
< = jinja2-template-base
206 207 208 209 210 211 212 213
{%   if slave_type in NGINX_TYPE_LIST %}
rendered = {{ nginx_configuration_directory }}/${:filename}
{%   else %}
rendered = {{ apache_configuration_directory }}/${:filename}
{%   endif %}


{%   if apache_custom_http %}
214
template = {{ template_custom_slave_configuration }}
215 216 217 218
{%   elif slave_type == 'eventsource' %}
template = {{ template_eventsource_slave_configuration }}
{%   elif slave_type == 'notebook' %}
template = {{ template_notebook_slave_configuration }}
219
{%   else %}
220
template = {{ template_default_slave_configuration }}
221
{%   endif %}
222

223 224 225 226
filename = {{ '%s.conf' % slave_reference }}
extra-context =
    raw https_port {{ https_port }}
    raw http_port {{ http_port }}
227 228 229 230
    raw global_ipv6 {{ global_ipv6 }}
    raw local_ipv4 {{ local_ipv4 }}
    raw nginx_http_port {{ nginx_http_port }} 
    raw nginx_https_port {{ nginx_https_port }}
231
    section slave_parameter {{ slave_configuration_section_name }}
232
{{ '\n' }}
233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272


{%   set check_error_log_section_title = 'check-%s-error-log-last-hour' % slave_instance.get('slave_reference') -%}
{%   do part_list.append(check_error_log_section_title) -%}
[{{ check_error_log_section_title }}]
recipe = slapos.cookbook:wrapper
command-line = {{ bin_directory }}/check-error-on-apache-log -l {{ slave_instance.get('error_log') }} -d 3600 
filename = {{ check_error_log_section_title }}
wrapper-path = {{ promise_directory }}/${:filename}

{%   set check_error_log_section_title = 'check-%s-error-log-last-day' % slave_instance.get('slave_reference') -%}
{%   do part_list.append(check_error_log_section_title) -%}
[{{ check_error_log_section_title }}]
recipe = slapos.cookbook:wrapper
command-line = {{ bin_directory }}/check-error-on-apache-log -l {{ slave_instance.get('error_log') }} -d 86400
filename = {{ check_error_log_section_title }}
wrapper-path = {{ promise_directory }}/${:filename}

{%   set monitor_ipv6_test = slave_instance.get('monitor-ipv6-test', '') %}
{%   if monitor_ipv6_test %}
{%     set monitor_ipv6_section_title = 'check-%s-ipv6-packet-list-test' % slave_instance.get('slave_reference') %}
{%     do part_list.append(monitor_ipv6_section_title) -%}
[{{ monitor_ipv6_section_title }}]
recipe = slapos.cookbook:wrapper
command-line = {{ bin_directory }}/is-icmp-packet-lost -a {{monitor_ipv6_test}} 
filename = {{ monitor_ipv6_section_title }}
wrapper-path = {{ promise_directory }}/${:filename}
{%   endif %}

{%   set monitor_ipv4_test = slave_instance.get('monitor-ipv4-test', '') %}
{%   if monitor_ipv4_test %}
{%     set monitor_ipv4_section_title = 'check-%s-ipv4-packet-list-test' % slave_instance.get('slave_reference') %}
{%     do part_list.append(monitor_ipv4_section_title) -%}
[{{ monitor_ipv4_section_title }}]
recipe = slapos.cookbook:wrapper
command-line = {{ bin_directory }}/is-icmp-packet-lost -4 -a {{monitor_ipv4_test}}
filename = {{ monitor_ipv4_section_title }}
wrapper-path = {{ promise_directory }}/${:filename}
{%   endif %}

273 274 275 276 277 278 279 280 281 282 283 284 285
{%   set re6st_optimal_test = slave_instance.get('re6st-optimal-test', '') %}
{%   if re6st_optimal_test %}
{%     set re6st_ipv6, re6st_ipv4 = re6st_optimal_test.split(",") %}
{%     set re6st_optimal_test_section_title = 'check-%s-re6st-optimal-test' % slave_instance.get('slave_reference') %}
{%     do part_list.append(re6st_optimal_test_section_title) -%}
[{{ re6st_optimal_test_section_title }}]
recipe = slapos.cookbook:wrapper
command-line = {{ bin_directory }}/check-re6st-optimal-status -4 {{re6st_ipv4}} -6 {{re6st_ipv6}}
filename = {{ re6st_optimal_test_section_title }}
wrapper-path = {{ promise_directory }}/${:filename}
{%   endif %}


286 287
{# ###############################  #}
{# Publish Slave Information        #}
288 289 290 291 292 293 294 295 296 297 298
{%   if not extra_slave_instance_list -%}
{%     set publish_section_title = 'publish-%s-connection-information' % slave_instance.get('slave_reference') -%}
{%     do part_list.append(publish_section_title) -%}
[{{ publish_section_title }}]
recipe = slapos.cookbook:publish
{%     for key, value in slave_publish_dict.iteritems() %}
{{ key }} = {{ value }}
{%     endfor %}
{%   else -%}
{%     do slave_instance_information_list.append(slave_publish_dict) -%}
{%   endif -%}
299 300

{# End of the main for loop#}
301 302 303
{% endfor -%}

###############################################
304 305 306 307 308 309 310 311 312 313 314 315 316 317
### Prepare virtualhost for slaves using cache

{% for slave_reference, slave_configuration_section_name in cached_server_dict.iteritems() %}
{%   set cached_slave_configuration_section_title = '%s-cached-virtualhost' % slave_reference %}
{%   do part_list.append(cached_slave_configuration_section_title) -%}
[{{ cached_slave_configuration_section_title }}]
< = jinja2-template-base
template = {{ template_cached_slave_configuration }}
filename = {{ '%s.conf' % slave_reference }}
rendered = {{ apache_cached_configuration_directory }}/${:filename}
extensions = jinja2.ext.do
extra-context =
    section slave_parameter {{ slave_configuration_section_name }}
    raw cached_port {{ cached_port }}
318
    raw ssl_cached_port {{ ssl_cached_port }}
319 320 321
{{ '\n' }}
{% endfor %}

322
[slave-log-directories]
323
recipe = slapos.cookbook:mkdirectory
324

325 326
{# Define log access #}
[apache-log-access]
327 328 329 330 331 332 333 334
< = jinja2-template-base
template = {{frontend_configuration.get('template-log-access')}}
rendered = {{frontend_configuration.get('log-access-configuration')}}
extra-context =
    section slave_log_directory slave-log-directories
    raw apache_log_directory {{apache_log_directory}}
    raw apache_configuration_directory {{apache_configuration_directory}}

335
{# Publish information for the instance #}
336
[publish-apache-information]
337 338 339 340 341 342
recipe = slapos.cookbook:publish
public-ipv4 = {{ public_ipv4 }}
private-ipv4 = {{ local_ipv4 }}
{% if extra_slave_instance_list -%}
slave-instance-information-list = {{ json_module.dumps(slave_instance_information_list) }}
{% endif -%}
343
monitor-base-url = {{ monitor_base_url }}
344 345 346

[buildout]
parts +=
347
    slave-log-directories
348 349
{% for part in part_list -%}
{{ '    %s' % part }}
350
{% endfor %}
351
    publish-apache-information
352
    apache-log-access
353 354 355 356

eggs-directory = {{ eggs_directory }}
develop-eggs-directory = {{ develop_eggs_directory }}
offline = true
357 358 359
cache-access = {{ cache_access }}

{% endif -%}