slaprunner: new parameter in slapos.cfg (for minishell's history)
[slapos.git] / software / slaprunner / instance-runner.cfg
1 [buildout]
2 parts =
3   nginx_conf
4   nginx-launcher
5   certificate-authority
6   ca-nginx
7   ca-shellinabox
8   gunicorn-launcher
9   gunicorn-graceful
10   sshkeys-dropbear-runner
11   dropbear-server-add-authorized-key
12   sshkeys-authority
13   publish-connection-informations
14   slaprunner-promise
15   slaprunner-frontend-promise
16   dropbear-promise
17   runtestsuite
18   shellinabox-promise
19   symlinks
20   shellinabox
21   slapos-cfg
22   slapos-repo-config
23   cron-entry-prepare-software
24   deploy-instance-parameters
25   instance-software-type
26   minishell-cwd
27 {% if slapparameter_dict.get('custom-frontend-backend-url') %}
28   custom-frontend-promise
29 {% endif %}
30 ## Monitoring part
31 ###Parts to add for monitoring
32   cron
33   certificate-authority
34   cron-entry-monitor
35   cron-entry-rss
36   deploy-index
37   deploy-settings-cgi
38   deploy-status-cgi
39   deploy-status-history-cgi
40   setup-static-files
41   certificate-authority
42   zero-parameters
43   public-symlink
44   cgi-httpd-wrapper
45   cgi-httpd-graceful-wrapper
46   monitor-promise
47   monitor-instance-log-access
48 ## Monitor for runner
49   monitor-current-log-access
50
51 extends = ${monitor-template:output}
52
53 eggs-directory = ${buildout:eggs-directory}
54 develop-eggs-directory = ${buildout:develop-eggs-directory}
55 offline = true
56
57 {% if slapparameter_dict.get('custom-frontend-backend-url') -%}
58 # Requests, if defined, a frontend to allow access to a server
59 # located inside of the virtual machine listening to port X
60 # to LAN IPv4.
61 # Internaly, the frontend will be asked to listen on the IPv6
62 # with port X + 10000, to match NAT rules of Qemu.
63 [request-custom-frontend]
64 recipe = slapos.cookbook:requestoptional
65 software-url = {{ slapparameter_dict.get('custom-frontend-software-url', 'http://git.erp5.org/gitweb/slapos.git/blob_plain/HEAD:/software/apache-frontend/software.cfg') }}
66 software-type = {{ slapparameter_dict.get('custom-frontend-software-type', 'RootSoftwareInstance') }}
67 slave = true
68 name = Custom Web Frontend
69
70 server-url = $${slap-connection:server-url}
71 key-file = $${slap-connection:key-file}
72 cert-file = $${slap-connection:cert-file}
73 computer-id = $${slap-connection:computer-id}
74 partition-id = $${slap-connection:partition-id}
75
76 {%- if slapparameter_dict.get('custom-frontend-instance-guid') -%}
77 sla = instance_guid
78 sla-instance_guid = $${slap-parameter:frontend-instance-guid}
79 {% endif -%}
80
81 {% set custom_frontend_backend_type = slapparameter_dict.get('custom-frontend-backend-type')%}
82 {% if custom_frontend_backend_type %}
83 config = url type
84 config-type = {{ custom_frontend_backend_type }}
85 {% else %}
86 config = url
87 {% endif -%}
88 config-url = {{ slapparameter_dict.get('custom-frontend-backend-url') }}
89 return = site_url domain
90
91 [custom-frontend-promise]
92 recipe = slapos.cookbook:check_url_available
93 path = $${directory:promises}/custom_frontend_promise
94 url = https://$${request-custom-frontend:connection-domain}
95 {% if slapparameter_dict.get('custom-frontend-basic-auth') -%}
96 check-secure = 1
97 {% endif -%}
98 dash_path = {{ dash_executable_location }}
99 curl_path = {{ curl_executable_location }}
100
101 [publish-connection-informations]
102 custom-frontend-url = https://$${request-custom-frontend:connection-domain}
103 {% endif %}
104
105 # Create all needed directories
106 [directory]
107 recipe = slapos.cookbook:mkdirectory
108 etc = $${buildout:directory}/etc/
109 var = $${buildout:directory}/var/
110 srv = $${buildout:directory}/srv/
111 bin = $${buildout:directory}/bin/
112 tmp = $${buildout:directory}/tmp/
113
114 sshkeys = $${:srv}/sshkeys
115 services = $${:etc}/service/
116 scripts = $${:etc}/run/
117 ssh = $${:etc}/ssh/
118 log = $${:var}/log/
119 run = $${:var}/run/
120 backup = $${:srv}/backup/
121 promises = $${:etc}/promise/
122 test = $${:etc}/test/
123 nginx-data = $${directory:srv}/nginx
124 ca-dir = $${:srv}/ssl
125 project = $${:srv}/runner/project
126
127 [runnerdirectory]
128 recipe = slapos.cookbook:mkdirectory
129 home = $${directory:srv}/runner/
130 test = $${directory:srv}/test/
131 project = $${:home}/project
132 public = $${:home}/public
133 software-root = $${:home}/software
134 instance-root = $${:home}/instance
135 project-test = $${:test}/project
136 software-test = $${:test}/software
137 instance-test = $${:test}/instance
138 sessions = $${buildout:directory}/.sessions
139
140 #Create password recovery code for slaprunner
141 [recovery-code]
142 recipe = slapos.cookbook:generate.password
143 storage-path = $${directory:etc}/.rcode
144 bytes = 8
145
146 [slaprunner]
147 slaprunner = ${buildout:directory}/bin/slaprunner
148 slapos = ${buildout:directory}/bin/slapos
149 slapproxy = ${buildout:directory}/bin/slapproxy
150 supervisor = ${buildout:directory}/bin/slapgrid-supervisorctl
151 git-binary = ${git:location}/bin/git
152 root_check = false
153 slapos.cfg = $${directory:etc}/slapos.cfg
154 working-directory = $${runnerdirectory:home}
155 project-directory = $${runnerdirectory:project}
156 instance_root = $${runnerdirectory:instance-root}
157 software_root = $${runnerdirectory:software-root}
158 #XXX-Nico hardcoded default port because overridden by this buildout config
159 instance-monitor-url = https://[$${:ipv6}]:9685
160 etc_dir = $${directory:etc}
161 log_dir =  $${directory:log}
162 run_dir = $${directory:run}
163 ssh_client = $${sshkeys-dropbear-runner:wrapper}
164 public_key = $${sshkeys-dropbear-runner:public-key}
165 private_key = $${sshkeys-dropbear-runner:private-key}
166 ipv4 = $${slap-network-information:local-ipv4}
167 ipv6 = $${slap-network-information:global-ipv6}
168 instance_root = $${runnerdirectory:instance-root}
169 proxy_port = 50000
170 runner_port = 50005
171 partition-amount = $${slap-parameter:instance-amount}
172 wrapper = $${directory:services}/slaprunner
173 debug = $${slap-parameter:debug}
174 access-url = https://[$${:ipv6}]:$${:runner_port}
175 supervisord_config = $${directory:etc}/supervisord.conf
176 proxy_database = $${slaprunner:working-directory}/proxy.db
177 console = False
178 verbose = False
179 debug = False
180 auto_deploy = $${slap-parameter:auto-deploy}
181 auto_deploy_instance = $${slap-parameter:auto-deploy-instance}
182 autorun = $${slap-parameter:autorun}
183 knowledge0_file = $${buildout:directory}/$${public:filename}
184 minishell_cwd_file = $${directory:etc}/.minishell-cwd
185 minishell_history_file = $${directory:etc}/.minishell_history
186
187 [test-runner]
188 <= slaprunner
189 slapos.cfg = $${directory:etc}/slapos-test.cfg
190 working-directory = $${runnerdirectory:test}
191 project-directory = $${runnerdirectory:project-test}
192 software_root = $${runnerdirectory:software-test}
193 instance_root = $${runnerdirectory:instance-test}
194 proxy_port = 8602
195 etc_dir = $${directory:test}
196 autorun = False
197 auto_deploy = True
198
199 [runtestsuite]
200 recipe = slapos.cookbook:wrapper
201 command-line = ${buildout:directory}/bin/slaprunnertest
202 wrapper-path = $${directory:bin}/runTestSuite
203 environment = RUNNER_CONFIG=$${slapos-test-cfg:rendered}
204
205 # Deploy dropbear (minimalist SSH server)
206 [sshkeys-directory]
207 recipe = slapos.cookbook:mkdirectory
208 requests = $${directory:sshkeys}/requests/
209 keys = $${directory:sshkeys}/keys/
210
211 [sshkeys-authority]
212 recipe = slapos.cookbook:sshkeys_authority
213 request-directory = $${sshkeys-directory:requests}
214 keys-directory = $${sshkeys-directory:keys}
215 wrapper = $${directory:services}/sshkeys_authority
216 keygen-binary = ${dropbear:location}/bin/dropbearkey
217
218 [dropbear-runner-server]
219 recipe = slapos.cookbook:dropbear
220 host = $${slap-network-information:global-ipv6}
221 port = 22222
222 home = $${directory:ssh}
223 wrapper = $${directory:bin}/runner_sshd
224 shell = ${bash:location}/bin/bash
225 rsa-keyfile = $${directory:ssh}/server_key.rsa
226 dropbear-binary = ${dropbear:location}/sbin/dropbear
227
228 [sshkeys-dropbear-runner]
229 <= sshkeys-authority
230 recipe = slapos.cookbook:sshkeys_authority.request
231 name = dropbear
232 type = rsa
233 executable = $${dropbear-runner-server:wrapper}
234 public-key = $${dropbear-runner-server:rsa-keyfile}.pub
235 private-key = $${dropbear-runner-server:rsa-keyfile}
236 wrapper = $${directory:services}/runner_sshd
237
238 [dropbear-server-add-authorized-key]
239 <= dropbear-runner-server
240 recipe = slapos.cookbook:dropbear.add_authorized_key
241 key = $${slap-parameter:user-authorized-key}
242
243 #---------------------------
244 #--
245 #-- Set nginx frontend
246
247 [tempdirectory]
248 recipe = slapos.cookbook:mkdirectory
249 client_body_temp_path = $${directory:tmp}/client_body_temp_path
250 proxy_temp_path = $${directory:tmp}/proxy_temp_path
251 fastcgi_temp_path = $${directory:tmp}/fastcgi_temp_path
252 uwsgi_temp_path = $${directory:tmp}/uwsgi_temp_path
253 scgi_temp_path = $${directory:tmp}/scgi_temp_path
254
255 [nginx-frontend]
256 # Options
257 nb_workers = 2
258 # Network
259 local-ip = $${slap-network-information:local-ipv4}
260 port = 30001
261 global-ip = $${slap-network-information:global-ipv6}
262 global-port = $${slaprunner:runner_port}
263 # Backend
264 runner-ip = $${slaprunner:ipv4}
265 runner-port = $${slaprunner:runner_port}
266 # SSL
267 ssl-certificate = $${ca-nginx:cert-file}
268 ssl-key = $${ca-nginx:key-file}
269 # Log
270 path_pid = $${directory:run}/nginx.pid
271 path_log = $${directory:log}/nginx.log
272 path_access_log = $${directory:log}/nginx.access.log
273 path_error_log = $${directory:log}/nginx.error.log
274 path_tmp = $${directory:tmp}/
275 # Config files
276 path_nginx_conf = $${directory:etc}/nginx.conf
277 # Executables
278 bin_nginx = ${nginx-webdav:location}/sbin/nginx
279 bin_launcher = $${directory:bin}/launcher
280 # Utils
281 path_shell = ${dash:location}/bin/dash
282 # Misc.
283 etc_dir = $${directory:etc}
284 work_dir = $${slaprunner:working-directory}
285
286 [nginx_conf]
287 recipe = slapos.recipe.template:jinja2
288 template = ${template_nginx_conf:location}/${template_nginx_conf:filename}
289 rendered = $${nginx-frontend:path_nginx_conf}
290 context =
291     key shellinabox_port shellinabox:port
292     key socket gunicorn:socket
293     section param_nginx_frontend nginx-frontend
294     section param_tempdir tempdirectory
295
296 [nginx-launcher]
297 recipe = slapos.recipe.template:jinja2
298 template = ${template_launcher:location}/${template_launcher:filename}
299 rendered = $${nginx-frontend:bin_launcher}
300 mode = 700
301 context =
302     section param_nginx_frontend nginx-frontend
303
304 [httpd-parameters]
305 path_pid = $${directory:run}/httpd.pid
306 path_error_log = $${directory:log}/httpd-error.log
307 path_access_log = $${directory:log}/httpd-access.log
308 key_file = $${ca-httpd:key-file}
309 cert_file = $${ca-httpd:cert-file}
310 global_ip = $${slap-network-information:global-ipv6}
311 global_port = $${slaprunner:runner_port}
312 monitor_port = $${monitor-parameters:port}
313 monitor_index = $${deploy-index:rendered}
314 working_directory = $${slaprunner:working-directory}
315 dav_lock = $${directory:var}/DavLock
316 etc_dir = $${directory:etc}
317 var_dir = $${directory:var}
318 project_folder = $${directory:project}
319 runner_home = $${runnerdirectory:home}
320 git_http_backend = ${git:location}/libexec/git-core/git-http-backend
321 cgi_httpd_conf = $${monitor-httpd-configuration-file:rendered}
322
323 [httpd-conf]
324 recipe = slapos.recipe.template:jinja2
325 template = ${template_httpd_conf:location}/${template_httpd_conf:filename}
326 rendered = $${directory:etc}/httpd.conf
327 context =
328     section parameters httpd-parameters
329
330 [cgi-httpd-wrapper]
331 recipe = slapos.cookbook:wrapper
332 apache-executable = ${apache:location}/bin/httpd
333 wrapper-path = $${ca-httpd:executable}
334 command-line = $${:apache-executable} -f $${httpd-conf:rendered} -DFOREGROUND
335
336 #--------------------
337 #--
338 #-- WSGI
339
340 [gunicorn]
341 bin_gunicorn = $${directory:bin}/gunicorn
342 bin_launcher = $${directory:services}/gunicorn
343 path_shell = ${dash:location}/bin/dash
344 socket = $${directory:tmp}/flaskserver.sock
345 path_pid = $${directory:run}/gunicorn.pid
346
347 [gunicorn-launcher]
348 recipe = slapos.cookbook:wrapper
349 command-line = $${gunicorn:bin_gunicorn} slapos.runner:app -p $${gunicorn:path_pid} -b unix:$${gunicorn:socket} -e RUNNER_CONFIG=$${slaprunner:slapos.cfg} --error-logfile $${directory:log}/$${:error-log-file} --log-level error --preload 
350 error-log-file = gunicorn-error.log
351 wrapper-path = $${gunicorn:bin_launcher}
352 environment = PATH=$${environ:PATH}:${git:location}/bin/
353   RUNNER_CONFIG=$${slaprunner:slapos.cfg}
354
355 [gunicorn-graceful]
356 recipe = slapos.cookbook:wrapper
357 command-line = $${directory:bin}/killpidfromfile $${gunicorn:path_pid} SIGHUP
358 wrapper-path = $${directory:scripts}/gunicorn-graceful
359
360 #--------------------
361 #--
362 #-- ssl certificates
363
364 [certificate-authority]
365 recipe = slapos.cookbook:certificate_authority
366 openssl-binary = ${openssl:location}/bin/openssl
367 ca-dir = $${directory:ca-dir}
368 requests-directory = $${cadirectory:requests}
369 wrapper = $${directory:services}/certificate_authority
370 ca-private = $${cadirectory:private}
371 ca-certs = $${cadirectory:certs}
372 ca-newcerts = $${cadirectory:newcerts}
373 ca-crl = $${cadirectory:crl}
374
375 [cadirectory]
376 recipe = slapos.cookbook:mkdirectory
377 requests = $${directory:ca-dir}/requests/
378 private = $${directory:ca-dir}/private/
379 certs = $${directory:ca-dir}/certs/
380 newcerts = $${directory:ca-dir}/newcerts/
381 crl = $${directory:ca-dir}/crl/
382
383 [ca-nginx]
384 <= certificate-authority
385 recipe = slapos.cookbook:certificate_authority.request
386 key-file = $${cadirectory:certs}/nginx_frontend.key
387 cert-file = $${cadirectory:certs}/nginx_frontend.crt
388 executable = $${nginx-launcher:rendered}
389 wrapper = $${directory:services}/nginx-frontend
390 # Put domain name
391 name = example.com
392
393 [ca-shellinabox]
394 <= certificate-authority
395 recipe = slapos.cookbook:certificate_authority.request
396 executable = $${shellinabox:wrapper}
397 wrapper = $${directory:services}/shellinaboxd
398 key-file = $${cadirectory:certs}/shellinabox.key
399 cert-file = $${cadirectory:certs}/shellinabox.crt
400 #--------------------
401 #--
402 #-- Request frontend
403
404 [request-frontend]
405 <= slap-connection
406 recipe = slapos.cookbook:requestoptional
407 name = SlapRunner Frontend
408 # XXX We have hardcoded SR URL here.
409 software-url = http://git.erp5.org/gitweb/slapos.git/blob_plain/HEAD:/software/apache-frontend/software.cfg
410 slave = true
411 config = url domain
412 config-url = $${slaprunner:access-url}
413 config-domain = $${slap-parameter:frontend-domain}
414 return = site_url domain
415
416 [monitor-frontend]
417 <= slap-connection
418 recipe = slapos.cookbook:requestoptional
419 name = Monitor Frontend
420 # XXX We have hardcoded SR URL here.
421 software-url = http://git.erp5.org/gitweb/slapos.git/blob_plain/HEAD:/software/apache-frontend/software.cfg
422 slave = true
423 config = url domain
424 config-url = https://[$${monitor-httpd-configuration:listening-ip}]:$${monitor-parameters:port}
425 config-domain = $${slap-parameter:frontend-domain}
426 return = site_url domain
427
428 #--------------------------------------
429 #--
430 #-- Send informations to SlapOS Master
431
432 [publish-connection-informations]
433 recipe = slapos.cookbook:publish
434 1_info = On your first run, Use "access_url" to setup you account. Then you can use both "url" or "access_url". Or "backend_url" if you want to use ipv6. Set up your account in the webrunner in order to use webdav, and being able to clone your git repositories from the runner.
435 2_info = In order to set up your account, get the recovery-code from the monitoring interface. Before read the notification on monitor_info.
436 backend_url = $${slaprunner:access-url}
437 access_url = $${:url}/login
438 url =  https://$${request-frontend:connection-domain}
439 ssh_command = ssh $${dropbear-runner-server:host} -p $${dropbear-runner-server:port}
440 monitor_url = https://$${monitor-frontend:connection-domain}
441 webdav_url = $${:monitor_url}/share/
442 public_url =  $${:monitor_url}/public/
443 git_public_url =  https://[$${httpd-parameters:global_ip}]:$${httpd-parameters:monitor_port}/git-public/
444 git_private_url = https://[$${httpd-parameters:global_ip}]:$${httpd-parameters:monitor_port}/git/
445
446 #---------------------------
447 #--
448 #-- Deploy promises scripts
449
450 [slaprunner-promise]
451 recipe = slapos.cookbook:check_port_listening
452 path = $${directory:promises}/slaprunner
453 hostname = $${slaprunner:ipv6}
454 port = $${slaprunner:runner_port}
455
456 [slaprunner-frontend-promise]
457 recipe = slapos.cookbook:check_url_available
458 path = $${directory:promises}/slaprunner_frontend
459 url = https://$${request-frontend:connection-domain}/login
460 dash_path = ${dash:location}/bin/dash
461 curl_path = ${curl:location}/bin/curl
462
463 [dropbear-promise]
464 recipe = slapos.cookbook:check_port_listening
465 path = $${directory:promises}/dropbear
466 hostname = $${dropbear-runner-server:host}
467 port = $${dropbear-runner-server:port}
468
469 [shellinabox-promise]
470 recipe = slapos.cookbook:check_port_listening
471 path = $${directory:promises}/shellinabox
472 hostname = $${shellinabox:ipv6}
473 port = $${shellinabox:port}
474
475 [symlinks]
476 recipe = cns.recipe.symlink
477 symlink_target = $${directory:bin}
478 symlink_base = ${buildout:directory}/bin
479
480 [slap-parameter]
481 # Default value if no ssh key is specified
482 user-authorized-key =
483 # Default value of instances number in slaprunner
484 instance-amount = 10
485 debug = false
486 frontend-domain =
487 slapos-repository = http://git.erp5.org/repos/slapos.git
488 slapos-software =
489 slapos-software-type =
490 slapos-reference = master
491 auto-deploy = false
492 auto-deploy-instance = true
493 autorun = false
494 monitor-port = 9684
495
496 [monitor-parameters]
497 port = $${slap-parameter:monitor-port}
498
499 [slapos-cfg]
500 recipe = slapos.recipe.template:jinja2
501 template = ${slapos-cfg-template:location}/${slapos-cfg-template:filename}
502 rendered = $${slaprunner:slapos.cfg}
503 mode = 700
504 context =
505   section slaprunner slaprunner
506
507 [slapos-test-cfg]
508 recipe = slapos.recipe.template:jinja2
509 template = ${slapos-cfg-template:location}/${slapos-cfg-template:filename}
510 rendered = $${test-runner:slapos.cfg}
511 mode = 700
512 context =
513   section slaprunner test-runner
514
515 [shellinabox]
516 recipe = slapos.cookbook:shellinabox
517 ipv6 = $${slap-network-information:global-ipv6}
518 port = 8949
519 shell = $${shell:wrapper}
520 wrapper = $${directory:bin}/shellinaboxd
521 shellinabox-binary = ${shellinabox:location}/bin/shellinaboxd
522 password = $${zero-parameters:shell-password}
523 directory = $${runnerdirectory:home}
524 login-shell = $${directory:bin}/login
525 certificate-directory = $${cadirectory:certs}
526 cert-file = $${ca-shellinabox:cert-file}
527 key-file = $${ca-shellinabox:key-file}
528
529 [shellinabox-code]
530 recipe = slapos.cookbook:generate.password
531 storage-path = $${directory:etc}/.scode
532 bytes = 8
533
534 [shell]
535 recipe = slapos.cookbook:shell
536 wrapper = $${directory:bin}/sh
537 shell = ${bash:location}/bin/bash
538 home = $${runnerdirectory:home}
539 path = $${environ:PATH}:${nano:location}/bin:${vim:location}/bin:${screen:location}/bin:${git:location}/bin
540 ps1 = "\\w> "
541
542 [environ]
543 recipe = collective.recipe.environment
544
545 [slapos-repo]
546 recipe = slapos.recipe.build:gitclone
547 repository = $${slap-parameter:slapos-repository}
548 git-executable = ${git:location}/bin/git
549 develop = true
550 location = $${directory:project}/slapos
551
552 [slapos-repo-config]
553 recipe = plone.recipe.command
554 stop-on-error = true
555 command = cd $${slapos-repo:location} && ${git:location}/bin/git checkout $${slap-parameter:slapos-reference} && SR=$${slap-parameter:slapos-software} && if [ -n "$SR" ] && [ ! -f "$${directory:etc}/.project" ]; then echo workspace/slapos/$${slap-parameter:slapos-software}/ > $${directory:etc}/.project; fi
556 update-command = true
557
558 [prepare-software]
559 recipe = slapos.cookbook:wrapper
560 command-line = ${curl:location}/bin/curl -g https://[$${slaprunner:ipv6}]:$${slaprunner:runner_port}/isSRReady --max-time 1 --insecure
561 wrapper-path = $${directory:scripts}/prepareSoftware
562
563 [cron-entry-prepare-software]
564 <= cron
565 recipe = slapos.cookbook:cron.d
566 name = prepare-software
567 frequency = */2 * * * *
568 command = $${prepare-software:wrapper-path}
569
570 [instance-parameters]
571 recipe = slapos.recipe.template:jinja2
572 extensions = jinja2.ext.do
573 template = ${parameters-template:location}/${parameters-template:filename}
574 rendered = $${directory:etc}/.parameter.xml.default
575 mode = 0644
576 context =
577   key slapparameter_dict slap-configuration:configuration
578
579 [deploy-instance-parameters]
580 recipe = plone.recipe.command
581 stop-on-error = true
582 parameter-xml = $${directory:etc}/.parameter.xml
583 command = if [ ! -f $${:parameter-xml} ]; then cp $${instance-parameters:rendered} $${:parameter-xml}; fi
584
585 [instance-software-type]
586 recipe = plone.recipe.command
587 stop-on-error = true
588 # XXX It should not be named with .xml as it is not xml
589 software-type-path = $${directory:etc}/.software_type.xml
590 command = if [ ! -f $${:software-type-path} -a "$${slap-parameter:slapos-software-type}" != "" ]; then echo "$${slap-parameter:slapos-software-type}" > $${:software-type-path}; fi
591
592 [slap-configuration]
593 recipe = slapos.cookbook:slapconfiguration.serialised
594 computer = $${slap-connection:computer-id}
595 partition = $${slap-connection:partition-id}
596 url = $${slap-connection:server-url}
597 key = $${slap-connection:key-file}
598 cert = $${slap-connection:cert-file}
599
600 [public]
601 shell-password = $${shellinabox-code:passwd}
602 recovery-code = $${recovery-code:passwd}
603
604 [zero-parameters]
605
606
607 [minishell-cwd]
608 recipe = plone.recipe.command
609 command = if [ ! -f $${slaprunner:minishell_cwd_file} ]; then echo $${runnerdirectory:home} > $${slaprunner:minishell_cwd_file}; fi
610 location = $${slaprunner:minishell_cwd_file}
611 stop-on-error = true
612
613 [monitor-current-log-access]
614 < = monitor-directory-access
615 source = $${directory:log}