instance-cloudooo.cfg.in 10.4 KB
Newer Older
1
{% set ipv4 = (ipv4_set | list)[0] -%}
2
{% if ipv6_set %}{% set ipv6 = (ipv6_set | list)[0] %}{% endif -%}
3 4 5 6 7 8 9 10 11 12
{% set instance_parameter_dict = parameter_dict['instance-parameter-dict'] -%}
{% macro assert(x) %}{{ ("",)[not x] }}{% endmacro -%}

{% set publish_url_name = instance_parameter_dict.get('publish-url-name') or 'url' -%}

{% set next_port = instance_parameter_dict['port'] | int -%}
{% if instance_parameter_dict.get('port-parameter-name') -%}
{%   set next_port = slapparameter_dict.get(instance_parameter_dict['port-parameter-name'], next_port) | int -%}
{% endif -%}
{% do assert(next_port > 0) -%}
13
{% set next_port = itertools.count(next_port).next -%}
14 15 16 17 18 19 20

{% set backend_count = instance_parameter_dict['backend-count'] | int -%}
{% if instance_parameter_dict.get('backend-count-parameter-name') -%}
{%   set backend_count = slapparameter_dict.get(instance_parameter_dict['backend-count-parameter-name'], backend_count) | int -%}
{% endif -%}
{% do assert(backend_count > 0) -%}

21 22 23 24 25 26
{% set timeout = instance_parameter_dict['timeout'] | int -%}
{% if instance_parameter_dict.get('timeout-parameter-name') -%}
{%   set timeout = slapparameter_dict.get(instance_parameter_dict['timeout-parameter-name'], timeout) | int -%}
{% endif -%}
{% do assert(timeout > 0) -%}

27 28 29 30 31
{% set mimetype_entry_addition = instance_parameter_dict.get('mimetype-entry-addition', '') -%}
{% if instance_parameter_dict.get('mimetype-entry-addition-parameter-name') -%}
{%   set mimetype_entry_addition = mimetype_entry_addition ~ "\n" ~ slapparameter_dict.get(instance_parameter_dict['mimetype-entry-addition-parameter-name'], '') -%}
{% endif -%}

32 33
{% set apache_port = next_port() -%}
{% set haproxy_port = next_port() -%}
34 35 36 37 38 39

{% set apache_ip_list = [ipv4] -%}
{% if ipv6_set -%}
{%   do apache_ip_list.append('[' ~ ipv6 ~ ']') -%}
{% endif -%}
{% set apache_dict = {} -%}
40
{% do apache_dict.__setitem__(publish_url_name, (apache_port, "https", 'http://' ~ ipv4 ~ ':' ~ haproxy_port, False)) -%}
41

42
{% set bin_directory = parameter_dict['buildout-bin-directory'] -%}
43
{% set section_list = [] -%}
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
{% set cloudooo_section_list = [] -%}
{% macro cloudooo(name) %}{% do cloudooo_section_list.append(name) %}{{ name }}{% endmacro -%}
[simplefile]
recipe = slapos.recipe.template:jinja2
template = inline:{{ '{{ content }}' }}

{% macro simplefile(section_name, file_path, content, mode='') -%}
{%   set content_section_name = section_name ~ '-content' -%}
[{{  content_section_name }}]
content = {{ dumps(content) }}

[{{  section_name }}]
< = simplefile
rendered = {{ file_path }}
context = key content {{ content_section_name }}:content
mode = {{ mode }}
{%- endmacro %}


63
[buildout]
64 65
extends =
  {{ parameter_dict['template-logrotate-base'] }}
66
  {{ parameter_dict['template-monitor'] }}
67
parts =
68
  monitor-base
69 70 71 72
  publish
  apache
  apache-conf
  apache-promise
73
  apache-logrotate
74
  cloudooo-test-runner
75
  haproxy
76 77
  xvfb-instance
  wkhtmltopdf-on-xvfb
78

79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97

[apache]
recipe = slapos.cookbook:wrapper
wrapper-path = ${directory:services}/apache
command-line = "{{ parameter_dict['apache'] }}/bin/httpd" -f "${apache-conf:rendered}" -DFOREGROUND

[apache-conf]
recipe = slapos.recipe.template:jinja2
template = {{ parameter_dict['template-apache-conf'] }}
rendered = ${directory:apache-conf}/apache.conf
context = section parameter_dict apache-conf-parameter-dict

[apache-conf-parameter-dict]
backend-list = {{ dumps(apache_dict.values()) }}
ip-list = {{ dumps(apache_ip_list) }}
pid-file = ${directory:run}/apache.pid
error-log = ${directory:log}/apache-error.log
access-log = ${directory:log}/apache-access.log
# Apache 2.4's default value (60 seconds) can be a bit too short
98
timeout = {{ timeout }}
99 100 101 102 103 104 105 106
# Basic SSL server configuration
cert = ${apache-ssl:cert}
key = ${apache-ssl:key}
cipher =
ssl-session-cache = ${directory:log}/apache-ssl-session-cache

