Commit 1f3f40b3 authored by Hardik Juneja's avatar Hardik Juneja

stack: Make monitor apache optional using a slap parameter

parent 823ba86d
......@@ -15,11 +15,11 @@
# not need these here).
[template]
filename = instance.cfg
md5sum = 713db528880282d568278f09458d2aab
md5sum = 73c7bd7dec7f874e8423d0ff4eba9427
[template-runner]
filename = instance-runner.cfg
md5sum = 8f49df215a1596efcec94e2cca009711
md5sum = c531ca046e137459d6cccb261eb7e540
[template-runner-import-script]
filename = template/runner-import.sh.jinja2
......
......@@ -41,7 +41,7 @@ parts =
## Usability part
template-slapuser-script
extends = ${monitor2-template:rendered}
extends = {{template_monitor}}
eggs-directory = ${buildout:eggs-directory}
develop-eggs-directory = ${buildout:develop-eggs-directory}
......
......@@ -30,6 +30,7 @@ context = key buildout buildout:bin-directory
raw curl_executable_location ${curl:location}/bin/curl
raw dash_executable_location ${dash:location}/bin/dash
raw dcron_executable_location ${dcron:location}/sbin/crond
raw template_monitor ${instance-monitor:rendered}
mode = 0644
[instance-resilient]
......@@ -78,6 +79,13 @@ context =
raw pbsready_import_template_path ${pbsready-import:output}
raw software_release_information_template ${template-resilient-software-release-information:destination}/${template-resilient-software-release-information:filename}
[instance-monitor]
recipe = slapos.recipe.template:jinja2
template = $monitor2-template:output
rendered = ${buildout:directory}/template-monitor.cfg
extensions = jinja2.ext.do
mode = 0644
[slap-configuration]
recipe = slapos.cookbook:slapconfiguration
computer = $${slap-connection:computer-id}
......
......@@ -301,7 +301,7 @@ context =
key template_kumofs template-kumofs:target
key template_mariadb template-mariadb:target
key template_mariadb_initial_setup template-mariadb-initial-setup:target
key template_monitor monitor2-template:rendered
key template_monitor monitor2-template:output
key template_my_cnf template-my-cnf:target
key template_postfix template-postfix:target
key template_postfix_aliases template-postfix-aliases:target
......
......@@ -23,15 +23,15 @@ md5sum = dc974bd74cf967ae6250d81322629c44
[template-mariadb]
filename = instance-mariadb.cfg.in
md5sum = 2126e64bc70893500dc24c29770e84c8
md5sum = 37bbcfb4bb2fa96c14821d2e36e1386a
[template-kumofs]
filename = instance-kumofs.cfg.in
md5sum = 091d3c3feb2d543d176b0fadb11c07dc
md5sum = 0d9e3cec640e863aa860ccb6941fb8cc
[template-cloudooo]
filename = instance-cloudoo.cfg.in
md5sum = 76f9e8c8cdc352081e34539d8fc17026
md5sum = f12bbf6c9aca8eb1accf6c95df165716
[template-zope-conf]
filename = zope.conf.in
......@@ -75,7 +75,7 @@ md5sum = 0969fbb25b05c02ef3c2d437b2f4e1a0
[template]
filename = instance.cfg.in
md5sum = e364ea67bfe786b6b6ebd6c4f0cd628a
md5sum = afc12c2d14876705b47cd219a65dcc31
[monitor-template-dummy]
filename = dummy.cfg
......@@ -87,11 +87,11 @@ md5sum = 03983ea97d53e40bf3caf3d6744e1137
[template-zeo]
filename = instance-zeo.cfg.in
md5sum = d1f33d406d528ae27d973e2dd0efb1ba
md5sum = 0da85c80c47b5f05a2cbd3b0bf0b111d
[template-zope]
filename = instance-zope.cfg.in
md5sum = a2377d5c53fd2a441ea713b428e4844b
md5sum =
[template-balancer]
filename = instance-balancer.cfg.in
......
{% set bin_directory = parameter_dict['buildout-bin-directory'] -%}
{% set use_ipv6 = slapparameter_dict.get('use-ipv6', False) -%}
{% set monitor_dict = slapparameter_dict.get('monitor', {}) %}
[buildout]
extends =
{{ parameter_dict['template-monitor'] }}
......
......@@ -8,6 +8,7 @@
{% set jupyter_dict = slapparameter_dict.get('jupyter', {}) -%}
{% set has_jupyter = jupyter_dict.get('enable', jupyter_enable_default.lower() in ('true', 'yes')) -%}
{% set jupyter_zope_family = jupyter_dict.get('zope-family', '') -%}
{% set monitor_dict = slapparameter_dict.get('monitor', {}) %}
{% set monitor_base_url_dict = {} -%}
{% set caucase_url = slapparameter_dict.get('caucase', {}).pop('url', '') -%}
{% set crl_update_period = slapparameter_dict.get('caucase', {}).pop('crl-update-periodicity', 'daily') -%}
......
{% set use_ipv6 = slapparameter_dict.get('use-ipv6', False) -%}
{% set monitor_dict = slapparameter_dict.get('monitor', {}) %}
[buildout]
extends =
{{ logrotate_cfg }}
......
......@@ -17,6 +17,7 @@
{% set ip = (ipv4_set | list)[0] -%}
{% endif -%}
{% set dash = parameter_dict['dash-location'] ~ '/bin/dash' %}
{% set monitor_dict = slapparameter_dict.get('monitor', {}) %}
[{{ section('publish') }}]
recipe = slapos.cookbook:publish.serialised
......
......@@ -7,6 +7,7 @@
{% set default_zodb_path = buildout_directory ~ '/srv/zodb' -%}
{% set default_backup_path = buildout_directory ~ '/srv/backup/zodb' -%}
{% set bin_directory = parameter_dict['buildout-bin-directory'] -%}
{% set monitor_dict = slapparameter_dict.get('monitor', {}) %}
[zeo-base]
recipe = slapos.cookbook:zeo
......
......@@ -10,6 +10,7 @@
{% set longrequest_logger_base_path = buildout_directory ~ '/var/log/longrequest_logger_' -%}
{% macro section(name) %}{% do part_list.append(name) %}{{ name }}{% endmacro -%}
{% set bin_directory = parameter_dict['buildout-bin-directory'] -%}
{% set monitor_dict = slapparameter_dict.get('monitor', {}) %}
{#
XXX: This template only supports exactly one IPv4 and one IPv6 per
partition. No more (undefined result), no less (IndexError).
......
......@@ -43,7 +43,7 @@ fonts = {{ fonts_location }}
buildout-bin-directory = {{ buildout_bin_directory }}
6tunnel = {{ sixtunnel_location }}
dash = {{ dash_location }}
template-monitor = {{ dumps(template_monitor) }}
template-monitor = ${instance-monitor:rendered}
[dynamic-template-cloudooo]
<= jinja2-template-base
......@@ -74,7 +74,7 @@ extra-context =
[dynamic-template-erp5-parameters]
jupyter-enable-default = {{ jupyter_enable_default }}
local-bt5-repository = {{ local_bt5_repository }}
template-monitor = {{ dumps(template_monitor) }}
template-monitor = ${instance-monitor:rendered}
[dynamic-template-erp5]
<= jinja2-template-base
......@@ -103,7 +103,7 @@ curl-location = {{ curl_location }}
dash = {{ dash_location }}
template-haproxy-cfg = {{ template_haproxy_cfg }}
template-apache-conf = {{ template_apache_conf }}
template-monitor = {{ dumps(template_monitor) }}
template-monitor = ${instance-monitor:rendered}
[dynamic-template-balancer]
<= jinja2-template-base
......@@ -115,7 +115,7 @@ extra-context =
[dynamic-template-zeo-parameters]
buildout-bin-directory = {{ buildout_bin_directory }}
template-monitor = {{ dumps(template_monitor) }}
template-monitor = ${instance-monitor:rendered}
[dynamic-template-zeo]
<= jinja2-template-base
......@@ -138,7 +138,7 @@ jsl = {{ jsl_location }}
link-binary = {{ dumps(zope_link_binary) }}
userhosts = {{ userhosts_location }}
site-zcml = {{ site_zcml }}
template-monitor = {{ dumps(template_monitor) }}
template-monitor = ${instance-monitor:rendered}
extra-path-list = {{ dumps(extra_path_list) }}
matplotlibrc = {{ matplotlibrc_location }}
......@@ -159,7 +159,7 @@ dcron-location = {{ dcron_location }}
gzip-location = {{ gzip_location }}
kumo-location = {{ kumo_location }}
logrotate-location = {{ logrotate_location }}
template-monitor = {{ dumps(template_monitor) }}
template-monitor = ${instance-monitor:rendered}
[dynamic-template-kumofs]
<= jinja2-template-base
......@@ -181,7 +181,7 @@ bin-directory = {{ bin_directory }}
mariadb-resiliency-after-import-script = {{ mariadb_resiliency_after_import_script }}
mariadb-slow-query-report-script = {{ mariadb_slow_query_report_script }}
percona-tools-location = {{ percona_toolkit_location }}
template-monitor = {{ template_monitor }}
template-monitor = ${instance-monitor:rendered}
[dynamic-template-mariadb]
<= jinja2-template-base
......@@ -208,6 +208,14 @@ extra-context =
[dynamic-template-jupyter]
rendered = {{ template_jupyter_cfg }}
[instance-monitor]
recipe = slapos.recipe.template:jinja2
template = {{ dumps(template_monitor) }}
rendered = ${buildout:directory}/template-monitor.cfg
extensions = jinja2.ext.do
context = key buildout buildout:bin-directory
mode = 0644
[switch-softwaretype]
recipe = slapos.cookbook:switch-softwaretype
override = {{ dumps(override_switch_softwaretype |default) }}
......
......@@ -96,10 +96,16 @@ rendered = ${monitor2-template:rendered}
output = ${monitor2-template:rendered}
[monitor2-template]
recipe = slapos.recipe.template:jinja2
filename = template-monitor.cfg
recipe = slapos.recipe.template
url = ${:_profile_base_location_}/${:filename}
filename = instance-monitor.cfg
mode = 0644
output = ${buildout:directory}/template-monitor.cfg
[remove-section]
#recipe = slapos.recipe.template:jinja2
template = ${:_profile_base_location_}/instance-monitor.cfg.jinja2.in
rendered = ${buildout:directory}/template-monitor.cfg
context =
key apache_location apache:location
key gzip_location gzip:location
......
......@@ -14,5 +14,5 @@
# section inheritance (< = ...) are NOT supported (but you should really
# not need these here).
[monitor2-template]
filename = instance-monitor.cfg.jinja2.in
md5sum = 5027f0b1abcc28ce3817cd70fb667a3b
filename = instance-monitor.cfg
md5sum = 3d2093fa58da21266d011a752bc2e91f
[slap-configuration]
recipe = slapos.cookbook:slapconfiguration.serialised
computer = ${slap-connection:computer-id}
partition = ${slap-connection:partition-id}
url = ${slap-connection:server-url}
key = ${slap-connection:key-file}
cert = ${slap-connection:cert-file}
computer = $${slap-connection:computer-id}
partition = $${slap-connection:partition-id}
url = $${slap-connection:server-url}
key = $${slap-connection:key-file}
cert = $${slap-connection:cert-file}
# XXX Default values if doesn't exists
root-instance-title = UNKNOWN H-S
......@@ -12,114 +12,114 @@ instance-title = UNKNOWN Instance
[directory]
recipe = slapos.cookbook:mkdirectory
etc = ${buildout:directory}/etc
bin = ${buildout:directory}/bin
srv = ${buildout:directory}/srv
var = ${buildout:directory}/var
run = ${:var}/run
log = ${:var}/log
scripts = ${:etc}/run
services = ${:etc}/service
promises = ${:etc}/promise
monitor = ${:srv}/monitor
monitor-promise = ${:etc}/monitor-promise
monitor-report = ${:etc}/monitor-report
etc = $${buildout:directory}/etc
bin = $${buildout:directory}/bin
srv = $${buildout:directory}/srv
var = $${buildout:directory}/var
run = $${:var}/run
log = $${:var}/log
scripts = $${:etc}/run
services = $${:etc}/service
promises = $${:etc}/promise
monitor = $${:srv}/monitor
monitor-promise = $${:etc}/monitor-promise
monitor-report = $${:etc}/monitor-report
[monitor-directory]
recipe = slapos.cookbook:mkdirectory
bin = ${directory:bin}
etc = ${directory:etc}
run = ${directory:monitor}/run
#run = ${directory:scripts}
promises = ${directory:monitor-promise}
reports = ${directory:monitor-report}
pids = ${directory:run}/monitor
cgi-bin = ${directory:monitor}/cgi-bin
webdav = ${directory:monitor}/webdav
public = ${directory:monitor}/public
private = ${directory:monitor}/private
services = ${directory:services}
services-conf = ${directory:etc}/monitor.conf.d
log = ${directory:log}/monitor
monitor-var = ${directory:var}/monitor
bin = $${directory:bin}
etc = $${directory:etc}
run = $${directory:monitor}/run
#run = $${directory:scripts}
promises = $${directory:monitor-promise}
reports = $${directory:monitor-report}
pids = $${directory:run}/monitor
cgi-bin = $${directory:monitor}/cgi-bin
webdav = $${directory:monitor}/webdav
public = $${directory:monitor}/public
private = $${directory:monitor}/private
services = $${directory:services}
services-conf = $${directory:etc}/monitor.conf.d
log = $${directory:log}/monitor
monitor-var = $${directory:var}/monitor
[ca-directory]
recipe = slapos.cookbook:mkdirectory
root = ${directory:srv}/ssl
requests = ${:root}/requests
private = ${:root}/private
certs = ${:root}/certs
newcerts = ${:root}/newcerts
crl = ${:root}/crl
root = $${directory:srv}/ssl
requests = $${:root}/requests
private = $${:root}/private
certs = $${:root}/certs
newcerts = $${:root}/newcerts
crl = $${:root}/crl
[certificate-authority]
recipe = slapos.cookbook:certificate_authority
openssl-binary = {{ openssl_executable_location }}
ca-dir = ${ca-directory:root}
requests-directory = ${ca-directory:requests}
wrapper = ${monitor-directory:services}/certificate_authority
ca-private = ${ca-directory:private}
ca-certs = ${ca-directory:certs}
ca-newcerts = ${ca-directory:newcerts}
ca-crl = ${ca-directory:crl}
openssl-binary = ${openssl:location}/bin/openssl
ca-dir = $${ca-directory:root}
requests-directory = $${ca-directory:requests}
wrapper = $${monitor-directory:services}/certificate_authority
ca-private = $${ca-directory:private}
ca-certs = $${ca-directory:certs}
ca-newcerts = $${ca-directory:newcerts}
ca-crl = $${ca-directory:crl}
[ca-monitor-httpd]
<= certificate-authority
recipe = slapos.cookbook:certificate_authority.request
key-file = ${monitor-httpd-conf-parameter:key-file}
cert-file = ${monitor-httpd-conf-parameter:cert-file}
executable = ${monitor-httpd-wrapper:wrapper-path}
wrapper = ${directory:services}/monitor-httpd
key-file = $${monitor-httpd-conf-parameter:key-file}
cert-file = $${monitor-httpd-conf-parameter:cert-file}
executable = $${monitor-httpd-wrapper:wrapper-path}
wrapper = $${directory:services}/monitor-httpd
[monitor-conf-parameters]
title = ${monitor-instance-parameter:monitor-title}
root-title = ${monitor-instance-parameter:root-instance-title}
public-folder = ${monitor-directory:public}
private-folder = ${monitor-directory:private}
webdav-folder = ${monitor-directory:webdav}
report-folder = ${monitor-directory:reports}
base-url = ${monitor-instance-parameter:monitor-base-url}
monitor-hal-json = ${monitor-directory:public}/monitor.hal.json
service-pid-folder = ${monitor-directory:pids}
crond-folder = ${logrotate-directory:cron-entries}
logrotate-folder = ${logrotate-directory:logrotate-entries}
promise-runner = {{ monitor_runpromise }}
promise-folder = ${directory:promises}
monitor-promise-folder = ${monitor-directory:promises}
promises-timeout-file = ${monitor-promise-timeout-file:file}
pid-file = ${monitor-directory:pids}/monitor-bootstrap.pid
title = $${monitor-instance-parameter:monitor-title}
root-title = $${monitor-instance-parameter:root-instance-title}
public-folder = $${monitor-directory:public}
private-folder = $${monitor-directory:private}
webdav-folder = $${monitor-directory:webdav}
report-folder = $${monitor-directory:reports}
base-url = $${monitor-instance-parameter:monitor-base-url}
monitor-hal-json = $${monitor-directory:public}/monitor.hal.json
service-pid-folder = $${monitor-directory:pids}
crond-folder = $${logrotate-directory:cron-entries}
logrotate-folder = $${logrotate-directory:logrotate-entries}
promise-runner = ${buildout:directory}/bin/monitor.runpromise
promise-folder = $${directory:promises}
monitor-promise-folder = $${monitor-directory:promises}
promises-timeout-file = $${monitor-promise-timeout-file:file}
pid-file = $${monitor-directory:pids}/monitor-bootstrap.pid
public-path-list =
private-path-list =
${directory:log}
$${directory:log}
#
monitor-url-list =
${monitor-instance-parameter:monitor-url-list}
$${monitor-instance-parameter:monitor-url-list}
parameter-file-path = ${monitor-instance-parameter:configuration-file-path}
parameter-file-path = $${monitor-instance-parameter:configuration-file-path}
parameter-list =
raw monitor-user ${monitor-instance-parameter:username}
htpasswd monitor-password ${httpd-monitor-htpasswd:password-file} ${monitor-instance-parameter:username} ${httpd-monitor-htpasswd:htpasswd-path}
file promise-timeout ${monitor-promise-timeout-file:file}
file min-free-disk-MB ${promise-check-free-disk-space:config-file}
${monitor-instance-parameter:instance-configuration}
raw monitor-user $${monitor-instance-parameter:username}
htpasswd monitor-password $${httpd-monitor-htpasswd:password-file} $${monitor-instance-parameter:username} $${httpd-monitor-htpasswd:htpasswd-path}
file promise-timeout $${monitor-promise-timeout-file:file}
file min-free-disk-MB $${promise-check-free-disk-space:config-file}
$${monitor-instance-parameter:instance-configuration}
# htpasswd entry: htpasswd key password-file username htpasswd-file
collector-db = ${monitor-instance-parameter:collector-db}
collect-script = {{ monitor_collect }}
statistic-script = {{ monitor_statistic }}
python = {{ python_with_eggs }}
nice-cmd = ${xnice-bin:output}
collector-db = $${monitor-instance-parameter:collector-db}
collect-script = ${buildout:directory}/bin/monitor.collect
statistic-script = ${buildout:directory}/bin/monitor.statistic
python = ${buildout:directory}/bin/${extra-eggs:interpreter}
nice-cmd = $${xnice-bin:output}
promise-output-file = ${directory:monitor}/monitor-bootstrap-status
promise-output-file = $${directory:monitor}/monitor-bootstrap-status
[monitor-promise-timeout-file]
recipe = plone.recipe.command
file = ${directory:etc}/promise_timeout
file = $${directory:etc}/promise_timeout
command =
if [ ! -s "${:file}" ]; then
echo "20" > ${:file}
if [ ! -s "$${:file}" ]; then
echo "20" > $${:file}
fi
[monitor-base-url-dict]
......@@ -127,81 +127,81 @@ command =
[monitor-conf]
recipe = slapos.recipe.template:jinja2
template = {{ monitor_conf_template }}
rendered = ${directory:etc}/${:filename}
template = ${monitor-conf:location}/${monitor-conf:filename}
rendered = $${directory:etc}/$${:filename}
filename = monitor.conf
context = section parameter_dict monitor-conf-parameters
section monitor_base_urls monitor-base-url-dict
[instance-info-parameters]
name = ${monitor-instance-parameter:monitor-title}
root-name = ${monitor-instance-parameter:root-instance-title}
computer-id = ${slap-connection:computer-id}
ipv4 = ${slap-configuration:ipv4-random}
ipv6 = ${slap-configuration:ipv6-random}
software-release = ${slap-connection:software-release-url}
software-type = ${slap-configuration:slap-software-type}
partition-id = ${slap-connection:partition-id}
name = $${monitor-instance-parameter:monitor-title}
root-name = $${monitor-instance-parameter:root-instance-title}
computer-id = $${slap-connection:computer-id}
ipv4 = $${slap-configuration:ipv4-random}
ipv6 = $${slap-configuration:ipv6-random}
software-release = $${slap-connection:software-release-url}
software-type = $${slap-configuration:slap-software-type}
partition-id = $${slap-connection:partition-id}
[monitor-instance-info]
recipe = slapos.recipe.template:jinja2
template = {{ monitor_instance_info }}
rendered = ${directory:etc}/${:filename}
template = ${monitor-instance-info:location}/${monitor-instance-info:filename}
rendered = $${directory:etc}/$${:filename}
filename = instance-info.conf
context =
section instance_dict instance-info-parameters
[python-symlink]
recipe = plone.recipe.command
target = ${directory:bin}
command = ln -sf {{ python_with_eggs }} ${:target}/python
update-command = ${:command}
target = $${directory:bin}
command = ln -sf ${buildout:directory}/bin/${extra-eggs:interpreter} $${:target}/python
update-command = $${:command}
[start-monitor]
recipe = slapos.cookbook:wrapper
command-line = {{ python_executable }} {{ monitor_bin }} --config_file ${monitor-conf:rendered}
command-line = ${buildout:directory}/bin/${extra-eggs:interpreter} ${buildout:directory}/bin/monitor.bootstrap --config_file $${monitor-conf:rendered}
name = bootstrap-monitor
wrapper-path = ${directory:scripts}/${:name}
wrapper-path = $${directory:scripts}/$${:name}
environment =
PATH=${python-symlink:target}:/usr/local/bin:/usr/bin:/bin
PATH=$${python-symlink:target}:/usr/local/bin:/usr/bin:/bin
[monitor-htpasswd]
recipe = slapos.cookbook:generate.password
storage-path = ${directory:etc}/.monitor_pwd
storage-path = $${directory:etc}/.monitor_pwd
bytes = 8
[httpd-monitor-htpasswd]
recipe = plone.recipe.command
stop-on-error = true
password-file = ${directory:etc}/.monitor_pwd
htpasswd-path = ${monitor-directory:etc}/monitor-htpasswd
password-file = $${directory:etc}/.monitor_pwd
htpasswd-path = $${monitor-directory:etc}/monitor-htpasswd
# Keep multiple lines as password can end with newline char.
command =
if [ ! -s "${:htpasswd-path}" ]; then
{{ apache_location }}/bin/htpasswd -cb ${:htpasswd-path} ${:user} ${:password}
if [ ! -s "$${httpd-monitor-htpasswd:htpasswd-path}" ]; then
${apache:location}/bin/htpasswd -cb $${:htpasswd-path} $${:user} $${:password}
fi
if [ ! -s "${:password-file}" ]; then echo "${monitor-instance-parameter:password}" > ${:password-file}; fi
update-command = ${:command}
user = ${monitor-instance-parameter:username}
password = ${monitor-instance-parameter:password}
if [ ! -s "$${:password-file}" ]; then echo "$${monitor-instance-parameter:password}" > $${:password-file}; fi
update-command = $${:command}
user = $${monitor-instance-parameter:username}
password = $${monitor-instance-parameter:password}
[monitor-httpd-conf-parameter]
listening-ip = ${monitor-instance-parameter:monitor-httpd-ipv6}
port = ${monitor-instance-parameter:monitor-httpd-port}
pid-file = ${directory:run}/monitor-httpd.pid
access-log = ${monitor-directory:log}/monitor-httpd-access.log
error-log = ${monitor-directory:log}/monitor-httpd-error.log
cert-file = ${ca-directory:certs}/httpd.crt
key-file = ${ca-directory:certs}/httpd.key
htpasswd-file = ${httpd-monitor-htpasswd:htpasswd-path}
url = https://[${monitor-instance-parameter:monitor-httpd-ipv6}]:${:port}
httpd-cors-config-file = ${monitor-httpd-cors:rendered}
listening-ip = $${monitor-instance-parameter:monitor-httpd-ipv6}
port = $${monitor-instance-parameter:monitor-httpd-port}
pid-file = $${directory:run}/monitor-httpd.pid
access-log = $${monitor-directory:log}/monitor-httpd-access.log
error-log = $${monitor-directory:log}/monitor-httpd-error.log
cert-file = $${ca-directory:certs}/httpd.crt
key-file = $${ca-directory:certs}/httpd.key
htpasswd-file = $${httpd-monitor-htpasswd:htpasswd-path}
url = https://[$${monitor-instance-parameter:monitor-httpd-ipv6}]:$${:port}
httpd-cors-config-file = $${monitor-httpd-cors:rendered}
httpd-include-file =
[monitor-httpd-conf]
recipe = slapos.recipe.template:jinja2
template = {{ monitor_httpd_template }}
rendered = ${monitor-directory:etc}/monitor-httpd.conf
template = ${monitor-httpd-conf:location}/${monitor-httpd-conf:filename}
rendered = $${monitor-directory:etc}/monitor-httpd.conf
mode = 0744
context =
section directory monitor-directory
......@@ -209,135 +209,147 @@ context =
[monitor-httpd-cors]
recipe = slapos.recipe.template:jinja2
template = {{ monitor_https_cors }}
rendered = ${directory:etc}/httpd-cors.cfg
template = ${monitor-httpd-cors:location}/${monitor-httpd-cors:filename}
rendered = $${directory:etc}/httpd-cors.cfg
mode = 0600
context =
key domain monitor-instance-parameter:cors-domains
[monitor-httpd-wrapper]
recipe = slapos.cookbook:wrapper
command-line = {{ apache_location }}/bin/httpd -f ${monitor-httpd-conf:rendered} -DFOREGROUND
wrapper-path = ${directory:bin}/monitor-httpd
command-line = ${apache:location}/bin/httpd -f $${monitor-httpd-conf:rendered} -DFOREGROUND
wrapper-path = $${directory:bin}/monitor-httpd
wait-for-files =
${ca-directory:certs}/httpd.key
${ca-directory:certs}/httpd.crt
${monitor-httpd-graceful-wrapper:rendered}
$${ca-directory:certs}/httpd.key
$${ca-directory:certs}/httpd.crt
$${monitor-httpd-graceful-wrapper:rendered}
[monitor-httpd-graceful-wrapper]
recipe = slapos.recipe.template:jinja2
template = {{ template_wrapper }}
rendered = ${directory:scripts}/monitor-httpd-graceful
template = ${monitor-template-wrapper:location}/${monitor-template-wrapper:filename}
rendered = $${directory:scripts}/monitor-httpd-graceful
mode = 0700
context =
key content :command
raw dash_binary {{ dash_executable_location }}
command = kill -USR1 $(cat ${monitor-httpd-conf-parameter:pid-file})
raw dash_binary ${dash:location}/bin/dash
command = kill -USR1 $(cat $${monitor-httpd-conf-parameter:pid-file})
[xnice-bin]
recipe = collective.recipe.template
input = inline:#!/bin/sh
# run something at lowest possible priority
exec nice -19 chrt --idle 0 ionice -c3 "$@"
output = ${directory:bin}/xnice
output = $${directory:bin}/xnice
mode = 700
[promise-monitor-httpd-is-process-older-than-dependency-set]
recipe = slapos.cookbook:wrapper
command-line = {{ bin_directory }}/is-process-older-than-dependency-set ${monitor-httpd-conf-parameter:pid-file}
wrapper-path = ${directory:promises}/promise-monitor-httpd-is-process-older-than-dependency-set
command-line = ${buildout:directory}/bin/is-process-older-than-dependency-set $${monitor-httpd-conf-parameter:pid-file}
wrapper-path = $${directory:promises}/promise-monitor-httpd-is-process-older-than-dependency-set
parameters-extra = true
[monitor-globalstate-wrapper]
recipe = slapos.cookbook:wrapper
command-line = ${xnice-bin:output} {{ monitor_genstatus }} '${monitor-conf:rendered}' '${monitor-instance-info:rendered}'
wrapper-path = ${directory:bin}/monitor-globalstate
command-line = $${xnice-bin:output} ${buildout:directory}/bin/monitor.genstatus '$${monitor-conf:rendered}' '$${monitor-instance-info:rendered}'
wrapper-path = $${directory:bin}/monitor-globalstate
[monitor-configurator-wrapper]
recipe = slapos.cookbook:wrapper
# XXX - hard coded path
command-line = {{ monitor_configwrite }} --config_folder '${monitor-conf-parameters:private-folder}/config/.jio_documents' --output_cfg_file '${monitor-instance-parameter:configuration-file-path}' --htpasswd_bin '{{ apache_location }}/bin/htpasswd' --monitor_https_cors {{ monitor_https_cors }}
wrapper-path = ${directory:bin}/monitor-configurator
command-line = ${buildout:directory}/bin/monitor.configwrite} --config_folder '$${monitor-conf-parameters:private-folder}/config/.jio_documents' --output_cfg_file '$${monitor-instance-parameter:configuration-file-path}' --htpasswd_bin '${apache:location}/bin/htpasswd' --monitor_https_cors ${monitor-template-wrapper:location}/${monitor-template-wrapper:filename}
wrapper-path = $${directory:bin}/monitor-configurator
[monitor-globalstate-cron-entry]
recipe = slapos.cookbook:cron.d
cron-entries = ${cron:cron-entries}
cron-entries = $${cron:cron-entries}
name = monitor-globalstate
frequency = * * * * *
command = ${monitor-globalstate-wrapper:wrapper-path}
command = $${monitor-globalstate-wrapper:wrapper-path}
[monitor-configurator-cron-entry]
recipe = slapos.cookbook:cron.d
cron-entries = ${cron:cron-entries}
cron-entries = $${cron:cron-entries}
name = monitor-configurator
frequency = * * * * *
command = ${monitor-configurator-wrapper:wrapper-path}
command = $${monitor-configurator-wrapper:wrapper-path}
[monitor-httpd-promise]
recipe = slapos.cookbook:check_url_available
path = ${directory:promises}/${:filename}
path = $${directory:promises}/$${:filename}
filename = monitor-httpd-listening-on-tcp
url = ${monitor-httpd-conf-parameter:url}
url = $${monitor-httpd-conf-parameter:url}
check-secure = 1
dash_path = {{ dash_executable_location }}
curl_path = {{ curl_executable_location }}
dash_path = ${dash:location}/bin/dash
curl_path = ${curl:location}/bin/curl
[monitor-publish-parameters]
# XXX depends on monitor-base section
monitor-base-url = ${monitor-base:base-url}
monitor-url = ${:monitor-base-url}/public/feeds
monitor-user = ${monitor-instance-parameter:username}
monitor-password = ${monitor-instance-parameter:password}
monitor-base-url = $${monitor-base:base-url}
monitor-url = $${:monitor-base-url}/public/feeds
monitor-user = $${monitor-instance-parameter:username}
monitor-password = $${monitor-instance-parameter:password}
[install-monitor-apache]
recipe = plone.recipe.command
command = true
update-command =
# XXX - Set monitor-base-url = $${install-monitor-apache:monitor-base-url} => https://[ipv6]:port
#monitor-base-url = $${monitor-frontend-promise:url}
monitor-base-url = $${monitor-httpd-conf-parameter:url}
depends =
$${certificate-authority:wrapper}
$${ca-monitor-httpd:wrapper}
$${monitor-httpd-promise:filename}
$${promise-monitor-httpd-is-process-older-than-dependency-set:wrapper-path}
[monitor-instance-parameter]
monitor-title = ${slap-configuration:instance-title}
monitor-httpd-ipv6 = ${slap-configuration:ipv6-random}
monitor-title = $${slap-configuration:instance-title}
monitor-httpd-ipv6 = $${slap-configuration:ipv6-random}
monitor-httpd-port = 8196
# XXX - Set monitor-base-url = ${monitor-httpd-conf-parameter:url} => https://[ipv6]:port
monitor-base-url = ${monitor-frontend-promise:url}
#monitor-base-url = ${monitor-httpd-conf-parameter:url}
root-instance-title = ${slap-configuration:root-instance-title}
monitor-base-url = $${install-monitor-apache:monitor-base-url}
root-instance-title = $${slap-configuration:root-instance-title}
monitor-url-list =
cors-domains = monitor.app.officejs.com
cors-domains = softinst65443.host.vifib.net
#monitor.app.officejs.com
# XXX Hard coded parameter
collector-db = /srv/slapgrid/var/data-log/collector.db
# Credentials
password = ${monitor-htpasswd:passwd}
password = $${monitor-htpasswd:passwd}
username = admin
# XXX: type key value
# ex raw monitor-password resqdsdsd34
instance-configuration =
configuration-file-path = ${monitor-directory:etc}/monitor_knowledge0.cfg
configuration-file-path = $${monitor-directory:etc}/monitor_knowledge0.cfg
interface-url = https://monitor.app.officejs.com
[monitor-frontend]
<= slap-connection
recipe = slapos.cookbook:requestoptional
name = Monitor Frontend ${monitor-instance-parameter:monitor-title}
name = Monitor Frontend $${monitor-instance-parameter:monitor-title}
# XXX We have hardcoded SR URL here.
software-url = http://git.erp5.org/gitweb/slapos.git/blob_plain/HEAD:/software/apache-frontend/software.cfg
slave = true
config-url = ${monitor-httpd-conf-parameter:url}
config-url = $${monitor-httpd-conf-parameter:url}
config-https-only = true
#software-type = custom-personal
return = domain secure_access
[monitor-frontend-promise]
recipe = slapos.cookbook:check_url_available
path = ${directory:promises}/monitor-http-frontend
url = ${monitor-frontend:connection-secure_access}
dash_path = {{ dash_executable_location }}
curl_path = {{ curl_executable_location }}
path = $${directory:promises}/monitor-http-frontend
url = $${monitor-frontend:connection-secure_access}
dash_path = ${dash:location}/bin/dash
curl_path = ${curl:location}/bin/curl
check-secure = 1
[monitor-bootstrap-promise]
recipe = collective.recipe.template
file = ${monitor-conf-parameters:promise-output-file}
error-log-file = ${buildout:directory}/.${slap-connection:partition-id}_${start-monitor:name}.log
input = inline:#!{{ dash_executable_location }}
pidfile=${monitor-conf-parameters:pid-file}
file = $${monitor-conf-parameters:promise-output-file}
error-log-file = $${buildout:directory}/.$${slap-connection:partition-id}_$${start-monitor:name}.log
input = inline:#!${dash:location}/bin/dash
pidfile=$${monitor-conf-parameters:pid-file}
if [ -s $pidfile ]; then
COUNTER=0
# Wait until max 20 seconds, the limit promise timeout
......@@ -350,9 +362,9 @@ input = inline:#!{{ dash_executable_location }}
fi
done
fi
if [ ! -f "${:file}" ]; then
if [ ! -f "$${:file}" ]; then
echo "Monitor bootstrap exited with error."
log_file="${:error-log-file}"
log_file="$${:error-log-file}"
if [ -s "$log_file" ]; then
echo " ---- Latest monitor-boostrap.log ----"
echo ""
......@@ -362,58 +374,53 @@ input = inline:#!{{ dash_executable_location }}
else
echo "Bootstrap OK";
fi
output = ${directory:promises}/monitor-bootstrap-status
output = $${directory:promises}/monitor-bootstrap-status
mode = 700
[promise-check-slapgrid]
recipe = collective.recipe.template
error-log-file = ${buildout:directory}/.slapgrid-${slap-connection:partition-id}-error.log
error-log-file = $${buildout:directory}/.slapgrid-$${slap-connection:partition-id}-error.log
input = inline:#!/bin/sh
if [ -f "${:error-log-file}" ]; then
>&2 cat ${:error-log-file}
if [ -f "$${:error-log-file}" ]; then
>&2 cat $${:error-log-file}
exit 1
fi
output = ${monitor-directory:promises}/buildout-${slap-connection:partition-id}-status
output = $${monitor-directory:promises}/buildout-$${slap-connection:partition-id}-status
mode = 700
[promise-check-free-disk-space]
recipe = slapos.recipe.template:jinja2
template = {{ template_check_disk_space }}
rendered = ${monitor-directory:promises}/check-free-disk-space
template = ${monitor-check-free-disk-space:location}/${monitor-check-free-disk-space:filename}
rendered = $${monitor-directory:promises}/check-free-disk-space
mode = 0700
context =
key config_file :config-file
raw home_path ${buildout:directory}
raw python_bin {{ python_with_eggs }}
config-file = ${directory:etc}/min-free-disk-size
raw home_path $${buildout:directory}
raw python_bin ${buildout:directory}/bin/${extra-eggs:interpreter}
config-file = $${directory:etc}/min-free-disk-size
[monitor-base]
# create dependencies between required monitor parts
recipe = plone.recipe.command
command = true
update-command =
base-url = ${monitor-conf-parameters:base-url}
base-url = $${monitor-conf-parameters:base-url}
depends =
${monitor-globalstate-cron-entry:name}
${monitor-configurator-cron-entry:name}
${cron-entry-logrotate:name}
${logrotate-entry-cron:name}
${certificate-authority:wrapper}
${monitor-conf:rendered}
${start-monitor:wrapper-path}
${ca-monitor-httpd:wrapper}
${monitor-httpd-promise:filename}
${monitor-bootstrap-promise:file}
${promise-check-slapgrid:output}
${promise-monitor-httpd-is-process-older-than-dependency-set:wrapper-path}
$${monitor-globalstate-cron-entry:name}
$${monitor-configurator-cron-entry:name}
$${cron-entry-logrotate:name}
$${logrotate-entry-cron:name}
$${monitor-conf:rendered}
$${start-monitor:wrapper-path}
$${monitor-bootstrap-promise:file}
$${promise-check-slapgrid:output}
[monitor-publish]
monitor-base-url = ${monitor-publish-parameters:monitor-base-url}
monitor-setup-url = ${monitor-instance-parameter:interface-url}/#page=settings_configurator&url=${monitor-publish-parameters:monitor-url}&username=${monitor-publish-parameters:monitor-user}&password=${monitor-publish-parameters:monitor-password}
monitor-base-url = $${monitor-publish-parameters:monitor-base-url}
monitor-setup-url = $${monitor-instance-parameter:interface-url}/#page=settings_configurator&url=$${monitor-publish-parameters:monitor-url}&username=$${monitor-publish-parameters:monitor-user}&password=$${monitor-publish-parameters:monitor-password}
[buildout]
extends =
{{ template_logrotate_base }}
${template-logrotate-base:rendered}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment