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