[apache-promise]
# Check any apache port in ipv4, expect other ports and ipv6 to behave consistently
107
<= monitor-promise-base
108
module = check_url_available
109
name = apache.py
110 111 112 113
config-url = https://{{ ipv4 }}:{{ apache_dict.values()[0][0] }}
# XXX cloudooo replies "400 Bad Request" for GET on / but what we want to check
# is that we don't have a "503 Service Unavailable" from apache or haproxy.
config-http_code = 400
114 115 116 117 118 119 120 121 122 123 124 125 126

[apache-conf-ssl]
cert = ${directory:apache-conf}/apache.crt
key = ${directory:apache-conf}/apache.pem
ca-cert =  ${directory:apache-conf}/ca.crt
crl = ${directory:apache-conf}/crl.pem

[apache-ssl]
recipe = plone.recipe.command
command = "{{ parameter_dict['openssl'] }}/bin/openssl" req -newkey rsa -batch -new -x509 -days 3650 -nodes -keyout "${:key}" -out "${:cert}"
key = ${apache-conf-ssl:key}
cert = ${apache-conf-ssl:cert}

127
[apache-logrotate]
128
< = logrotate-entry-base
129 130
name = apache
log = ${apache-conf-parameter-dict:error-log} ${apache-conf-parameter-dict:access-log}
131
post = test ! -s ${apache-conf-parameter-dict:pid-file} || {{ bin_directory }}/slapos-kill --pidfile ${apache-conf-parameter-dict:pid-file} -s USR1
132

133
[publish]
134
recipe = slapos.cookbook:publish.serialised
135
{% for family_name, (apache_port, scheme, _, _) in apache_dict.items() -%}
136 137 138 139
{{   family_name ~ '-v6' }} = {% if ipv6_set %}{{ scheme ~ '://[' ~ ipv6 ~ ']:' ~ apache_port }}{% endif %}
{{   family_name }} = {{ scheme ~ '://' ~ ipv4 ~ ':' ~ apache_port }}
{% endfor -%}

140 141 142 143 144 145 146 147 148 149
[fontconfig-conf]
recipe = slapos.recipe.template:jinja2
template = {{ parameter_dict['template-fonts-conf'] }}
rendered = ${directory:etc}/fonts.conf
context =
    key cachedir directory:fontconfig-cache
    key fonts :fonts
    key includes :includes
fonts =
{% for font in parameter_dict['fonts'].splitlines() %}
150
    {{ font }}
151 152 153 154 155 156
{% endfor%}
    ${directory:font}
includes =
{% for include in parameter_dict['fontconfig-includes'].splitlines() %}
   {{ include }}
{% endfor%}
157

158
[cloudooo-base]
159
recipe = slapos.cookbook:generic.cloudooo
160
ip = {{ ipv4 }}
161
environment =
162
  LD_LIBRARY_PATH = {{ parameter_dict['cairo'] }}/lib:{{ parameter_dict['cups'] }}/lib:{{ parameter_dict['cups'] }}/lib64:{{ parameter_dict['dbus'] }}/lib:{{ parameter_dict['dbus-glib'] }}/lib:{{ parameter_dict['file'] }}/lib:{{ parameter_dict['fontconfig'] }}/lib:{{ parameter_dict['freetype'] }}/lib:{{ parameter_dict['gcc'] }}/lib:{{ parameter_dict['gcc'] }}/lib64:{{ parameter_dict['glib'] }}/lib:{{ parameter_dict['glu'] }}/lib:{{ parameter_dict['libICE'] }}/lib:{{ parameter_dict['libSM'] }}/lib:{{ parameter_dict['libX11'] }}/lib:{{ parameter_dict['libXau'] }}/lib:{{ parameter_dict['libXdmcp'] }}/lib:{{ parameter_dict['libXext'] }}/lib:{{ parameter_dict['libXrender'] }}/lib:{{ parameter_dict['libexpat'] }}/lib:{{ parameter_dict['libffi'] }}/lib:{{ parameter_dict['libffi'] }}/lib64:{{ parameter_dict['libpng12'] }}/lib:{{ parameter_dict['libxcb'] }}/lib:{{ parameter_dict['mesa'] }}/lib:{{ parameter_dict['pixman'] }}/lib:{{ parameter_dict['xdamage'] }}/lib:{{ parameter_dict['xfixes'] }}/lib:{{ parameter_dict['zlib'] }}/lib
163
  FONTCONFIG_FILE = ${fontconfig-conf:rendered}
164
  PATH = ${binary-link:target-directory}
165
  LANG = C.UTF-8
166
mimetype_entry_addition =
167 168 169
{% for entry in mimetype_entry_addition.splitlines() -%}
{{ "  " ~ entry.strip() }}
{% endfor -%}
170 171 172 173 174 175
# Binary information
# cloudooo specific configuration
ooo-binary-path = {{ parameter_dict['libreoffice-bin'] }}/program
ooo-paster = {{ bin_directory }}/cloudooo_paster
ooo-uno-path = {{ parameter_dict['libreoffice-bin'] }}/basis-link/program

