instance-neo.cfg.in 6.31 KB
Newer Older
1 2 3
{% macro section(name) %}{% do part_list.append(name) %}{{ name }}{% endmacro -%}
{% set part_list = [] -%}
{% set init_list = [] -%}
Vincent Pelletier's avatar
Vincent Pelletier committed
4

5
{% set private_tmpfs = slapparameter_dict.get('private-tmpfs') -%}
6 7 8 9 10
{% set storage_type = slapparameter_dict.get('storage-type') or (
     'MySQL' if mariadb_location is defined else 'SQLite') -%}
{% set mysql = storage_type == 'MySQL' -%}
{% if mysql -%}

11
[{{ section('mysqld') }}]
12 13 14 15 16 17 18 19 20 21
{% if private_tmpfs -%}
recipe = slapos.cookbook:wrapper
wrapper-path = ${directory:etc_run}/mariadb
private-tmpfs = {{ private_tmpfs }} ${my-cnf-parameters:tmp-directory}
command-line = ${mariadb-ns:rendered}
[mariadb-ns]
rendered = ${directory:bin}/mariadb-ns
{% else -%}
rendered = ${directory:etc_run}/mariadb
{% endif -%}
22 23 24 25 26
recipe = slapos.recipe.template:jinja2
template = {{ template_mysqld_wrapper }}
context =
  key defaults_file my-cnf:rendered
  key datadir my-cnf-parameters:data-directory
27 28

[my-cnf-parameters]
Vincent Pelletier's avatar
Vincent Pelletier committed
29
socket = ${directory:var_run}/mariadb.sock
30 31 32
{% if private_tmpfs -%}
data-directory = ${:tmp-directory}/mariadb
{% else -%}
33
data-directory = ${directory:srv}/mariadb
34
{% endif -%}
35
tmp-directory = ${directory:tmp}
36
pid-file = ${directory:var_run}/mariadb.pid
Vincent Pelletier's avatar
Vincent Pelletier committed
37 38
error-log = ${directory:log}/mariadb_error.log
slow-query-log = ${directory:log}/mariadb_slowquery.log
39
extra-dict = {{ dumps(slapparameter_dict.get('mysql', {})) }}
40
init-file = ${init-script:rendered}
41
engine = {{ slapparameter_dict.get('engine', '') }}
Vincent Pelletier's avatar
Vincent Pelletier committed
42

43 44
[my-cnf]
recipe = slapos.recipe.template:jinja2
45
extensions = jinja2.ext.do
46
rendered = ${directory:etc}/mariadb.cnf
47
template = {{ template_neo_my_cnf }}
48
context = section parameter_dict my-cnf-parameters
Vincent Pelletier's avatar
Vincent Pelletier committed
49

50
[binary-wrap-mysql]
51
recipe = slapos.cookbook:wrapper
52
command-line = '{{ mariadb_location }}/bin/${:command}' --defaults-file="${my-cnf:rendered}"
53 54 55
wrapper-path = ${directory:bin}/${:command}
command = mysql

56 57
{% endif -%}

58 59 60 61 62
[{{ section('binary-neolog') }}]
recipe = slapos.cookbook:symbolic.link
target-directory = ${directory:bin}
link-binary = {{ bin_directory }}/neolog

63 64 65
[publish]
recipe = slapos.cookbook:publish.serialised
# TODO: make port a partition parameter
66
ip = {{ "[%s]" % list(ipv6_set)[0] if ipv6_set else list(ipv4_set)[0] }}
67
{% set admin = slapparameter_dict.get('admin', 2050) -%}
68
{% set master = slapparameter_dict.get('master', 2051) -%}
69 70
{% if master -%}
port-master = {{ master }}
71
master = ${:ip}:${:port-master}
72 73 74 75 76
{% else -%}
master =
{% endif -%}
{% if admin -%}
port-admin = {{ admin }}
77
admin = ${:ip}:${:port-admin}
78
{%-   if 'monitor-passwd' in slapparameter_dict %}
Julien Muchembled's avatar
Julien Muchembled committed
79
monitor-base-url = ${monitor-publish-parameters:monitor-base-url}
80 81
{%-   endif %}
{%- else %}
82
admin =
83
{%- endif %}
Vincent Pelletier's avatar
Vincent Pelletier committed
84

