[buildout] extends = template-runner.cfg ${pbsready-import:output} parts += nginx_conf nginx-launcher certificate-authority ca-nginx gunicorn-launcher gunicorn-graceful slaprunner-promise slaprunner-supervisord-wrapper runner-sshd-add-authorized-key runner-sshd-graceful runner-sshd-promise runner-sshkeys-authority runner-sshkeys-sshd runtestsuite shellinabox symlinks slapos-cfg cron-entry-prepare-software deploy-instance-parameters instance-software-type bash-profile supervisord-wrapper importer-consistency-promise software-release-deployment-promise resilient-software-release-information # have to repeat the next one, as it's not inherited from pbsready-import import-on-notification monitor-base # For the needs of importer, we run the full slaprunner # In case both exporter and importer (aka main instance and clone instance) # run with the same IP (usually for testing purposes), # run slaprunner using different ports. [proxy-free-port] recipe = slapos.cookbook:free_port minimum = 49990 maximum = 49999 ip = $${slap-network-information:local-ipv4} [runner-free-port] recipe = slapos.cookbook:free_port minimum = 50015 maximum = 50024 ip = $${slap-network-information:global-ipv6} [slaprunner] proxy_port = $${proxy-free-port:port} runner_port = $${runner-free-port:port} [supervisord-free-port] recipe = slapos.cookbook:free_port minimum = 39996 maximum = 40005 ip = $${slaprunner:ipv4} [supervisord] port = $${supervisord-free-port:port} [runner-sshd-port] minimum = 22232 maximum = 22241 # Deactivate the call to prepareSoftware, and let the importer script # handle the build&run of the instance. [cron-entry-prepare-software] recipe = [importer] recipe = slapos.recipe.template:jinja2 template = ${template-runner-import-script:location}/${template-runner-import-script:filename} rendered = $${directory:bin}/$${slap-parameter:namebase}-importer # backward compatibility for resilient stack wrapper = $${:rendered} mode = 700 restore-exit-code-file = $${directory:srv}/$${:restore-exit-code-file-basename} restore-exit-code-file-basename = importer-exit-code-file restore-error-message-file = $${directory:srv}/$${:restore-error-message-file-basename} restore-error-message-file-basename = importer-error-message-file resilient-log-basename = resilient.log context = key backend_url slaprunner:access-url key ipv4 slaprunner:ipv4 key ipv6 slaprunner:ipv6 key proxy_port slaprunner:proxy_port section directory directory section supervisord supervisord raw output_log_file $${directory:log}/$${:resilient-log-basename} raw shell_binary ${bash:location}/bin/bash raw rsync_binary ${rsync:location}/bin/rsync raw restore_exit_code_file $${:restore-exit-code-file} raw restore_error_message_file $${:restore-error-message-file} [importer-consistency-promise] # Test that the importer script and "after-import" subscripts # are not older than 2 days (1 day + some slack), and have succeeded recipe = collective.recipe.template input = inline: #!/bin/sh EXIT_CODE_FILE="$${importer:restore-exit-code-file}" RECENT_EXIT_CODE_FILE=$(find $${directory:srv} -maxdepth 1 -name "$${importer:restore-exit-code-file-basename}" -mtime -2) RESILIENT_LOG_URL=$${publish:monitor-base-url}/log/$${importer:resilient-log-basename} if [ ! -f "$EXIT_CODE_FILE" ]; then exit 0; else if [ -z "$RECENT_EXIT_CODE_FILE" ]; then echo "Consistency check is too old."; exit 1; else cat $${importer:restore-error-message-file} echo "More information can be found here : $RESILIENT_LOG_URL"; exit $(cat $EXIT_CODE_FILE); fi fi exit 1; # Something else went wrong output = $${directory:promises}/importer-consistency-promise mode = 755 [software-release-deployment-promise] recipe = collective.recipe.template input = inline: #!/bin/sh PROJECT_FILE=$(find "$${directory:etc}" -maxdepth 1 -name .project) if [ -z "$PROJECT_FILE" ]; then exit 0; else INSTALLATION_FILE=$(find "$${runnerdirectory:software-root}" -mindepth 2 -maxdepth 2 -name .completed) if [ -n "$INSTALLATION_FILE" ]; then exit 0; else exit 1; fi fi exit 1 output = $${directory:promises}/software-release-deployment-promise mode = 755 [resilient-software-release-information] recipe = slapos.recipe.template url = ${template-resilient-software-release-information:destination}/${template-resilient-software-release-information:filename} output = $${directory:cgi-bin}/resilient_software_release_information.py resilient-log-url = $${publish:monitor-base-url}/log/$${importer:resilient-log-basename} mode = 0600 [slap-parameter] auto-deploy-instance = false auto-deploy = true name = Webrunner import monitor-cors-domains = monitor-username = $${monitor-htpasswd:username} monitor-password = $${monitor-htpasswd:passwd} [resilient-publish-connection-parameter] monitor-base-url = $${publish:monitor-base-url} monitor-url = $${publish:monitor-url} monitor-user = $${publish:monitor-user} monitor-password = $${publish:monitor-password} [monitor-instance-parameter] monitor-httpd-port = 8360 #monitor-title = $${slap-parameter:name} #cors-domains = $${slap-parameter:monitor-cors-domains} #username = $${slap-parameter:monitor-username} #password = $${slap-parameter:monitor-password} # Pass some parameter to dispay in monitoring interface instance-configuration = raw takeover-url http://[$${resilient-web-takeover-httpd-configuration-file:listening-ip}]:$${resilient-web-takeover-httpd-configuration-file:listening-port}/ raw takeover-password $${resilient-web-takeover-password:passwd} [monitor-conf-parameters] private-path-list += $${directory:logrotate-backup}