176
{% for index in range(1, backend_count + 1) -%}
177
{%   set name = 'cloudooo-' ~ index -%}
178
[{{ cloudooo(name) }}]
179
< = cloudooo-base
180 181
port = {{ next_port() }}
openoffice-port = {{ next_port() }}
182 183 184
configuration-file = ${directory:etc}/{{ name }}.cfg
data-directory = ${directory:srv}/{{ name }}
wrapper = ${directory:services}/{{ name }}
185 186 187 188 189

{% endfor -%}

[haproxy]
recipe = slapos.cookbook:haproxy
190
name = cloudooo
191
conf-path = ${directory:etc}/haproxy.cfg
192
socket-path = ${directory:run}/haproxy.sock
193
ip = {{ ipv4 }}
194
port = {{ haproxy_port }}
195
maxconn = 1
196 197
wrapper-path = ${directory:services}/haproxy
binary-path = {{ parameter_dict['haproxy'] }}/sbin/haproxy
198
ctl-path = ${directory:bin}/haproxy-ctl
199
backend-list =
200
{%- for section_name in cloudooo_section_list %}
201 202 203
  {{ "${" ~ section_name ~ ":ip}:${" ~ section_name ~ ":port}" }}
{%- endfor %}

204 205 206 207 208 209 210
[cloudooo-test-runner]
recipe = slapos.cookbook:cloudooo.test

prepend-path = ${buildout:bin-directory}
run-unit-test = ${buildout:bin-directory}/runUnitTest
run-test-suite = ${buildout:bin-directory}/runTestSuite

211 212
ooo-paster = ${cloudooo-1:ooo-paster}
configuration-file = ${cloudooo-1:configuration-file}
213 214 215 216 217 218

run-unit-test-binary = {{ bin_directory }}/runCloudoooUnitTest
run-test-suite-binary = {{ bin_directory }}/runCloudoooTestSuite

[binary-link]
recipe = slapos.cookbook:symbolic.link
219
target-directory = ${directory:bin}
220 221 222 223 224 225 226
link-binary =
  {{ parameter_dict['coreutils'] }}/bin/basename
  {{ parameter_dict['coreutils'] }}/bin/cat
  {{ parameter_dict['coreutils'] }}/bin/cp
  {{ parameter_dict['coreutils'] }}/bin/ls
  {{ parameter_dict['coreutils'] }}/bin/tr
  {{ parameter_dict['coreutils'] }}/bin/uname
227
  {{ parameter_dict['coreutils'] }}/bin/dirname
228 229
# wrapper recipe needs the head command
  {{ parameter_dict['coreutils'] }}/bin/head
230 231 232 233 234
  {{ parameter_dict['imagemagick'] }}/bin/convert
  {{ parameter_dict['imagemagick'] }}/bin/identify
  {{ parameter_dict['poppler'] }}/bin/pdfinfo
  {{ parameter_dict['poppler'] }}/bin/pdftotext
  {{ parameter_dict['poppler'] }}/bin/pdftohtml
235
  {{ parameter_dict['onlyoffice-core'] }}/bin/x2t
236 237 238 239

# rest of parts are candidates for some generic stuff
[directory]
recipe = slapos.cookbook:mkdirectory
240
apache-conf = ${:etc}/apache
241
bin = ${buildout:directory}/bin
242 243 244
ca-dir = ${buildout:directory}/srv/ssl
certs = ${:ca-dir}/certs
crl = ${:ca-dir}/crl
245
etc = ${buildout:directory}/etc
246
font = ${:srv}/font
247
fontconfig-cache = ${buildout:directory}/.fontconfig
248 249 250 251
log = ${:var}/log
newcerts = ${:ca-dir}/newcerts
private = ${:ca-dir}/private
requests = ${:ca-dir}/requests
252 253
run = ${:var}/run
services = ${:etc}/run
254
srv = ${buildout:directory}/srv
255
var = ${buildout:directory}/var
256 257 258
framebuffer = ${:srv}/framebuffer

[xvfb-instance]
259 260 261 262 263 264 265 266 267 268 269 270
recipe = slapos.cookbook:wrapper
wrapper-path = ${directory:services}/${:_buildout_section_name_}
command-line =
  {{ parameter_dict["xserver"] }}/bin/Xvfb
    ${:display}
    -screen 0 1024x768x24
    -fbdir ${directory:framebuffer}
environment =
  XORG_LOCK_DIR=${:lock-dir}

display = :0
lock-dir = ${directory:run}
271 272 273 274 275

[wkhtmltopdf-on-xvfb]
recipe = slapos.cookbook:wrapper
wrapper-path = ${directory:bin}/wkhtmltopdf
environment =
276 277
  DISPLAY=${xvfb-instance:display}
  XORG_LOCK_DIR=${xvfb-instance:lock-dir}
278
command-line = {{ parameter_dict['wkhtmltopdf'] }}/wkhtmltopdf --use-xserver