Remove trailing whitespaces.
[slapos.git] / software / erp5 / instance-tidstorage.cfg.in
1 {% if software_type == slapparameter_dict['slap_software_type'] -%}
2 {#
3 Note: all port counters are pre-incremented. No idea why base port is skipped.
4 -#}
5 {% set current_zeo_port = zeo_port_base | int -%}
6 {% set zope_port_base = zope_port_base | int -%}
7 {% set zope_dummy_list = [] %}
8 {% set current_apache_port = apache_port_base | int -%}
9 {% set current_haproxy_port = haproxy_port_base | int -%}
10 {% set json = json_module.loads(slapparameter_dict['json']) -%}
11 {% set bin_directory = parameter_dict['buildout-bin-directory'] -%}
12 {#
13 BBB: erp5-ca['state'] has been configured as string by mistake. Keep this for
14 backward compatibility with existing automatically setup CAs.
15 -#}
16 {% set erp5_ca = json.get('erp5-ca', {
17   'country-code': 'ZZ',
18   'email': 'nobody@example.com',
19   'state': "('State',)",
20   'city': 'City',
21   'company': 'Company',
22 }) -%}
23 {% set site_id = json['site-id'] -%}
24 {% set part_list = [] -%}
25 {% set known_tid_storage_identifier_dict = {} -%}
26 {% set zodb_connection_list = [] -%}
27 {% macro section(name) %}{% do part_list.append(name) %}{{ name }}{% endmacro -%}
28 {% macro zope(
29   name,
30   thread_amount=1,
31   timeserver=False,
32   longrequest_logger_file='',
33   longrequest_logger_timeout='',
34   longrequest_logger_interval=''
35 ) -%}
36 [{{ section(name) }}]
37 recipe = slapos.cookbook:generic.zope.zeo.client
38
39 # XXX: products won't be needed as soon as all ERP5 (and products-deps)
40 # products will be eggified so then it will be possible to use them thanks to
41 # availability in software's eggs
42 products = {{ parameter_dict['products'] }}
43
44 # Options
45 user = zope
46 {% do zope_dummy_list.append(None) %}
47 {% set offset = zope_dummy_list | length %}
48 port = {{ zope_port_base + offset }}
49 ip = ${slap-network-information:local-ipv4}
50 thread-amount = {{ thread_amount }}
51 deadlock-path = /manage_debug_threads
52 timezone = {{ json['timezone'] }}
53 zeo-connection-string =
54   {{ zodb_connection_string }}
55
56 timeserver = {{ timeserver }}
57 tidstorage-ip = ${tidstorage:ip}
58 tidstorage-port = ${tidstorage:port}
59
60 # long request
61 longrequest-logger-file = {{ longrequest_logger_file }}
62 longrequest-logger-timeout = {{ longrequest_logger_timeout }}
63 longrequest-logger-interval = {{ longrequest_logger_interval }}
64
65 # Paths
66 wrapper = ${basedirectory:services}/{{ name }}
67 instance-path = ${directory:instance}
68 instance-etc = ${directory:instance-etc}
69 instance-products = ${directory:instance-products}
70 bt5-repository = ${rootdirectory:var}/bt5_repository
71 tmp-path = ${rootdirectory:tmp}
72 bin-path = ${rootdirectory:bin}
73 site-zcml = ${:instance-etc}/site.zcml
74 pid-file = ${basedirectory:run}/{{ name }}.pid
75 lock-file = ${basedirectory:run}/{{ name }}.lock
76 event-log = ${basedirectory:log}/{{ name }}-event.log
77 z2-log = ${basedirectory:log}/{{ name }}-Z2.log
78 configuration-file = ${rootdirectory:etc}/{{ name }}.conf
79 inituser = ${:instance-path}/inituser
80 # Binary information
81 runzope-binary = {{ bin_directory }}/runzope
82
83 # BT5 Configuration
84 bt5-repository-list =
85
86 promise-path = ${erp5-promise:promise-path}
87 site-id = {{ site_id }}
88
89 [{{ section('logrotate-entry-' + name) }}]
90 < = logrotate-base
91 recipe = slapos.cookbook:logrotate.d
92 name = {{ name }}
93 log = {{ '${' + name + ':event-log}' }} {{ '${' + name + ':z2-log}' }}
94 post = {{ bin_directory }}/killpidfromfile {{ '${' + name + ':pid-file}' }} SIGUSR2
95 {% endmacro -%}
96 #############################
97 # Directory creation
98 #############################
99 [rootdirectory]
100 recipe = slapos.cookbook:mkdirectory
101 etc = ${buildout:directory}/etc
102 var = ${buildout:directory}/var
103 srv = ${buildout:directory}/srv
104 bin = ${buildout:directory}/bin
105 tmp = ${buildout:directory}/tmp
106
107 [basedirectory]
108 recipe = slapos.cookbook:mkdirectory
109 log = ${rootdirectory:var}/log
110 services = ${rootdirectory:etc}/run
111 run = ${rootdirectory:var}/run
112 backup = ${rootdirectory:srv}/backup
113
114 [directory]
115 recipe = slapos.cookbook:mkdirectory
116 tidstorage = ${rootdirectory:srv}/tidstorage
117 zodb = ${rootdirectory:srv}/zodb
118 zodb-backup = ${basedirectory:backup}/zodb
119 instance = ${rootdirectory:srv}/erp5shared
120 instance-etc = ${:instance}/etc
121 apache-conf = ${rootdirectory:etc}/apache
122 instance-etc-package-include = ${:instance}/etc/package-include
123 instance-document = ${:instance}/Document
124 instance-propertysheet = ${:instance}/PropertySheet
125 instance-products = ${:instance}/Products
126 instance-extensions = ${:instance}/Extensions
127 instance-constraint = ${:instance}/Constraint
128 instance-import = ${:instance}/import
129 instance-lib = ${:instance}/lib
130 instance-tests = ${:instance}/tests
131 erp5-ca-dir = ${rootdirectory:srv}/erp5-ssl
132 ca-dir = ${rootdirectory:srv}/ssl
133 cron-entries = ${rootdirectory:etc}/cron.d
134 crontabs = ${rootdirectory:etc}/crontabs
135 cronstamps = ${rootdirectory:etc}/cronstamps
136 logrotate-backup = ${basedirectory:backup}/logrotate
137 logrotate-entries = ${rootdirectory:etc}/logrotate.d
138
139 #############################
140 # Binary symlinking
141 #############################
142 [binary-link]
143 recipe = slapos.cookbook:symbolic.link
144 target-directory = ${rootdirectory:bin}
145 link-binary =
146   {{ parameter_dict['coreutils'] }}/bin/basename
147   {{ parameter_dict['coreutils'] }}/bin/cat
148   {{ parameter_dict['coreutils'] }}/bin/cp
149   {{ parameter_dict['coreutils'] }}/bin/ls
150   {{ parameter_dict['coreutils'] }}/bin/tr
151   {{ parameter_dict['coreutils'] }}/bin/uname
152   {{ parameter_dict['git'] }}/bin/git
153   {{ parameter_dict['graphviz'] }}/bin/dot
154   {{ parameter_dict['grep'] }}/bin/grep
155   {{ parameter_dict['imagemagick'] }}/bin/convert
156   {{ parameter_dict['imagemagick'] }}/bin/identify
157   {{ parameter_dict['mariadb'] }}/bin/mysql
158   {{ parameter_dict['mariadb'] }}/bin/mysqldump
159   {{ parameter_dict['pdftk'] }}/bin/pdftk
160   {{ parameter_dict['sed'] }}/bin/sed
161   {{ parameter_dict['tesseract'] }}/bin/tesseract
162   {{ parameter_dict['w3m'] }}/bin/w3m
163   {{ parameter_dict['poppler'] }}/bin/pdfinfo
164   {{ parameter_dict['poppler'] }}/bin/pdftotext
165   {{ parameter_dict['poppler'] }}/bin/pdftohtml
166
167 #############################
168 # CA
169 #############################
170 [cadirectory]
171 recipe = slapos.cookbook:mkdirectory
172 requests = ${directory:ca-dir}/requests
173 private = ${directory:ca-dir}/private
174 certs = ${directory:ca-dir}/certs
175 newcerts = ${directory:ca-dir}/newcerts
176 crl = ${directory:ca-dir}/crl
177
178 [certificate-authority]
179 recipe = slapos.cookbook:certificate_authority
180 openssl-binary = {{ parameter_dict['openssl'] }}/bin/openssl
181 ca-dir = ${directory:ca-dir}
182 requests-directory = ${cadirectory:requests}
183 wrapper = ${basedirectory:services}/ca
184 ca-private = ${cadirectory:private}
185 ca-certs = ${cadirectory:certs}
186 ca-newcerts = ${cadirectory:newcerts}
187 ca-crl = ${cadirectory:crl}
188
189 #############################
190 # ERP5 CA
191 #############################
192 [erp5-cadirectory]
193 recipe = slapos.cookbook:mkdirectory
194 requests = ${directory:erp5-ca-dir}/requests
195 private = ${directory:erp5-ca-dir}/private
196 certs = ${directory:erp5-ca-dir}/certs
197 newcerts = ${directory:erp5-ca-dir}/newcerts
198 crl = ${directory:erp5-ca-dir}/crl
199
200 [erp5-certificate-authority]
201 recipe = slapos.cookbook:certificate_authority
202 openssl-binary = {{ parameter_dict['openssl'] }}/bin/openssl
203 ca-dir = ${directory:erp5-ca-dir}
204 requests-directory = ${erp5-cadirectory:requests}
205 wrapper = ${basedirectory:services}/erp5-ca
206 ca-private = ${erp5-cadirectory:private}
207 ca-certs = ${erp5-cadirectory:certs}
208 ca-newcerts = ${erp5-cadirectory:newcerts}
209 ca-crl = ${erp5-cadirectory:crl}
210 country-code = {{ erp5_ca['country-code'] }}
211 email = {{ erp5_ca['email'] }}
212 state = {{ erp5_ca['state'] }}
213 city = {{ erp5_ca['city'] }}
214 company = {{ erp5_ca['company'] }}
215
216 #############################
217 # CRON
218 #############################
219 [cron-base]
220 cron-entries = ${directory:cron-entries}
221
222 [cron]
223 < = cron-base
224 recipe = slapos.cookbook:cron
225 dcrond-binary = {{ parameter_dict['dcron'] }}/sbin/crond
226 crontabs = ${directory:crontabs}
227 cronstamps = ${directory:cronstamps}
228 catcher = ${cron-simplelogger:wrapper}
229 binary = ${basedirectory:services}/crond
230
231 [cron-simplelogger]
232 recipe = slapos.cookbook:simplelogger
233 wrapper = ${rootdirectory:bin}/cron_simplelogger
234 log = ${basedirectory:log}/cron.log
235
236 #############################
237 # Logrotate
238 #############################
239 [logrotate-base]
240 logrotate-entries = ${directory:logrotate-entries}
241 backup = ${directory:logrotate-backup}
242
243 [logrotate]
244 < = logrotate-base
245 recipe = slapos.cookbook:logrotate
246 # Binaries
247 logrotate-binary = {{ parameter_dict['logrotate'] }}/usr/sbin/logrotate
248 gzip-binary = {{ parameter_dict['gzip'] }}/bin/gzip
249 gunzip-binary = {{ parameter_dict['gzip'] }}/bin/gunzip
250 # Directories
251 wrapper = ${rootdirectory:bin}/logrotate
252 conf = ${rootdirectory:etc}/logrotate.conf
253 state-file = ${rootdirectory:srv}/logrotate.status
254
255 [cron-entry-logrotate]
256 < = cron-base
257 recipe = slapos.cookbook:cron.d
258 name = logrotate
259 frequency = 0 0 * * *
260 command = ${logrotate:wrapper}
261
262 #############################
263 # ERP5 bootstrap
264 #############################
265 [erp5-bootstrap]
266 recipe = slapos.cookbook:erp5.bootstrap
267 runner-path = ${basedirectory:services}/erp5-bootstrap
268 mysql-url = {{ slapparameter_dict['mysql-url'] }}
269 zope-url = http://${zope-admin:user}:${zope-admin:password}@${zope-admin:ip}:${zope-admin:port}/{{ site_id }}
270
271 #############################
272 # ERP5 promise
273 #############################
274 [erp5-promise]
275 recipe = slapos.cookbook:erp5.promise
276 promise-path = ${rootdirectory:etc}/erp5promise.cfg
277 kumofs-url = {{ slapparameter_dict['kumofs-url'] }}
278 memcached-url = {{ slapparameter_dict['memcached-url'] }}
279 cloudooo-url = {{ slapparameter_dict['cloudooo-url'] }}
280 smtp-url = ${slap-parameter:smtp-url}
281 bt5 = ${slap-parameter:bt5}
282 bt5-repository-url = ${slap-parameter:bt5-repository-url}
283
284 #############################
285 # ZEO
286 #############################
287 [zeo-instance-entry-common]
288 recipe = slapos.cookbook:zeo
289 ip = ${slap-network-information:local-ipv4}
290 binary-path = {{ bin_directory }}/runzeo
291
292 {% for zeo_id, zeo_configuration_list in json['zeo'].iteritems() -%}
293 {%   set storage_list = [] -%}
294 {%   for zeo_slave in zeo_configuration_list -%}
295 {%     do zodb_connection_list.append(
296       'zeo-cache-size=%(zeo-cache-size)s zope-cache-size=%(zope-cache-size)s '
297       'server=%(server)s mount-point=%(mount-point)s storage-name=%(storage-name)s' % {
298         'zope-cache-size': zeo_slave['zope-cache-size'],
299         'zeo-cache-size': zeo_slave['zeo-cache-size'],
300         'mount-point': zeo_slave['mount-point'] % {'site-id': site_id},
301         'storage-name': zeo_slave['storage-name'],
302         'server': '${zeo-instance-%(zeo-id)s:ip}:${zeo-instance-%(zeo-id)s:port}' % {'zeo-id': zeo_id},
303     }) -%}
304 {%     set zodb_path = '${directory:zodb}/' + zeo_slave['storage-name'] + '.fs' -%}
305 {%     do storage_list.append('storage-name=%(storage-name)s zodb-path=%(zodb-path)s' % {'zodb-path': zodb_path, 'storage-name': zeo_slave['storage-name']}) -%}
306 {%     do known_tid_storage_identifier_dict.__setitem__("((('%(ip)s', %(port)s),), '%(storage_name)s')" % {
307         'ip': '${zeo-instance-%s:ip}' % zeo_id,
308         'port': '${zeo-instance-%s:port}' % zeo_id,
309         'storage_name': zeo_slave['storage-name']
310       }, (zodb_path, '${directory:zodb-backup}/%s/' % zeo_slave['storage-name'], zeo_slave['serialize-path'] % {'site-id': site_id})) -%}
311 {%   endfor -%}
312 {%   set current_zeo_port = current_zeo_port + 1 -%}
313 [{{ section('zeo-instance-%s' % zeo_id) }}]
314 < = zeo-instance-entry-common
315 log-path = ${basedirectory:log}/zeo-{{ zeo_id }}.log
316 pid-path = ${basedirectory:run}/zeo-{{ zeo_id }}.pid
317 conf-path = ${rootdirectory:etc}/zeo-{{ zeo_id }}.conf
318 port = {{ current_zeo_port }}
319 storage =
320   {{ storage_list | join('\n  ') }}
321 wrapper-path = ${basedirectory:services}/zeo-{{ zeo_id }}
322
323 [{{ section('logrotate-entry-zeo-%s' % zeo_id) }}]
324 < = logrotate-base
325 recipe = slapos.cookbook:logrotate.d
326 name = zeo-{{ zeo_id }}
327 log = ${zeo-instance-{{ zeo_id }}:log-path}
328 post = {{ bin_directory }}/killpidfromfile ${zeo-instance-{{ zeo_id }}:pid-path} SIGUSR2
329 {% endfor %}
330 {% set zodb_connection_string = zodb_connection_list | join('\n  ') -%}
331 #############################
332 # Zope
333 #############################
334 # Distribution node
335 {{ zope('zope-distribution', timeserver=True) }}
336 # Admin node
337 {{ zope('zope-admin') }}
338 # Activity nodes
339 {% for q in range(1, json['activity']['zopecount'] + 1) -%}
340 {{   zope('zope-activity-%s' % q, timeserver=True) }}
341 {% endfor %}
342 # Other zopes, apaches and haproxies
343 {% set publish_url_list =  [] -%}
344 {% for backend_name, backend_configuration in json['backend'].iteritems() -%}
345 {%   set haproxy_backend_list = [] -%}
346 {%   set longrequest_logger = backend_configuration.get('longrequest-logger') -%}
347 {%   for q in range(1, backend_configuration['zopecount'] + 1) -%}
348 {%     set part_name = 'zope-%s-%s' % (backend_name, q) -%}
349 {%     if longrequest_logger != None -%}
350 {%       set longrequest_logger_file = '${basedirectory:log}/%s-longrequest.log' % (part_name, ) -%}
351 {%       set longrequest_logger_timeout = longrequest_logger.get('timeout', '4') -%}
352 {%       set longrequest_logger_interval = longrequest_logger.get('interval', '2') -%}
353 {%     else -%}
354 {%       set longrequest_logger_file = '' -%}
355 {%       set longrequest_logger_timeout = '' -%}
356 {%       set longrequest_logger_interval = '' -%}
357 {%     endif -%}
358 {{     zope(
359          part_name,
360          thread_amount=backend_configuration['thread-amount'],
361          longrequest_logger_file=longrequest_logger_file,
362          longrequest_logger_timeout=longrequest_logger_timeout,
363          longrequest_logger_interval=longrequest_logger_interval,
364        ) }}
365 {%     do haproxy_backend_list.append('${%(part_name)s:ip}:${%(part_name)s:port}' % {'part_name': part_name}) -%}
366 {%   endfor %}
367 {%   set scheme = backend_configuration.get('scheme', ['https']) -%}
368 {%   set current_apache_port = current_apache_port + 2 -%}
369 {%   set current_haproxy_port = current_haproxy_port + 1 -%}
370 {%   if 'http' in scheme -%}
371 {%     set section_name = 'apache-public-' ~ backend_name -%}
372 {%     do publish_url_list.append(
373          'url-public-%(backend_name)s = http://[${%(section_name)s:ip}]:${%(section_name)s:port}' % {
374          'backend_name': backend_name,
375          'section_name': section_name,
376        }) -%}
377 [{{ section(section_name) }}]
378 recipe = slapos.cookbook:apache.zope.backend
379 backend = http://${haproxy-{{ backend_name }}:ip}:${haproxy-{{ backend_name }}:port}
380 ip = ${slap-network-information:global-ipv6}
381 port = {{ current_apache_port }}
382 scheme = http
383 wrapper = ${basedirectory:services}/apache-public-{{ backend_name }}
384 configuration-file = ${directory:apache-conf}/apache-public-{{ backend_name }}.conf
385 access-control-string = {{ backend_configuration['access-control-string'] }}
386 pid-file = ${basedirectory:run}/apache-public-{{ backend_name }}.pid
387 lock-file = ${basedirectory:run}/apache-public-{{ backend_name }}.lock
388 error-log = ${basedirectory:log}/apache-public-{{ backend_name }}-error.log
389 access-log = ${basedirectory:log}/apache-public-{{ backend_name }}-access.log
390 apache-binary = {{ parameter_dict['apache'] }}/bin/httpd
391
392 [{{ section('logrotate-entry-apache-public-' ~ backend_name) }}]
393 < = logrotate-base
394 recipe = slapos.cookbook:logrotate.d
395 name = apache-public-{{ backend_name }}
396 log = ${apache-public-{{ backend_name }}:error-log} ${apache-public-{{ backend_name }}:access-log}
397 post = {{ bin_directory }}/killpidfromfile ${apache-public-{{ backend_name }}:pid-file} SIGUSR1
398 {%   endif %}
399 {%   if 'https' in scheme -%}
400 {%     set section_name = 'apache-' ~ backend_name -%}
401 {%     do publish_url_list.append(
402          'url-%(backend_name)s = https://[${%(section_name)s:ip}]:${%(section_name)s:port}' % {
403          'backend_name': backend_name,
404          'section_name': section_name,
405        }) -%}
406 [{{ section(section_name) }}]
407 recipe = slapos.cookbook:apache.zope.backend
408 backend = http://${haproxy-{{ backend_name }}:ip}:${haproxy-{{ backend_name }}:port}
409 ip = ${slap-network-information:global-ipv6}
410 port = {{ current_apache_port - 1 }}
411 wrapper = ${rootdirectory:bin}/apache-{{ backend_name }}
412 scheme = https
413 key-file = ${directory:apache-conf}/apache-{{ backend_name }}.key
414 cert-file = ${directory:apache-conf}/apache-{{ backend_name }}.crt
415 configuration-file = ${directory:apache-conf}/apache-{{ backend_name }}.conf
416 access-control-string = {{ backend_configuration['access-control-string'] }}
417 pid-file = ${basedirectory:run}/apache-{{ backend_name }}.pid
418 lock-file = ${basedirectory:run}/apache-{{ backend_name }}.lock
419 ssl-session-cache = $${basedirectory:log}/apache-ssl-session-cache
420 error-log = ${basedirectory:log}/apache-{{ backend_name }}-error.log
421 access-log = ${basedirectory:log}/apache-{{ backend_name }}-access.log
422 apache-binary = {{ parameter_dict['apache'] }}/bin/httpd
423 ssl-authentication = {{ backend_configuration.get('ssl-authentication', False) }}
424 backend-path = {{ backend_configuration.get('backend-path', '/') % {'site-id': site_id} }}
425 # Note: Without erp5-certificate-authority main certificate have to be hardcoded
426 ssl-authentication-certificate = ${erp5-certificate-authority:ca-dir}/cacert.pem
427 ssl-authentication-crl = ${erp5-certificate-authority:ca-crl}
428
429 [{{ section('ca-apache-' ~ backend_name) }}]
430 < = certificate-authority
431 recipe = slapos.cookbook:certificate_authority.request
432 key-file = ${apache-{{ backend_name }}:key-file}
433 cert-file = ${apache-{{ backend_name }}:cert-file}
434 executable = ${apache-{{ backend_name }}:wrapper}
435 wrapper = ${basedirectory:services}/apache-{{ backend_name }}
436
437 [{{ section('logrotate-entry-apache-' ~ backend_name) }}]
438 < = logrotate-base
439 recipe = slapos.cookbook:logrotate.d
440 name = apache-{{ backend_name }}
441 log = ${apache-{{ backend_name }}:error-log} ${apache-{{ backend_name }}:access-log}
442 post = {{ bin_directory }}/killpidfromfile ${apache-{{ backend_name }}:pid-file} SIGUSR1
443
444 [{{ section('haproxy-' ~ backend_name) }}]
445 recipe = slapos.cookbook:haproxy
446 name = {{ backend_name }}
447 conf-path = ${rootdirectory:etc}/haproxy-{{ backend_name }}.cfg
448 ip = ${slap-network-information:local-ipv4}
449 port = {{ current_haproxy_port }}
450 maxconn = {{ backend_configuration['maxconn'] }}
451 server-check-path = /{{ site_id }}/getId
452 wrapper-path = ${basedirectory:services}/haproxy-{{ backend_name }}
453 binary-path = {{ parameter_dict['haproxy'] }}/sbin/haproxy
454 backend-list = {{ haproxy_backend_list | join(' ')}}
455 {%   endif -%}
456 {% endfor %}
457
458 [{{ section('publish-apache-backend-list') }}]
459 recipe = slapos.cookbook:publish
460 {{ publish_url_list | join('\n') }}
461
462 #############################
463 # tidstorage
464 #############################
465 [tidstorage]
466 recipe = slapos.cookbook:tidstorage
467 known-tid-storage-identifier-dict = {{ known_tid_storage_identifier_dict }}
468 base-url = http://${zope-admin:ip}:${zope-admin:port}/%s/serialize
469 configuration-path = ${rootdirectory:etc}/tidstorage.py
470 ip = ${slap-network-information:local-ipv4}
471 port = 6001
472 timestamp-file-path = ${directory:tidstorage}/repozo_tidstorage_timestamp.log
473 logfile-name = ${basedirectory:log}/tidstorage.log
474 pidfile-name = ${basedirectory:run}/tidstorage.pid
475 status-file = ${directory:tidstorage}/tidstorage.tid
476 tidstorage-repozo-binary = {{ bin_directory }}/tidstorage_repozo
477 tidstoraged-binary = {{ bin_directory }}/tidstoraged
478 repozo-binary = {{ bin_directory }}/repozo
479 tidstorage-wrapper = ${basedirectory:services}/tidstoraged
480 repozo-wrapper = ${buildout:bin-directory}/tidstorage-repozo
481
482 [cron-entry-tidstorage-backup]
483 < = cron-base
484 recipe = slapos.cookbook:cron.d
485 name = tidstorage
486 frequency = 0 0 * * *
487 command = ${tidstorage:repozo-wrapper}
488
489 [logrotate-entry-tidstorage]
490 < = logrotate-base
491 recipe = slapos.cookbook:logrotate.d
492 name = tidstorage
493 log = ${tidstorage:logfile-name}
494 post = {{ bin_directory }}/killpidfromfile ${tidstorage:pidfile-name} SIGHUP
495
496 #############################
497 # buildout main section
498 #############################
499 [buildout]
500 parts =
501   logrotate
502   cron
503   cron-entry-logrotate
504   certificate-authority
505   erp5-certificate-authority
506   tidstorage
507   cron-entry-tidstorage-backup
508   logrotate-entry-tidstorage
509   binary-link
510   erp5-promise
511   erp5-bootstrap
512   {{ part_list | join('\n  ') }}
513
514 eggs-directory = {{ eggs_directory }}
515 develop-eggs-directory = {{ develop_eggs_directory }}
516 offline = true
517
518 {% endif %}