instance-neo.cfg.in 5.7 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 6 7 8 9
{% set storage_type = slapparameter_dict.get('storage-type') or (
     'MySQL' if mariadb_location is defined else 'SQLite') -%}
{% set mysql = storage_type == 'MySQL' -%}
{% if mysql -%}

10 11 12 13 14
[mysqld]
recipe = slapos.cookbook:generic.mysql.wrap_mysqld
output = ${directory:etc_run}/mariadb
binary = ${:mysql-base-directory}/bin/mysqld
configuration-file = ${my-cnf:rendered}
Vincent Pelletier's avatar
Vincent Pelletier committed
15
data-directory = ${directory:srv_mariadb}
16 17 18 19
mysql-install-binary = ${:mysql-base-directory}/scripts/mysql_install_db
mysql-base-directory = {{ mariadb_location }}

[my-cnf-parameters]
Vincent Pelletier's avatar
Vincent Pelletier committed
20
socket = ${directory:var_run}/mariadb.sock
21
data-directory = ${mysqld:data-directory}
22
tmp-directory = ${directory:tmp}
23
pid-file = ${directory:var_run}/mariadb.pid
Vincent Pelletier's avatar
Vincent Pelletier committed
24 25
error-log = ${directory:log}/mariadb_error.log
slow-query-log = ${directory:log}/mariadb_slowquery.log
26
extra-dict = {{ dumps(slapparameter_dict.get('mysql', {})) }}
27
init-file = ${init-script:rendered}
28
engine = {{ slapparameter_dict.get('engine', '') }}
Vincent Pelletier's avatar
Vincent Pelletier committed
29

30 31
[my-cnf]
recipe = slapos.recipe.template:jinja2
32
extensions = jinja2.ext.do
33
rendered = ${directory:etc}/mariadb.cnf
34
template = {{ template_neo_my_cnf }}
35
context = section parameter_dict my-cnf-parameters
Vincent Pelletier's avatar
Vincent Pelletier committed
36

37 38 39 40 41 42
[{{ section('binary-wrap-mysql') }}]
recipe = slapos.cookbook:wrapper
command-line = ${mysqld:mysql-base-directory}/bin/${:command} --defaults-file=${my-cnf:rendered}
wrapper-path = ${directory:bin}/${:command}
command = mysql

43 44
{% endif -%}

45 46 47 48 49
[{{ section('binary-neolog') }}]
recipe = slapos.cookbook:symbolic.link
target-directory = ${directory:bin}
link-binary = {{ bin_directory }}/neolog

50 51 52
{% set master_list = [] -%}
{% set admin_list = [] -%}
{% for k, v in slapparameter_dict.iteritems() -%}
53
{%   if k.startswith('master-') and v -%}
54 55
{%     do master_list.append(v) -%}
{%   endif -%}
56
{%   if k.startswith('admin-') and v -%}
57 58 59 60 61 62 63
{%     do admin_list.append(v) -%}
{%   endif -%}
{% endfor -%}

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

84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
{#- 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
99 100 101
[neo-storage]
recipe = slapos.cookbook:neoppod.storage
binary = {{ bin_directory }}/neostorage
102
ip = ${publish:ip}
103
ssl = {{ dumps(bool(slapparameter_dict['ssl'])) }}
104
cluster = {{ dumps(slapparameter_dict['cluster']) }}
105
masters = ${publish:masters}
106
database-adapter = {{ storage_type }}
107
wait-database = -1
108
engine = ${my-cnf-parameters:engine}
109
dedup = {{ dumps(bool(slapparameter_dict.get('data-deduplication'))) }}
110
disable-drop-partitions = {{ dumps(bool(slapparameter_dict.get('disable-drop-partitions'))) }}
Vincent Pelletier's avatar
Vincent Pelletier committed
111

112 113 114 115 116 117
{% 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
118 119
{%- if mysql %}
{%-   do init_list.append('CREATE DATABASE IF NOT EXISTS neo' ~  i ~ ';') %}
120
database-parameters = root@neo{{ i }}${my-cnf-parameters:socket}
121 122 123 124 125 126
{%- else %}
database-parameters = ${directory:db-{{i}}}/db.sqlite

[directory]
db-{{i}} = ${buildout:directory}/srv/{{ storage_id }}
{%- endif %}
127 128

[{{ section('logrotate-storage-' ~ i) }}]
129
< = logrotate-entry-base
130 131
name = {{ storage_id }}
log = {{ '${' +  storage_id + ':logfile}' }}
132
post = {{ bin_directory }}/slapos-kill -s RTMIN+1 -- {{ bin_directory }}/neostorage -l ${:log}
133 134 135

{% endfor -%}

Vincent Pelletier's avatar
Vincent Pelletier committed
136
[directory]
137 138
recipe = slapos.cookbook:mkdirectory
promises = ${buildout:directory}/etc/promises
139
bin = ${buildout:directory}/bin
Vincent Pelletier's avatar
Vincent Pelletier committed
140 141 142 143
etc = ${buildout:directory}/etc
var = ${buildout:directory}/var
etc_run =  ${:etc}/run
var_run =  ${:var}/run
144
log = ${buildout:directory}/var/log
145
tmp = ${buildout:directory}/tmp
146 147 148 149 150 151 152 153 154
{% if mysql -%}
srv_mariadb = ${buildout:directory}/srv/mariadb

[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
155

156
[{{ section('logrotate-mysql') }}]
157
< = logrotate-entry-base
Julien Muchembled's avatar
Julien Muchembled committed
158 159 160
name = mariadb
log = ${my-cnf-parameters:error-log} ${my-cnf-parameters:slow-query-log}
post = ${mysqld:mysql-base-directory}/bin/mysql --defaults-file="${my-cnf:rendered}" -e "FLUSH LOGS"
161

162 163 164 165 166 167 168 169 170 171 172
{% if runTestSuite_in is defined -%}
# bin/runTestSuite to run NEO tests
[{{ section('runTestSuite') }}]
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 }}
173
    raw     prepend_path      ${mysqld:mysql-base-directory}/bin
174 175 176
{%- endif %}

{%- endif %}
177

178 179 180
[buildout]
extends =
  {{ logrotate_cfg }}
181
{%- if master %}
182
  {{ master_cfg }}
183 184
{%- endif %}
{%- if admin %}
185
  {{ admin_cfg }}
186
{%- endif %}
187 188
parts +=
  {{ '\n  '.join(part_list) }}