85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
{#- Hack to deploy SSL certs via instance parameters #}
{%- for name, pem in zip(('ca.crt', 'neo.crt', 'neo.key'),
                        slapparameter_dict['ssl']) %}
{%-   if pem %}

[{{ section(name) }}]
recipe = slapos.recipe.template:jinja2
rendered = ${directory:etc}/{{name}}
template = inline:{{'{{'}}pem}}
context = key pem :pem
pem = {{dumps(pem)}}
{%-   endif %}
{%- endfor %}
{#- endhack #}

Vincent Pelletier's avatar
Vincent Pelletier committed
100 101 102
[neo-storage]
recipe = slapos.cookbook:neoppod.storage
binary = {{ bin_directory }}/neostorage
103
ip = ${publish:ip}
104
ssl = {{ dumps(bool(slapparameter_dict['ssl'])) }}
105
cluster = {{ dumps(slapparameter_dict['cluster']) }}
106
masters = {{ dumps(slapparameter_dict['masters']) }}
107
database-adapter = {{ storage_type }}
108
wait-database = -1
109
{%- if mysql %}
110
engine = ${my-cnf-parameters:engine}
111
{%- endif %}
112
dedup = {{ dumps(bool(slapparameter_dict.get('data-deduplication'))) }}
113
disable-drop-partitions = {{ dumps(bool(slapparameter_dict.get('disable-drop-partitions'))) }}
Vincent Pelletier's avatar
Vincent Pelletier committed
114

115 116 117 118 119 120
{% for i in range(slapparameter_dict.get('storage-count', 1)) -%}
{%   set storage_id = 'neo-storage-' ~ i -%}
[{{ section(storage_id) }}]
< = neo-storage
wrapper = ${directory:etc_run}/{{ 'neostorage-' ~ i }}
logfile = ${directory:log}/{{ 'neostorage-' ~ i }}.log
121 122
{%- if mysql %}
{%-   do init_list.append('CREATE DATABASE IF NOT EXISTS neo' ~  i ~ ';') %}
123
database-parameters = root@neo{{ i }}${my-cnf-parameters:socket}
124 125 126
{%- elif private_tmpfs %}
private-tmpfs = {{ private_tmpfs }} ${directory:tmp}
database-parameters = ${directory:tmp}/db.sqlite
127 128 129 130
{%- else %}
database-parameters = ${directory:db-{{i}}}/db.sqlite

[directory]
131
db-{{i}} = ${:srv}/{{ storage_id }}
132
{%- endif %}
133 134

[{{ section('logrotate-storage-' ~ i) }}]
135
< = logrotate-entry-base
136 137
name = {{ storage_id }}
log = {{ '${' +  storage_id + ':logfile}' }}
138
post = {{ bin_directory }}/slapos-kill -s RTMIN+1 -- {{ bin_directory }}/neostorage -l ${:log}
139 140 141

{% endfor -%}

Vincent Pelletier's avatar
Vincent Pelletier committed
142
[directory]
143
recipe = slapos.cookbook:mkdirectory
144
bin = ${buildout:directory}/bin
Vincent Pelletier's avatar
Vincent Pelletier committed
145 146 147 148
etc = ${buildout:directory}/etc
var = ${buildout:directory}/var
etc_run =  ${:etc}/run
var_run =  ${:var}/run
149
log = ${buildout:directory}/var/log
150
tmp = ${buildout:directory}/tmp
151
srv = ${buildout:directory}/srv
152

153
{% if mysql -%}
154 155 156 157 158 159
[init-script]
recipe = slapos.recipe.template:jinja2
# XXX: is there a better location ?
rendered = ${directory:etc}/mariadb_initial_setup.sql
template = inline:
  {{ init_list | join('\n\t') }}
Julien Muchembled's avatar
Julien Muchembled committed
160

161
[{{ section('logrotate-mysql') }}]
162
< = logrotate-entry-base
Julien Muchembled's avatar
Julien Muchembled committed
163 164
name = mariadb
log = ${my-cnf-parameters:error-log} ${my-cnf-parameters:slow-query-log}
165
post = ${binary-wrap-mysql:command-line} -e "FLUSH LOGS"
166

167 168 169
{% if runTestSuite_in is defined -%}
# bin/runTestSuite to run NEO tests
[{{ section('runTestSuite') }}]
170 171 172 173 174 175 176 177
{%- if private_tmpfs %}
recipe = slapos.cookbook:wrapper
wrapper-path = ${directory:bin}/${:_buildout_section_name_}
private-tmpfs = {{ private_tmpfs }} ${directory:tmp}
command-line = ${runTestSuite-ns:rendered}

[runTestSuite-ns]
{%- endif %}
178 179 180 181 182 183 184 185
recipe = slapos.recipe.template:jinja2
rendered = ${directory:bin}/${:_buildout_section_name_}
template = {{ runTestSuite_in }}
mode = 0755
context =
    section directory         directory
    section my_cnf_parameters my-cnf-parameters
    raw     bin_directory     {{ bin_directory }}
186
    raw     prepend_path      {{ mariadb_location }}/bin
187 188 189
{%- if pypy_location is defined %}
    raw     pypy_location     {{ pypy_location }}/bin/pypy
{%- endif %}
190 191 192 193 194 195 196
{%- if private_tmpfs %}
    key     datadir           my-cnf-parameters:data-directory
    key     results_directory directory:results

[directory]
results = ${directory:srv}/tests
{%- endif %}
197 198 199
{%- endif %}

{%- endif %}
200

201 202 203
[buildout]
extends =
  {{ logrotate_cfg }}
204
{%- if admin %}
205
  {{ admin_cfg }}
206
{%- endif %}
Julien Muchembled's avatar
Julien Muchembled committed
207 208 209
{%- if master %}
  {{ master_cfg }}
{%- endif %}
210 211
parts +=
  {{ '\n  '.join(part_list) }}