instance-erp5.cfg.in 23.5 KB
Newer Older
1
{% import "root_common" as root_common with context -%}
2
{% import "caucase" as caucase with context %}
3
{% set frontend_dict = slapparameter_dict.get('frontend', {}) -%}
4 5
{% set has_frontend = frontend_dict.get('software-url', '') != '' -%}
{% set site_id = slapparameter_dict.get('site-id', 'erp5') -%}
6 7
{% set inituser_login = slapparameter_dict.get('inituser-login', 'zope') -%}
{% set publish_dict = {'site-id': site_id, 'inituser-login': inituser_login} -%}
8
{% set has_posftix = slapparameter_dict.get('smtp', {}).get('postmaster') -%}
9
{% set jupyter_dict = slapparameter_dict.get('jupyter', {}) -%}
10
{% set has_jupyter = jupyter_dict.get('enable', jupyter_enable_default.lower() in ('true', 'yes')) -%}
11
{% set jupyter_zope_family = jupyter_dict.get('zope-family', '') -%}
12 13
{% set wcfs_dict = slapparameter_dict.get('wcfs', {}) -%}
{% set wcfs_enable = wcfs_dict.get('enable', wcfs_enable_default.lower() in ('true', 'yes')) -%}
14 15 16 17 18 19 20 21 22 23
{% set test_runner_enabled = slapparameter_dict.get('test-runner', {}).get('enabled', True) -%}
{% set test_runner_node_count = slapparameter_dict.get('test-runner', {}).get('node-count', 3) -%}
{% set test_runner_extra_database_count = slapparameter_dict.get('test-runner', {}).get('extra-database-count', 3) -%}
{% set test_runner_total_database_count = test_runner_node_count * (1 + test_runner_extra_database_count) -%}
{# Backward compatibility for mariadb.test-database-amount #}
{% set mariadb_test_database_amount = slapparameter_dict.get('mariadb', {}).get('test-database-amount') -%}
{% if mariadb_test_database_amount is not none -%}
{%   set test_runner_total_database_count = mariadb_test_database_amount %}
{%   set test_runner_enabled = mariadb_test_database_amount > 0 %}
{% endif -%}
24
{% set monitor_base_url_dict = {} -%}
25
{% set monitor_dict = slapparameter_dict.get('monitor', {}) %}
26
{% set use_ipv6 = slapparameter_dict.get('use-ipv6', False) -%}
27 28
{% set partition_thread_count_list = [] -%}
{% set zope_partition_dict = slapparameter_dict.get('zope-partition-dict', {'1': {}}) -%}
29
{% set zope_family_override_dict = slapparameter_dict.get('family-override', {}) -%}
30 31 32 33 34 35
{% for zope_parameter_dict in zope_partition_dict.values() -%}
{#   Apply some zope_parameter_dict default values, to avoid duplication. -#}
{%   do zope_parameter_dict.setdefault('thread-amount', 4) -%}
{%   do zope_parameter_dict.setdefault('instance-count', 1) -%}
{%   do partition_thread_count_list.append(zope_parameter_dict['thread-amount'] * zope_parameter_dict['instance-count']) -%}
{% endfor -%}
36
[request-common]
37
<= request-common-base
38
config-use-ipv6 = {{ dumps(slapparameter_dict.get('use-ipv6', False)) }}
39
config-computer-memory-percent-threshold = {{ dumps(monitor_dict.get('computer-memory-percent-threshold', 80)) }}
40 41
{% set caucase_dict = slapparameter_dict.get('caucase', {}) -%}
{% set caucase_url = caucase_dict.get('url', '') -%}
42

43
{% macro request(name, software_type, config_key, config, ret={'url': True}, key_config={}) -%}
44 45 46
{% do config.update(slapparameter_dict.get(config_key, {})) -%}
{% set section = 'request-' ~ name -%}
[{{ section }}]
47
<= request-common
48 49
name = {{ name }}
software-type = {{ software_type }}
50 51
return = {{ ' '.join(ret) }}
{% for ret, publish in ret.iteritems() -%}
52
{%   if publish -%}
53 54 55
{%     do publish_dict.__setitem__(name ~ '-' ~ ret, '${' ~ section ~ ':connection-' ~ ret ~ '}') %}
{%   endif -%}
{%   if ret == "monitor-base-url" -%}
56
{%     do monitor_base_url_dict.__setitem__(section, '${' ~ section ~ ':connection-' ~ ret ~ '}') -%}
57 58
{%   endif -%}
{% endfor -%}
59
{{ root_common.sla(name) }}
60 61
{% for k, v in config.iteritems() -%}
config-{{ k }} = {{ dumps(v) }}
62
{% endfor -%}
63 64 65
{% for k, v in key_config.iteritems() -%}
config-{{ k }} = {{ '${' ~ v ~ '}' }}
{% endfor -%}
66
config-name = {{ name }}
67
{% endmacro -%}
68

69 70
[directory]
recipe = slapos.cookbook:mkdirectory
71 72
bin = ${buildout:directory}/bin
service-on-watch = ${buildout:directory}/etc/service
73
srv = ${buildout:directory}/srv
74
tmp = {$buildout:directory}/tmp
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
backup-caucased = ${:srv}/backup/caucased

{% if not caucase_url -%}
{%   if use_ipv6 -%}
{%     set caucase_host = '[' ~ (ipv6_set | list)[0] ~ ']' %}
{%-  else -%}
{%     set caucase_host = (ipv4_set | list)[0] %}
{%-  endif %}
{%   set caucase_port = caucase_dict.get('base-port', 8890) -%}
{%   set caucase_netloc = caucase_host ~ ':' ~ caucase_port -%}
{%   set caucase_url = 'http://' ~ caucase_netloc -%}
{{   caucase.caucased(
       prefix='caucased',
       buildout_bin_directory=bin_directory,
       caucased_path='${directory:service-on-watch}/caucased',
       backup_dir='${directory:backup-caucased}',
       data_dir='${directory:srv}/caucased',
       netloc=caucase_netloc,
93
       tmp='${directory:tmp}',
94 95 96 97 98 99 100 101
       service_auto_approve_count=caucase_dict.get('service-auto-approve-amount', 1),
       user_auto_approve_count=caucase_dict.get('user-auto-approve-amount', 0),
       key_len=caucase_dict.get('key-length', 2048),
)}}
{% do root_common.section('caucased') -%}
{% do root_common.section('caucased-promise') -%}
{% endif -%}
{% do publish_dict.__setitem__('caucase-http-url', caucase_url) -%}
102
{% set balancer_dict = slapparameter_dict.setdefault('balancer', {}) -%}
103
{% do balancer_dict.setdefault('ssl', {}).setdefault('caucase-url', caucase_url) -%}
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
{% do balancer_dict.setdefault('tcpv4-port', 2150) -%}
{% do balancer_dict.__setitem__('haproxy-server-check-path', balancer_dict.get('haproxy-server-check-path', '/') % {'site-id': site_id}) -%}
{% set routing_path_template_field_dict = {"site-id": site_id} -%}
{% macro expandRoutingPath(output, input) -%}
{%   for outer_prefix, inner_prefix in input -%}
{%     do output.append((outer_prefix, inner_prefix % routing_path_template_field_dict)) -%}
{%   endfor -%}
{% endmacro -%}
{% set path_routing_list = [] -%}
{% do expandRoutingPath(
  path_routing_list,
  balancer_dict.get(
    'path-routing-list',
    (('/', '/'), ),
  ),
) -%}
{% do balancer_dict.__setitem__('path-routing-list', path_routing_list) -%}
{% set family_path_routing_dict = {} -%}
{% for name, family_path_routing_list in balancer_dict.get(
  'family-path-routing-dict',
  {},
).items() -%}
{%    set path_routing_list = [] -%}
{%    do expandRoutingPath(path_routing_list, family_path_routing_list) -%}
{%    do family_path_routing_dict.__setitem__(name, path_routing_list) -%}
{% endfor -%}
{% do balancer_dict.__setitem__('family-path-routing-dict', family_path_routing_dict) -%}
131

132 133
{{ request('memcached-persistent', 'kumofs', 'kumofs', {'tcpv4-port': 2000}, {'url': True, 'monitor-base-url': False}, key_config={'monitor-passwd': 'monitor-htpasswd:passwd'}) }}
{{ request('memcached-volatile', 'kumofs', 'memcached', {'tcpv4-port': 2010, 'ram-storage-size': 64}, {'url': True, 'monitor-base-url': False}, key_config={'monitor-passwd': 'monitor-htpasswd:passwd'}) }}
134 135 136 137 138 139 140
{# Notes on max-connection-count: On a standard ERP5, each transaction
   can have 4 connections to mariadb: activities, catalog, deferred and
   transactionless. Count 5 to have some headroom. Multiply by the total
   number of zope threads for all processes from all partitions to get the
   expected number of connections. Add 50 for have some more zope-independent
   headroom (automated probes, replication, ...).
-#}
141 142 143 144 145 146
{{ request('mariadb', 'mariadb', 'mariadb',
  {
    'tcpv4-port': 2099,
    'max-slowqueries-threshold': monitor_dict.get('max-slowqueries-threshold', 1000),
    'slowest-query-threshold': monitor_dict.get('slowest-query-threshold', ''),
    'test-database-amount': test_runner_total_database_count,
147
    'max-connection-count': sum(partition_thread_count_list) * 5 + 50,
148 149 150 151 152 153 154 155
  },
  {
    'database-list': True,
    'test-database-list': True,
    'monitor-base-url': False,
  },
  key_config={'monitor-passwd': 'monitor-htpasswd:passwd'},
) }}
156
{% if has_posftix -%}
157
{{   request('smtp', 'postfix', 'smtp', {'tcpv4-port': 2025, 'smtpd-sasl-user': 'erp5@nowhere'}, key_config={'smtpd-sasl-password': 'publish-early:smtpd-sasl-password', 'monitor-passwd': 'monitor-htpasswd:passwd'}) }}
158 159 160 161 162
{%- else %}
[request-smtp]
# Placeholder smtp service URL
connection-url = smtp://127.0.0.2:0/
{%- endif %}
163 164 165 166 167 168 169 170

{# ZODB -#}
{% set zodb_dict = {} -%}
{% set storage_dict = {} -%}
{% set mountpoints = set() -%}
{% for zodb in slapparameter_dict.get('zodb') or ({'type': 'zeo', 'server': {}},) -%}
{%   do mountpoints.add(zodb.setdefault('mount-point', '/')) -%}
{%   set name = zodb.pop('name', 'root') -%}
171
{%   do assert(name not in zodb_dict, name, zodb_dict) -%}
172 173 174 175 176
{%   do zodb_dict.__setitem__(name, zodb) -%}
{%   if 'server' in zodb -%}
{%     do storage_dict.setdefault(zodb['type'], {}).__setitem__(name, zodb.pop('server')) -%}
{%   endif -%}
{% endfor -%}
177 178
{% do assert(len(mountpoints) == len(zodb_dict)) -%}
{% set neo = [] -%}
179
{% for server_type, server_dict in storage_dict.iteritems() -%}
180 181
{%   if server_type == 'neo' -%}
{%     set ((name, server_dict),) = server_dict.items() -%}
182
{%     do neo.append(server_dict.get('cluster')) -%}
183
{%     do server_dict.update(cluster='${publish-early:neo-cluster}') -%}
Julien Muchembled's avatar
Julien Muchembled committed
184
{{     root_common.request_neo(server_dict, 'zodb-neo', 'neo-', monitor_base_url_dict) }}
185 186 187 188
{%     set client_dict = zodb_dict[name].setdefault('storage-dict', {}) -%}
{%     for k in 'ssl', '_ca', '_cert', '_key' -%}
{%       do k in server_dict and client_dict.setdefault(k, server_dict[k]) -%}
{%     endfor -%}
189 190
{%   else -%}
{{     assert(server_type == 'zeo', server_type) -}}
191
{# BBB: for compatibility, keep 'zodb' as partition_reference for ZEO -#}
192
{{     request('zodb', 'zodb-' ~ server_type, 'zodb-' ~ server_type, {'tcpv4-port': 2100, 'zodb-dict': server_dict}, dict.fromkeys(('storage-dict', 'tidstorage-ip', 'tidstorage-port', 'monitor-base-url')), key_config={'monitor-passwd': 'monitor-htpasswd:passwd'}) }}
193
{%   endif -%}
194
{% endfor -%}
195

196 197 198 199 200 201 202 203 204 205 206 207 208 209
[request-zodb-base]
config-zodb-dict = {{ dumps(zodb_dict) }}
{% for server_type, server_dict in storage_dict.iteritems() -%}
{%   if server_type == 'neo' -%}
config-neo-cluster = ${publish-early:neo-cluster}
config-neo-name = {{ server_dict.keys()[0] }}
config-neo-masters = ${publish-early:neo-masters}
{%   else -%}
config-zodb-zeo = ${request-zodb:connection-storage-dict}
config-tidstorage-ip = ${request-zodb:connection-tidstorage-ip}
config-tidstorage-port = ${request-zodb:connection-tidstorage-port}
{%   endif -%}
{% endfor -%}

210

211 212 213
{% set zope_address_list_id_dict = {} -%}
{% if zope_partition_dict -%}

214
[request-zope-base]
215
<= request-common
216
   request-zodb-base
217 218
return =
  zope-address-list
219
  hosts-dict
220
  monitor-base-url
221
  software-release-url
222 223 224
{%- if test_runner_enabled %}
  test-runner-address-list
{% endif %}
225 226 227 228 229 230
{% set bt5_default_list = [
  'erp5_full_text_mroonga_catalog',
  'erp5_configurator_standard',
  'erp5_configurator_maxma_demo',
  'erp5_configurator_run_my_doc',
] -%}
231
{% if has_jupyter -%}
232
{%   do bt5_default_list.append('erp5_data_notebook') -%}
233
{% endif -%}
234
config-bt5 = {{ dumps(slapparameter_dict.get('bt5', ' '.join(bt5_default_list))) }}
235
config-bt5-repository-url = {{ dumps(slapparameter_dict.get('bt5-repository-url', local_bt5_repository)) }}
236
config-cloudooo-url = {{ dumps(slapparameter_dict.get('cloudooo-url', default_cloudooo_url)) }}
237
config-caucase-url = {{ dumps(caucase_url) }}
238
config-deadlock-debugger-password = ${publish-early:deadlock-debugger-password}
239
config-developer-list = {{ dumps(slapparameter_dict.get('developer-list', [inituser_login])) }}
240
config-selenium-server-configuration-dict = {{ dumps(slapparameter_dict.get('selenium-server-configuration-dict', {})) }}
241
config-hosts-dict = {{ dumps(slapparameter_dict.get('hosts-dict', {})) }}
242
config-computer-hosts-dict = {{ dumps(slapparameter_dict.get('computer-hosts-dict', {})) }}
243
config-hostalias-dict = {{ dumps(slapparameter_dict.get('hostalias-dict', {})) }}
244
config-id-store-interval = {{ dumps(slapparameter_dict.get('id-store-interval')) }}
245 246
config-zope-longrequest-logger-error-threshold = {{ dumps(monitor_dict.get('zope-longrequest-logger-error-threshold', 20)) }}
config-zope-longrequest-logger-maximum-delay = {{ dumps(monitor_dict.get('zope-longrequest-logger-maximum-delay', 0)) }}
247
config-inituser-login = {{ dumps(inituser_login) }}
248
config-inituser-password = ${publish-early:inituser-password}
249 250
config-kumofs-url = ${request-memcached-persistent:connection-url}
config-memcached-url = ${request-memcached-volatile:connection-url}
251
config-monitor-passwd = ${monitor-htpasswd:passwd}
252 253 254
config-mysql-test-url-list = ${request-mariadb:connection-test-database-list}
config-mysql-url-list = ${request-mariadb:connection-database-list}
config-site-id = {{ dumps(site_id) }}
255
config-smtp-url = ${request-smtp:connection-url}
256
config-timezone = {{ dumps(slapparameter_dict.get('timezone', 'UTC')) }}
257
config-cloudooo-retry-count = {{ slapparameter_dict.get('cloudooo-retry-count', 2) }}
258
config-wendelin-core-zblk-fmt = {{ dumps(slapparameter_dict.get('wendelin-core-zblk-fmt', '')) }}
259
config-wsgi = {{ dumps(slapparameter_dict.get('wsgi', True)) }}
260
config-test-runner-enabled = {{ dumps(test_runner_enabled) }}
261
config-test-runner-node-count = {{ dumps(test_runner_node_count) }}
262
config-wcfs_enable = {{ dumps(wcfs_enable) }}
263
config-test-runner-configuration = {{ dumps(slapparameter_dict.get('test-runner', {})) }}
264
software-type = zope
265

266 267
{% set global_publisher_timeout = slapparameter_dict.get('publisher-timeout') -%}
{% set global_activity_timeout = slapparameter_dict.get('activity-timeout') -%}
268
{% set zope_family_dict = {} -%}
269
{% set zope_family_name_list = [] -%}
270 271
{% set zope_backend_path_dict = {} -%}
{% set ssl_authentication_dict = {} -%}
272
{% set jupyter_zope_family_default = [] -%}
273
{% for custom_name, zope_parameter_dict in zope_partition_dict.items() -%}
274 275
{%   set partition_name = 'zope-' ~ custom_name -%}
{%   set section_name = 'request-' ~ partition_name -%}
276
{%   set promise_software_url_section_name = 'promise-software-url' ~ partition_name -%}
277
{%   set zope_family = zope_parameter_dict.get('family', 'default') -%}
278
{%   do zope_family_name_list.append(zope_family) %}
279
{%   set backend_path = zope_parameter_dict.get('backend-path', '') % {'site-id': site_id} %}
280 281 282 283 284 285
{#   # default jupyter zope family is first zope family. -#}
{#   # use list.append() to update it, because in jinja2 set changes only local scope. -#}
{%   if not jupyter_zope_family_default -%}
{%     do jupyter_zope_family_default.append(zope_family) -%}
{%   endif -%}
{%   do zope_family_dict.setdefault(zope_family, []).append(section_name) -%}
286 287
{%   do zope_backend_path_dict.__setitem__(zope_family, backend_path) -%}
{%   do ssl_authentication_dict.__setitem__(zope_family, zope_parameter_dict.get('ssl-authentication', False)) -%}
288
{%   set current_zope_family_override_dict = zope_family_override_dict.get(zope_family, {}) -%}
289
[{{ section_name }}]
290
<= request-zope-base
291
name = {{ partition_name }}
292
{% do monitor_base_url_dict.__setitem__(section_name, '${' ~ section_name ~ ':connection-monitor-base-url}') -%}
293
{{ root_common.sla(partition_name) }}
294
config-name = {{ dumps(custom_name) }}
295
config-instance-count = {{ dumps(zope_parameter_dict['instance-count']) }}
296
config-private-dev-shm = {{ zope_parameter_dict.get('private-dev-shm', '') }}
297
config-thread-amount = {{ dumps(zope_parameter_dict['thread-amount']) }}
298 299 300
config-timerserver-interval = {{ dumps(zope_parameter_dict.get('timerserver-interval', 5)) }}
config-longrequest-logger-interval = {{ dumps(zope_parameter_dict.get('longrequest-logger-interval', -1)) }}
config-longrequest-logger-timeout = {{ dumps(zope_parameter_dict.get('longrequest-logger-timeout', 1)) }}
301
config-large-file-threshold = {{ dumps(zope_parameter_dict.get('large-file-threshold', "10MB")) }}
302
config-port-base = {{ dumps(zope_parameter_dict.get('port-base', 2200)) }}
303 304
{# BBB: zope_parameter_dict used to contain 'webdav', so fallback to it -#}
config-webdav = {{ dumps(current_zope_family_override_dict.get('webdav', zope_parameter_dict.get('webdav', False))) }}
305 306
config-publisher-timeout = {{ dumps(current_zope_family_override_dict.get('publisher-timeout', global_publisher_timeout)) }}
config-activity-timeout = {{ dumps(current_zope_family_override_dict.get('activity-timeout', global_activity_timeout)) }}
307
{%   if test_runner_enabled -%}
308
config-test-runner-apache-url-list = ${publish-early:{{ zope_family }}-test-runner-url-list}
309 310 311 312 313 314 315 316 317 318 319 320

[{{ promise_software_url_section_name }}]
# Promise to wait for zope partition to use the expected software URL,
# used on upgrades.
recipe = slapos.cookbook:check_parameter
value = {{ '${' ~ section_name ~ ':connection-software-release-url}' }}
expected-not-value =
expected-value = ${slap-connection:software-release-url}
path = ${directory:bin}/${:_buildout_section_name_}

{% do root_common.section(promise_software_url_section_name) -%}

321
{%   endif -%}
322 323
{% endfor -%}

324 325 326 327 328 329
{# if not explicitly configured, connect jupyter to first zope family, which  -#}
{# will be 'default' if zope families are not configured also -#}
{% if not jupyter_zope_family and jupyter_zope_family_default -%}
{%   set jupyter_zope_family = jupyter_zope_family_default[0] -%}
{% endif -%}

330 331 332 333 334 335 336 337 338 339
{# We need to concatenate lists that we cannot read as lists, so this gets hairy. -#}
{% set zope_family_parameter_dict = {} -%}
{% for family_name, zope_section_id_list in zope_family_dict.items() -%}
{%   for zope_section_id in zope_section_id_list -%}
{%     set parameter_name = 'zope-family-entry-' ~ zope_section_id -%}
{%     do zope_address_list_id_dict.__setitem__(zope_section_id, parameter_name) -%}
{%     do zope_family_parameter_dict.setdefault(family_name, []).append(parameter_name) -%}
{%   endfor -%}
{%   if has_frontend -%}
{%     set frontend_name = 'frontend-' ~ family_name -%}
340
{%     do publish_dict.__setitem__('family-' ~ family_name, '${' ~ frontend_name ~ ':connection-site_url}' ) -%}
341
[{{ frontend_name }}]
342
<= request-frontend-base
343
name = {{ frontend_name }}
344
config-url = ${request-balancer:connection-{{ family_name }}-v6}
345
{%   else -%}
346 347
{%     do publish_dict.__setitem__('family-' ~ family_name, '${request-balancer:connection-' ~ family_name ~ '}' ) -%}
{%     do publish_dict.__setitem__('family-' ~ family_name ~ '-v6', '${request-balancer:connection-' ~ family_name ~ '-v6}' ) -%}
348 349 350
{%   endif -%}
{% endfor -%}

351 352 353 354 355 356 357 358 359 360 361 362 363 364
{% if has_jupyter -%}
{# request jupyter connected to balancer of proper zope family -#}
{{   request('jupyter', 'jupyter', 'jupyter', {}, key_config={'erp5-url': 'request-balancer:connection-' ~ jupyter_zope_family}) }}

{%   if has_frontend -%}
[frontend-jupyter]
<= request-frontend-base
name = frontend-jupyter
config-url = ${request-jupyter:connection-url}
{#     # override jupyter-url in publish_dict with frontend address -#}
{%     do publish_dict.__setitem__('jupyter-url', '${frontend-jupyter:connection-site_url}') -%}
{%   endif -%}
{%- endif %}

365 366 367 368 369 370 371 372 373 374 375
{% if wcfs_enable -%}
{# request WCFS connected to ZODB -#}
{%   do root_common.section('request-wcfs') -%}
{{   request('wcfs', 'wcfs', 'wcfs', {}, {}) }}

[request-wcfs]
<= request-common
   request-zodb-base

{%- endif %}

376 377 378 379
{% set balancer_ret_dict = {'monitor-base-url': False} -%}
{% for family in zope_family_dict -%}
{%   do balancer_ret_dict.__setitem__(family, False) -%}
{%   do balancer_ret_dict.__setitem__(family + '-v6', False) -%}
380
{%   if test_runner_enabled -%}
381
{%     do balancer_ret_dict.__setitem__(family + '-test-runner-url-list', False) -%}
382
{%   endif -%}
383
{% endfor -%}
384 385 386 387 388 389 390
{% set balancer_key_config_dict = {
  'monitor-passwd': 'monitor-htpasswd:passwd',
} -%}
{% for zope_section_id, name in zope_address_list_id_dict.items() -%}
{%   do balancer_key_config_dict.__setitem__(
       name,
       zope_section_id + ':connection-zope-address-list',
391
) -%}
392 393 394 395 396 397
{%   if test_runner_enabled -%}
{%   do balancer_key_config_dict.__setitem__(
       name + '-test-runner-address-list',
       zope_section_id + ':connection-test-runner-address-list',
) -%}
{%   endif -%}
398
{% endfor -%}
399 400 401 402 403 404 405 406 407 408
{{ request(
  name='balancer',
  software_type='balancer',
  config_key='balancer',
  config={
    'zope-family-dict': zope_family_parameter_dict,
    'backend-path-dict': zope_backend_path_dict,
    'ssl-authentication-dict': ssl_authentication_dict,
    'apachedex-promise-threshold': monitor_dict.get('apachedex-promise-threshold', 70),
    'apachedex-configuration': monitor_dict.get(
409 410 411 412 413 414 415 416
      'apachedex-configuration',
      [
        '--logformat', '%h %l %u %t "%r" %>s %O "%{Referer}i" "%{User-Agent}i" %{ms}T',
        '--erp5-base', '+erp5', '.*/VirtualHostRoot/erp5(/|\\?|$)',
        '--base', '+other', '/',
        '--skip-user-agent', 'Zabbix',
        '--error-detail',
        '--js-embed',
417 418 419 420 421 422 423
        '--quiet',
      ],
    ),
  },
  ret=balancer_ret_dict,
  key_config=balancer_key_config_dict,
) }}
424

425 426
[request-frontend-base]
{% if has_frontend -%}
427
<= request-common
Roque's avatar
Roque committed
428
recipe = slapos.cookbook:request
429 430
software-url = {{ dumps(frontend_dict['software-url']) }}
software-type = {{ dumps(frontend_dict.get('software-type', 'RootSoftwareInstance')) }}
431
{{ root_common.sla('frontend', True) }}
432 433 434 435 436 437 438
slave = true
{% set config_dict = {
  'type': 'zope',
} -%}
{%   if frontend_dict.get('domain') -%}
{%     do config_dict.__setitem__('custom_domain', frontend_dict['domain']) -%}
{%   endif -%}
439 440 441 442 443 444
{%   if frontend_dict.get('virtualhostroot-http-port') -%}
{%     do config_dict.__setitem__('virtualhostroot-http-port', frontend_dict['virtualhostroot-http-port']) -%}
{%   endif -%}
{%   if frontend_dict.get('virtualhostroot-https-port') -%}
{%     do config_dict.__setitem__('virtualhostroot-https-port', frontend_dict['virtualhostroot-https-port']) -%}
{%   endif -%}
445 446 447 448 449
{%   for name, value in config_dict.items() -%}
config-{{ name }} = {{ value }}
{%   endfor -%}
return = site_url
{% endif -%}
450

451 452
{% endif -%}{# if zope_partition_dict -#}

453
[publish]
454
<= monitor-publish
455
recipe = slapos.cookbook:publish.serialised
456
-extends = publish-early
457
{% if zope_address_list_id_dict -%}
458 459 460 461 462
{#
Pick any published hosts-dict, they are expected to be identical - and there is
no way to check here.
-#}
hosts-dict = {{ '${' ~ zope_address_list_id_dict.keys()[0] ~ ':connection-hosts-dict}' }}
463
{% endif -%}
464
{% for name, value in publish_dict.items() -%}
465
{{   name }} = {{ value }}
466
{% endfor -%}
467 468
{% if test_runner_enabled -%}
{%   for zope_family_name in zope_family_name_list -%}
469
{{     zope_family_name }}-test-runner-url-list = ${request-balancer:connection-{{ zope_family_name }}-test-runner-url-list}
470 471
{%   endfor -%}
{% endif -%}
472 473 474 475 476 477 478 479 480

[publish-early]
recipe = slapos.cookbook:publish-early
-init =
  inituser-password gen-password:passwd
  deadlock-debugger-password gen-deadlock-debugger-password:passwd
{%- if has_posftix %}
  smtpd-sasl-password gen-smtpd-sasl-password:passwd
{%- endif %}
481 482
{%- if test_runner_enabled %}
{%-   for zope_family_name in zope_family_name_list %}
483
  {{ zope_family_name }}-test-runner-url-list default-balancer-test-runner-url-list:{{ zope_family_name }}
484 485
{%-   endfor %}
{%- endif %}
486 487
{%- if neo %}
  neo-cluster gen-neo-cluster:name
488 489
  neo-admins neo-cluster:admins
  neo-masters neo-cluster:masters
490 491 492 493 494 495 496 497 498 499 500
{%-  if neo[0] %}
neo-cluster = {{ dumps(neo[0]) }}
{%-  endif %}
{%- endif %}
{%- set inituser_password = slapparameter_dict.get('inituser-password') %}
{%- if inituser_password %}
inituser-password = {{ dumps(inituser_password) }}
{%- endif %}
{%- set deadlock_debugger_password = slapparameter_dict.get('deadlock-debugger-password') -%}
{%- if deadlock_debugger_password %}
deadlock-debugger-password = {{ dumps(deadlock_debugger_password) }}
501
{% endif %}
502

503
{%- if test_runner_enabled %}
504 505
[default-balancer-test-runner-url-list]
recipe =
506 507 508 509
{%-   for zope_family_name in zope_family_name_list %}
{{ zope_family_name }} = not-ready
{%-   endfor %}
{%- endif %}
510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525

[gen-password]
recipe = slapos.cookbook:generate.password
storage-path =

[gen-deadlock-debugger-password]
<= gen-password

[gen-neo-cluster-base]
<= gen-password

[gen-neo-cluster]
name = neo-${gen-neo-cluster-base:passwd}

[gen-smtpd-sasl-password]
< = gen-password
526

527
{{ root_common.common_section() }}
528 529

[monitor-conf-parameters]
530
monitor-title = ERP5
531 532 533 534 535 536
password = ${monitor-htpasswd:passwd}

[monitor-base-url-dict]
{% for key, value in monitor_base_url_dict.items() -%}
{{ key }} = {{ value }}
{% endfor %}