diff --git a/software/slaprunner/README.txt b/software/slaprunner/README.txt index d103a8006870455f28cf368c54f0e9e68c0e8c56..a9f0a97369f0df0d0f55f64eae9e3e0c5ddeb78c 100644 --- a/software/slaprunner/README.txt +++ b/software/slaprunner/README.txt @@ -127,11 +127,11 @@ Example : Git repositories : ------------------ -It is easy to give access to your git repository/ies to everyone, or to clone it on your own computer. For this, there are 2 urls to remember: - - For read only, you can clone : https://[IPV6]:PORT/git-public/YourRepo.git/ - - For read and write access, using your runner account : https://[IPV6]:PORT/git/YourRepo.git/ +It is easy to give access to your git repository/ies to everyone, or to clone it on your own computer. For this, fetch the git_url parameter returned by your webrunner instance. It should look like that : https://[IPV6]:PORT/git/YourRepo.git/ -To create the repo, go in the folder srv/runner/project and initiate a new git repo (git init/clone --bare XXX). +To create the repo, go to the folder srv/runner/project and initiate a new git repo (git init/clone --bare YourRepo). Then, to clone the repo, just append its name to the previous URL. + +Please notice that your repositories are in public access for reading. However, an account is needed to push to the repository (use your webrunner account, or create a new user in the parameters section of the webrunner). For the moment, the PORT is the port of monitoring, which is 9685. diff --git a/software/slaprunner/common.cfg b/software/slaprunner/common.cfg index d4a0aa1b5830d029c7b3aca7c87bdaf8bf215d83..7afc7eaaea1ef86bedd48b3f9c1b11638e46dbde 100644 --- a/software/slaprunner/common.cfg +++ b/software/slaprunner/common.cfg @@ -43,7 +43,7 @@ mode = 0644 recipe = slapos.recipe.template url = ${:_profile_base_location_}/instance-runner.cfg output = ${buildout:directory}/template-runner.cfg.in -md5sum = 9878115a2969489b57e8563ef3d4d6d3 +md5sum = b5644037da14e79576840975415ee1a4 mode = 0644 [template-runner-import-script] @@ -58,7 +58,7 @@ mode = 0644 recipe = slapos.recipe.template url = ${:_profile_base_location_}/instance-runner-import.cfg.in output = ${buildout:directory}/instance-runner-import.cfg -md5sum = 354ff83819e8379f5e4a2e2985e34e9e +md5sum = a85d054b3e2ae9243d8d188c897dc121 mode = 0644 [template-runner-export-script] @@ -73,13 +73,13 @@ mode = 0644 recipe = slapos.recipe.template url = ${:_profile_base_location_}/instance-runner-export.cfg.in output = ${buildout:directory}/instance-runner-export.cfg -md5sum = 6930a0d6c88896c43a8e60509ba6bd1c +md5sum = 521bad4c571b5b2dc3eee6090802de95 mode = 0644 [template-resilient] recipe = slapos.recipe.download url = ${:_profile_base_location_}/instance-resilient.cfg.jinja2 -md5sum = 1f7332d0b0671929a2de87ef9ce998c8 +md5sum = aec7fb7fe57b48c5c26c7adcdff36d26 filename = instance-resilient.cfg.jinja2 mode = 0644 @@ -87,7 +87,7 @@ mode = 0644 recipe = hexagonit.recipe.download url = ${:_profile_base_location_}/instance-resilient-test.cfg.jinja2 download-only = true -md5sum = abba49f5f397bfe6f6ea5e5dd185b1e9 +md5sum = 01545742e97b4b95cd5e14d5d7cb1584 filename = instance-resilient-test.cfg.jinja2 mode = 0644 @@ -103,7 +103,7 @@ mode = 0644 recipe = hexagonit.recipe.download url = ${:_profile_base_location_}/httpd_conf.in download-only = true -md5sum = 63782f8eaa94af729ec6bba80e062d8f +md5sum = 444399390eb19c7e23dd06593c067b4d filename = httpd_conf.in mode = 0644 @@ -118,13 +118,13 @@ location = ${buildout:parts-directory}/${:_buildout_section_name_} [template-slapos-cfg] recipe = hexagonit.recipe.download url = ${:_profile_base_location_}/template/${:filename} -md5sum = 847df63cf5a226ed338d7ca34b0220b5 +md5sum = ba3721425ba34e265b1f8390ed7196cf location = ${buildout:parts-directory}/${:_buildout_section_name_} filename = slapos.cfg.in download-only = true mode = 0644 -[parameters-template] +[template-parameters] recipe = hexagonit.recipe.download url = ${:_profile_base_location_}/${:filename} md5sum = f8446fcf254b4929eb828a9a1d7e5f62 @@ -133,6 +133,33 @@ filename = parameters.xml.in download-only = true mode = 0644 +[template-bash-profile] +recipe = hexagonit.recipe.download +url = ${:_profile_base_location_}/template/${:filename} +md5sum = 39dc910743c70d5120a778779a052cad +location = ${buildout:parts-directory}/${:_buildout_section_name_} +filename = bash_profile.in +download-only = true +mode = 0644 + +[template-supervisord] +recipe = hexagonit.recipe.download +url = ${:_profile_base_location_}/template/${:filename} +md5sum = af2d78440a358ec268d7ece4fce99ec9 +location = ${buildout:parts-directory}/${:_buildout_section_name_} +filename = supervisord.conf.in +download-only = true +mode = 0644 + +[template-listener-slapgrid] +recipe = hexagonit.recipe.download +url = ${:_profile_base_location_}/template/${:filename} +md5sum = 49d50410cf7467175a841eb7cd0d93d4 +location = ${buildout:parts-directory}/${:_buildout_section_name_} +filename = listener_slapgrid.py.in +download-only = true +mode = 0644 + [eggs] recipe = z3c.recipe.scripts eggs = @@ -152,6 +179,7 @@ eggs = slapos.recipe.build slapos.toolbox[flask_auth] slapos.core + supervisor xml_marshaller Gunicorn @@ -171,3 +199,9 @@ eggs = xml_marshaller pytz slapos.libnetworkcache + +[extra-eggs] +recipe = zc.recipe.egg +interpreter = pythonwitheggs +eggs += + supervisor diff --git a/software/slaprunner/httpd_conf.in b/software/slaprunner/httpd_conf.in index 52f68a2e1419b42837128f914e3a75bb2ee440cb..d70bfa8dd5611d3491779a6b7563e182c325ed2d 100644 --- a/software/slaprunner/httpd_conf.in +++ b/software/slaprunner/httpd_conf.in @@ -21,9 +21,12 @@ LoadModule ssl_module modules/mod_ssl.so LoadModule alias_module modules/mod_alias.so LoadModule env_module modules/mod_env.so LoadModule rewrite_module modules/mod_rewrite.so +LoadModule headers_module modules/mod_headers.so LoadModule log_config_module modules/mod_log_config.so LoadModule dav_module modules/mod_dav.so LoadModule dav_fs_module modules/mod_dav_fs.so +LoadModule cache_module modules/mod_cache.so +LoadModule file_cache_module modules/mod_file_cache.so ErrorLog "{{ parameters.path_error_log }}" LogFormat "%h %l %u %t \"%r\" %>s %b" common @@ -71,17 +74,15 @@ Alias /share {{ parameters.runner_home }} ScriptSock {{ parameters.path_pid }} -SetEnv GIT_PROJECT_ROOT {{ parameters.project_folder }} SetEnv GIT_HTTP_EXPORT_ALL ScriptAlias /git/ {{ parameters.git_http_backend }}/ ScriptAlias /git-public/ {{ parameters.git_http_backend }}/ RewriteCond %{QUERY_STRING} service=git-receive-pack [OR] RewriteCond %{REQUEST_URI} /git-receive-pack$ -RewriteRule ^/git/ - [E=AUTHREQUIRED:yes] -RewriteRule ^/git-public/ - [E=AUTHREQUIRED:yes] -<LocationMatch "^/git-public/"> +<LocationMatch "^/git/"> + SetEnv GIT_PROJECT_ROOT:{{- parameters.project_private_folder -}} Order Deny,Allow Deny from env=AUTHREQUIRED @@ -89,10 +90,10 @@ RewriteRule ^/git-public/ - [E=AUTHREQUIRED:yes] AuthName "Git Access" AuthUserFile "{{ parameters.etc_dir }}/.htpasswd" Require valid-user - Satisfy any </LocationMatch> -<LocationMatch "^/git/"> +<LocationMatch "^/git-public/"> + SetEnv GIT_PROJECT_ROOT:{{- parameters.project_public_folder -}} Order Deny,Allow Deny from env=AUTHREQUIRED @@ -100,6 +101,7 @@ RewriteRule ^/git-public/ - [E=AUTHREQUIRED:yes] AuthName "Git Access" AuthUserFile "{{ parameters.etc_dir }}/.htpasswd" Require valid-user + Satisfy any </LocationMatch> include {{ parameters.cgi_httpd_conf }} diff --git a/software/slaprunner/instance-resilient-test.cfg.jinja2 b/software/slaprunner/instance-resilient-test.cfg.jinja2 index 01260e54534f396f0cfbc1a5c7eef8530fa3b640..5cd1f347827d795ab5a132a49247815c7546c4f8 100644 --- a/software/slaprunner/instance-resilient-test.cfg.jinja2 +++ b/software/slaprunner/instance-resilient-test.cfg.jinja2 @@ -42,7 +42,7 @@ software-url = ${slap-connection:software-release-url} software-type = resilient name = Resilient Instance (Root Instance) {% set cluster_parameter_dict = slapparameter_dict.get('cluster', {}) -%} -config = resiliency-backup-periodicity {{ cluster_parameter_dict.keys() | join(' ') }} +config = resiliency-backup-periodicity resilient-clone-number {{ cluster_parameter_dict.keys() | join(' ') }} {% for key, value in cluster_parameter_dict.items() -%} config-{{ key }} = {{ dumps(value) }} {% endfor -%} diff --git a/software/slaprunner/instance-resilient.cfg.jinja2 b/software/slaprunner/instance-resilient.cfg.jinja2 index 07ddb7f3b9f5ea4960d7001213ea6fdaa30682c8..4431627e9fe2f1c3937a5b55d8c9cbc5772275d0 100644 --- a/software/slaprunner/instance-resilient.cfg.jinja2 +++ b/software/slaprunner/instance-resilient.cfg.jinja2 @@ -28,7 +28,7 @@ parts += # Bubble up the parameters [request-runner] -return = url ssh-public-key ssh-url notification-id ip backend_url url ssh_command access_url 1_info 2_info monitor_url webdav_url public_url +return = url ssh-public-key ssh-url notification-id ip backend_url url ssh_command access_url 1_info 2_info monitor_url webdav_url public_url git_public_url git_private_url [publish-connection-informations] recipe = slapos.cookbook:publish @@ -41,6 +41,8 @@ ssh_command = ${request-runner:connection-ssh_command} monitor_url = ${request-runner:connection-monitor_url} webdav_url = ${request-runner:connection-webdav_url} public_url = ${request-runner:connection-public_url} +git_public_url = ${request-runner:connection-git_public_url} +git_private_url = ${request-runner:connection-git_private_url} [slap-parameter] # Default parameters for distributed deployment diff --git a/software/slaprunner/instance-runner-export.cfg.in b/software/slaprunner/instance-runner-export.cfg.in index 4eddb63c85b57e33bcc918fec0b82a173bfb548d..dd91a76f03ffc59856db36c4bbafab8d61dc8426 100644 --- a/software/slaprunner/instance-runner-export.cfg.in +++ b/software/slaprunner/instance-runner-export.cfg.in @@ -27,6 +27,7 @@ parts += cron-entry-prepare-software deploy-instance-parameters minishell-cwd + supervisord-wrapper ## Monitoring part ###Parts to add for monitoring cron @@ -45,6 +46,7 @@ parts += cgi-httpd-graceful-wrapper monitor-promise monitor-instance-log-access + bash-profile ## Monitor for runner monitor-current-log-access monitor-check-resilient-feed-file diff --git a/software/slaprunner/instance-runner-import.cfg.in b/software/slaprunner/instance-runner-import.cfg.in index d37e2e813895260c82fa6767513b415205adf8e2..8bdd41276af1500c3547b535d4892633a562b507 100644 --- a/software/slaprunner/instance-runner-import.cfg.in +++ b/software/slaprunner/instance-runner-import.cfg.in @@ -24,6 +24,8 @@ parts += cron-entry-prepare-software deploy-instance-parameters instance-software-type + bash-profile + supervisord-wrapper # have to repeat the next one, as it's not inherited from pbsready-import import-on-notification ## Monitoring part @@ -82,4 +84,4 @@ rendered = $${monitor-directory:monitoring-cgi}/latest-restored-backup template = ${template-wrapper:output} mode = 744 context = - key content :command \ No newline at end of file + key content :command diff --git a/software/slaprunner/instance-runner.cfg b/software/slaprunner/instance-runner.cfg index e657fe1c6adb8816b2739d41d47f78ba4519e80a..421c4b4745b7315acac8f6d943502e6085ba5d40 100644 --- a/software/slaprunner/instance-runner.cfg +++ b/software/slaprunner/instance-runner.cfg @@ -24,6 +24,9 @@ parts = deploy-instance-parameters instance-software-type minishell-cwd + bash-profile + supervisord-wrapper + supervisord-promise {% if slapparameter_dict.get('custom-frontend-backend-url') %} custom-frontend-promise {% endif %} @@ -136,6 +139,8 @@ project-test = $${:test}/project software-test = $${:test}/software instance-test = $${:test}/instance sessions = $${buildout:directory}/.sessions +private-project = $${:home}/.git-private +public-project = $${:home}/.git-public #Create password recovery code for slaprunner [recovery-code] @@ -155,8 +160,7 @@ working-directory = $${runnerdirectory:home} project-directory = $${runnerdirectory:project} instance_root = $${runnerdirectory:instance-root} software_root = $${runnerdirectory:software-root} -#XXX-Nico hardcoded default port because overridden by this buildout config -instance-monitor-url = https://[$${:ipv6}]:9685 +instance-monitor-url = https://[$${:ipv6}]:$${monitor-parameters:port} etc_dir = $${directory:etc} log_dir = $${directory:log} run_dir = $${directory:run} @@ -173,6 +177,7 @@ wrapper = $${directory:services}/slaprunner debug = $${slap-parameter:debug} access-url = https://[$${:ipv6}]:$${:runner_port} supervisord_config = $${directory:etc}/supervisord.conf +supervisord_server = http://$${supervisord:server} proxy_database = $${slaprunner:working-directory}/proxy.db console = False verbose = False @@ -183,6 +188,8 @@ autorun = $${slap-parameter:autorun} knowledge0_file = $${buildout:directory}/$${public:filename} minishell_cwd_file = $${directory:etc}/.minishell-cwd minishell_history_file = $${directory:etc}/.minishell_history +software_info_json = $${runnerdirectory:home}/software_info.json +instance_info_json = $${runnerdirectory:home}/instance_info.json [test-runner] <= slaprunner @@ -219,7 +226,7 @@ keygen-binary = ${dropbear:location}/bin/dropbearkey recipe = slapos.cookbook:dropbear host = $${slap-network-information:global-ipv6} port = 22222 -home = $${directory:ssh} +home = $${buildout:directory} wrapper = $${directory:bin}/runner_sshd shell = ${bash:location}/bin/bash rsa-keyfile = $${directory:ssh}/server_key.rsa @@ -316,6 +323,8 @@ dav_lock = $${directory:var}/DavLock etc_dir = $${directory:etc} var_dir = $${directory:var} project_folder = $${directory:project} +project_private_folder = $${runnerdirectory:private-project} +project_public_folder = $${runnerdirectory:public-project} runner_home = $${runnerdirectory:home} git_http_backend = ${git:location}/libexec/git-core/git-http-backend cgi_httpd_conf = $${monitor-httpd-configuration-file:rendered} @@ -351,6 +360,7 @@ error-log-file = gunicorn-error.log wrapper-path = $${gunicorn:bin_launcher} environment = PATH=$${environ:PATH}:${git:location}/bin/ RUNNER_CONFIG=$${slaprunner:slapos.cfg} + LANG=en_GB.UTF-8 [gunicorn-graceful] recipe = slapos.cookbook:wrapper @@ -440,7 +450,7 @@ ssh_command = ssh $${dropbear-runner-server:host} -p $${dropbear-runner-server:p monitor_url = https://$${monitor-frontend:connection-domain} webdav_url = $${:monitor_url}/share/ public_url = $${:monitor_url}/public/ -git_public_url = https://[$${httpd-parameters:global_ip}]:$${httpd-parameters:monitor_port}/git-public/ +git_public_url = https://[$${httpd-parameters:global_ip}]:$${httpd-parameters:monitor_port}/git-public/ git_private_url = https://[$${httpd-parameters:global_ip}]:$${httpd-parameters:monitor_port}/git/ #--------------------------- @@ -459,6 +469,7 @@ path = $${directory:promises}/slaprunner_frontend url = https://$${request-frontend:connection-domain}/login dash_path = ${dash:location}/bin/dash curl_path = ${curl:location}/bin/curl +check-secure = 1 [dropbear-promise] recipe = slapos.cookbook:check_port_listening @@ -570,7 +581,7 @@ command = $${prepare-software:wrapper-path} [instance-parameters] recipe = slapos.recipe.template:jinja2 extensions = jinja2.ext.do -template = ${parameters-template:location}/${parameters-template:filename} +template = ${template-parameters:location}/${template-parameters:filename} rendered = $${directory:etc}/.parameter.xml.default mode = 0644 context = @@ -610,6 +621,78 @@ command = if [ ! -f $${slaprunner:minishell_cwd_file} ]; then echo $${runnerdire location = $${slaprunner:minishell_cwd_file} stop-on-error = true +[bash-profile] +recipe = slapos.recipe.template:jinja2 +template = ${template-bash-profile:location}/${template-bash-profile:filename} +rendered = $${buildout:directory}/.bash_profile +context = + raw path $PATH:${nano:location}/bin:${vim:location}/bin:${screen:location}/bin:${git:location}/bin:${curl:location}/bin:${python2.7:location}/bin + key workdir runnerdirectory:home + +[supervisord] +autorestart = false +autostart = false +directory = $${buildout:directory} +exitcodes = 0 +logfile = $${directory:log}/supervisord.log +no_logfile = NONE +numprocs = 1 +path = $${environ:PATH} +pidfile = $${directory:run}/supervisord.pid +server = $${slaprunner:ipv4}:$${:port} +port = 39986 +slapgrid-cp = slapgrid-cp +slapgrid-cp-command = $${slaprunner:slapos} node instance --all --cfg $${slaprunner:slapos.cfg} --pidfile $${:slapgrid-cp-pid} --verbose --logfile $${:slapgrid-cp-log} +slapgrid-cp-log = $${runnerdirectory:home}/instance.log +slapgrid-cp-pid = $${directory:run}/slapgrid-cp.pid +slapgrid-cp-startretries = 0 +slapgrid-sr = slapgrid-sr +slapgrid-sr-command = $${slaprunner:slapos} node software --all --cfg $${slaprunner:slapos.cfg} --pidfile $${:slapgrid-sr-pid} --verbose --logfile $${:slapgrid-sr-log} +slapgrid-sr-log = $${runnerdirectory:home}/software.log +slapgrid-sr-pid = $${directory:run}/slapgrid-sr.pid +slapgrid-sr-startretries = 0 +slapproxy = slapproxy +slapproxy-autorestart = true +slapproxy-autostart = true +slapproxy-startsecs = 1 +slapproxy-command = $${slaprunner:slapos} proxy start --logfile $${:slapproxy-log} --cfg $${slaprunner:slapos.cfg} +slapproxy-log = $${directory:log}/slapproxy.log +socket_name = unix://$${:socket_path} +socket_path = $${directory:tmp}/supervisord.sock +startsecs = 0 +# This file logs errors from listeners. Supervisord has its own logfile. +# Processes should handle their logs by themselves +stderr_logfile = $${directory:log}/supervisord-errors.log + +[supervisord-conf] +recipe = slapos.recipe.template:jinja2 +template = ${template-supervisord:location}/${template-supervisord:filename} +rendered = $${directory:etc}/supervisord.conf +context = + section supervisord supervisord + key listener_slapgrid listener-slapgrid-bin:rendered + +[listener-slapgrid-bin] +recipe = slapos.recipe.template:jinja2 +template = ${template-listener-slapgrid:location}/${template-listener-slapgrid:filename} +rendered = $${directory:bin}/listener_slapgrid.py +mode = 0744 +context = + section supervisord supervisord + section slaprunner slaprunner + raw python_executable ${buildout:directory}/bin/${extra-eggs:interpreter} + +[supervisord-wrapper] +recipe = slapos.cookbook:wrapper +command-line = $${buildout:directory}/bin/supervisord -c $${supervisord-conf:rendered} --nodaemon +wrapper-path = $${directory:services}/supervisord + +[supervisord-promise] +recipe = slapos.cookbook:check_port_listening +path = $${directory:promises}/supervisord +hostname = $${slaprunner:ipv4} +port = $${supervisord:port} + [monitor-current-log-access] < = monitor-directory-access source = $${directory:log} diff --git a/software/slaprunner/software.cfg b/software/slaprunner/software.cfg index 181b16ae9c90858374195aeb0cf7c8629b22f862..c0294046c3931aa3f6f1b8355325c6cc292fe70d 100644 --- a/software/slaprunner/software.cfg +++ b/software/slaprunner/software.cfg @@ -21,9 +21,12 @@ gunicorn = 19.1.0 plone.recipe.command = 1.1 pycrypto = 2.6.1 rdiff-backup = 1.0.5 +slapos.core = 1.0.5 slapos.recipe.build = 0.12 slapos.recipe.download = 1.0.dev-r4053 -slapos.toolbox = 0.39.3 +slapos.toolbox = 0.40.1 +slapos.recipe.template = 2.5 +supervisor = 3.1.1 smmap = 0.8.2 z3c.recipe.scripts = 1.0.1 @@ -46,3 +49,5 @@ feedparser = 5.1.3 # Required by: # slapos.toolbox==0.39.3 paramiko = 1.14.1 + +Jinja2 = 2.7.3 diff --git a/software/slaprunner/template/bash_profile.in b/software/slaprunner/template/bash_profile.in new file mode 100644 index 0000000000000000000000000000000000000000..6076e688896e66927f5cb29531a0ec16a76503bc --- /dev/null +++ b/software/slaprunner/template/bash_profile.in @@ -0,0 +1,8 @@ +# Beware, this file is automatically processed by slapgrid +# Do not modify it, your changes will be lost +# If you want to load your custom bash configuration, please use a .bashrc file + +cd {{ workdir }} +export PATH={{- path }} +export PS1="\w $ " +export LANG="en_GB.UTF-8" diff --git a/software/slaprunner/template/listener_slapgrid.py.in b/software/slaprunner/template/listener_slapgrid.py.in new file mode 100644 index 0000000000000000000000000000000000000000..3fa465311ae229ecac9777489ae704d2fb76d71a --- /dev/null +++ b/software/slaprunner/template/listener_slapgrid.py.in @@ -0,0 +1,44 @@ +#!{{ python_executable }} + +import datetime +import json +import sys +import xmlrpclib + +from supervisor import childutils + + +def write_stdout(s): + sys.stdout.write(s) + sys.stdout.flush() + +def write_stderr(s): + sys.stderr.write(s) + sys.stderr.flush() + + +def write_slapgrid_result(process): + server = xmlrpclib.Server("http://{{- supervisord['server'] -}}") + # Tuple of tuples containing 2 elements : process name and the path of its info file + json_files = dict([("slapgrid-sr", "{{- slaprunner['software_info_json'] -}}"), + ("slapgrid-cp", "{{- slaprunner['instance_info_json'] -}}")]) + info = server.supervisor.getProcessInfo(process) + result = dict() + result['last_build'] = datetime.datetime.fromtimestamp(info['stop']).strftime("%Y-%m-%d %H:%M:%S") + result['success'] = info['exitstatus'] + open(json_files[process], 'w').write(json.dumps(result)) + + +def main(): + while 1: + headers, payload = writer.wait() + try: + processname = dict(x.split(':') for x in payload.split())['processname'] + write_slapgrid_result(processname) + except: + pass + writer.ok() + +if __name__ == '__main__': + writer = childutils.EventListenerProtocol() + main() diff --git a/software/slaprunner/template/slapos.cfg.in b/software/slaprunner/template/slapos.cfg.in index a73143b968c9995370c3319ebcb680493bc2b2ab..8e741311f19a58a962e8fb30ac9fac985b51bbb1 100644 --- a/software/slaprunner/template/slapos.cfg.in +++ b/software/slaprunner/template/slapos.cfg.in @@ -15,6 +15,7 @@ slapos_cfg = {{ slaprunner['slapos.cfg'] }} slapproxy = {{ slaprunner['slapproxy'] }} supervisor = {{ slaprunner['supervisor'] }} supervisord_config = {{ slaprunner['supervisord_config'] }} +supervisord_server = {{ slaprunner['supervisord_server'] }} runner_workdir = {{ slaprunner['working-directory'] }} runner_host = {{ slaprunner['ipv4'] }} runner_port = {{ slaprunner['runner_port'] }} diff --git a/software/slaprunner/template/supervisord.conf.in b/software/slaprunner/template/supervisord.conf.in new file mode 100644 index 0000000000000000000000000000000000000000..0fa1590988a307deeeb2ce4e3ea64e139401a78a --- /dev/null +++ b/software/slaprunner/template/supervisord.conf.in @@ -0,0 +1,62 @@ +[unix_http_server] +file = {{ supervisord['socket_path'] }} + +[supervisorctl] +serverurl = {{ supervisord['socket_name'] }} + +[inet_http_server] +port = {{ supervisord['server'] }} + +[supervisord] +logfile = {{ supervisord['logfile'] }} +pidfile = {{ supervisord['pidfile'] }} + +[rpcinterface:supervisor] +supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface + +[program:{{- supervisord['slapgrid-sr'] -}}] +command = {{ supervisord['slapgrid-sr-command'] }} +process_name = {{ supervisord['slapgrid-sr'] }} +numprocs = {{ supervisord['numprocs'] }} +autostart = {{ supervisord['autostart'] }} +exitcodes = {{ supervisord['exitcodes'] }} +startretries = {{ supervisord['slapgrid-sr-startretries'] }} +startsecs = {{ supervisord['startsecs'] }} +autorestart = {{ supervisord['autorestart'] }} +stdout_logfile = {{ supervisord['no_logfile'] }} +stderr_logfile = {{ supervisord['no_logfile'] }} +directory = {{ supervisord['directory'] }} +environment = PATH="{{- supervisord['path'] -}}" + +[program:{{- supervisord['slapgrid-cp'] -}}] +command = {{ supervisord['slapgrid-cp-command'] }} +process_name = {{ supervisord['slapgrid-cp'] }} +numprocs = {{ supervisord['numprocs'] }} +autostart = {{ supervisord['autostart'] }} +exitcodes = {{ supervisord['exitcodes'] }} +startretries = {{ supervisord['slapgrid-cp-startretries'] }} +startsecs = {{ supervisord['startsecs'] }} +autorestart = {{ supervisord['autorestart'] }} +stdout_logfile = {{ supervisord['no_logfile'] }} +stderr_logfile = {{ supervisord['no_logfile'] }} +directory = {{ supervisord['directory'] }} +environment = PATH="{{- supervisord['path'] -}}" + +[program:{{- supervisord['slapproxy'] -}}] +command = {{ supervisord['slapproxy-command'] }} +process_name = {{ supervisord['slapproxy'] }} +numprocs = {{ supervisord['numprocs'] }} +autostart = {{ supervisord['slapproxy-autostart'] }} +startsecs = {{ supervisord['slapproxy-startsecs'] }} +exitcodes = {{ supervisord['exitcodes'] }} +autorestart = {{ supervisord['slapproxy-autorestart'] }} +stdout_logfile = {{ supervisord['no_logfile'] }} +stderr_logfile = {{ supervisord['no_logfile'] }} +directory = {{ supervisord['directory'] }} +environment = PATH="{{- supervisord['path'] -}}" + +[eventlistener:listener-slapgrid] +command = {{ listener_slapgrid }} +events = PROCESS_STATE_EXITED +stdout_logfile = {{ supervisord['no_logfile'] }} +stderr_logfile = {{ supervisord['stderr_logfile'] }} diff --git a/stack/monitor/buildout.cfg b/stack/monitor/buildout.cfg index 9c389aabc797b829638e5b3086c14861f6bc5922..76984e6c8056333292c42d22a9cdb2f266ea7cd3 100644 --- a/stack/monitor/buildout.cfg +++ b/stack/monitor/buildout.cfg @@ -49,7 +49,7 @@ recipe = hexagonit.recipe.download url = ${:_profile_base_location_}/${:filename} download-only = true md5sum = cb2f15850d3dc82459a0044adb4416cf -destination = ${buildout:directory}/parts/monitor-template-monitor-bin +destination = ${buildout:parts-directory}/monitor-template-monitor-bin filename = monitor.py.in mode = 0644 @@ -66,7 +66,7 @@ recipe = hexagonit.recipe.download url = ${:_profile_base_location_}/webfile-directory/${:filename} download-only = true md5sum = e759977b21c70213daa4c2701f2c2078 -destination = ${buildout:directory}/parts/monitor-index +destination = ${buildout:parts-directory}/monitor-index filename = index.cgi.in mode = 0644 @@ -74,7 +74,7 @@ mode = 0644 recipe = hexagonit.recipe.download url = ${:_profile_base_location_}/webfile-directory/${:filename} download-only = true -destination = ${buildout:directory}/parts/monitor-template-index +destination = ${buildout:parts-directory}/monitor-template-index md5sum = 7400c8cfa16a15a0d41f512b8bbb1581 filename = index.html.jinja2 mode = 0644 @@ -84,7 +84,7 @@ recipe = hexagonit.recipe.download url = ${:_profile_base_location_}/webfile-directory/${:filename} download-only = true md5sum = e43d79bec8824265e22df7960744113a -destination = ${buildout:directory}/parts/monitor-template-status-cgi +destination = ${buildout:parts-directory}/monitor-template-status-cgi filename = status.cgi.in mode = 0644 @@ -93,7 +93,7 @@ recipe = hexagonit.recipe.download url = ${:_profile_base_location_}/webfile-directory/${:filename} download-only = true #md5sum = 4fb26753ee669b8ac90ffe33dbd12e8f -destination = ${buildout:directory}/parts/monitor-template-status-history-cgi +destination = ${buildout:parts-directory}/monitor-template-status-history-cgi filename = status-history.cgi.in mode = 0644 @@ -102,7 +102,7 @@ recipe = hexagonit.recipe.download url = ${:_profile_base_location_}/webfile-directory/${:filename} download-only = true md5sum = b4cef123a3273e848e8fe496e22b20a8 -destination = ${buildout:directory}/parts/monitor-template-settings-cgi +destination = ${buildout:parts-directory}/monitor-template-settings-cgi filename = settings.cgi.in mode = 0644 @@ -111,7 +111,7 @@ recipe = hexagonit.recipe.download url = ${:_profile_base_location_}/webfile-directory/${:filename} download-only = true md5sum = c7ba7ecb09d0d1d24e7cb73a212cc33f -destination = ${buildout:directory}/parts/monitor-template-monitor-password-cgi +destination = ${buildout:parts-directory}/monitor-template-monitor-password-cgi filename = monitor-password.cgi.in mode = 0644 @@ -120,7 +120,7 @@ recipe = hexagonit.recipe.download url = ${:_profile_base_location_}/${:filename} download-only = true md5sum = 5f1b93ccdea7c3031aef396154c64938 -destination = ${buildout:directory}/parts/monitor-template-rss-bin +destination = ${buildout:parts-directory}/monitor-template-rss-bin filename = status2rss.py mode = 0644 @@ -136,7 +136,7 @@ recipe = hexagonit.recipe.download url = http://git.erp5.org/gitweb/slapos.git/snapshot/930be99041ea26b7b1186830e5eb56ef0acc1bdf.tar.gz download-only = false filename = monitor-static.tar.gz -destination = ${buildout:directory}/parts/monitor-static-files +destination = ${buildout:parts-directory}/monitor-static-files ignore-existing = true strip-top-level-dir = true mode = 0644