instance-mariadb.cfg.in 8.57 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11
{% if software_type == slap_software_type -%}
{% set part_list = [] -%}
{% macro section(name) %}{% do part_list.append(name) %}{{ name }}{% endmacro -%}
{% set use_ipv6 = slapparameter_dict.get('use-ipv6', False) -%}
{% set database_list = slapparameter_dict.get('database-list', [{'name': 'erp5', 'user': 'user', 'password': 'insecure'}]) -%}
{% for database_count in range(slapparameter_dict.get('test-database-amount', 0)) -%}
{%   do database_list.append({'name': 'erp5_test_' ~ database_count, 'user': 'testuser_' ~ database_count, 'password': 'testpassword' ~ database_count}) -%}
{% endfor -%}
{% set catalog_backup = slapparameter_dict.get('catalog-backup', {}) -%}
{% set full_backup_retention_days = catalog_backup.get('full-retention-days', 7) -%}
{% set incremental_backup_retention_days = catalog_backup.get('incremental-retention-days', full_backup_retention_days) -%}
12 13

[publish-mariadb-url]
14 15 16 17 18 19 20 21 22 23 24 25
recipe = slapos.cookbook:publish.serialised
{% if use_ipv6 -%}
{%   set address = "[${my-cnf-parameters:ip}]" -%}
{% else -%}
{%   set address = "${my-cnf-parameters:ip}" -%}
{% endif -%}
{# TODO: support any number of databases -#}
{% set database = database_list[0] %}
url = mysql://{{ database['user'] }}:{{ database['password'] }}@{{ address }}:${my-cnf-parameters:port}/{{ database['name'] }}

{% if full_backup_retention_days > -1 -%}
[{{ section('cron-entry-mariadb-backup') }}]
26 27 28
<= cron
recipe = slapos.cookbook:cron.d
name = mariadb-backup
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
frequency = 0 22 * * *
{# When binlogs are enabled:
# flush-logs: used so no manipulation on binlogs is needed to restore from
#   full + binlogs. The first binlog after a dump starts from dump snapshot and
#   can be fully restored.
# master-data: use value "2" as we are not in a replication case
#}
command = "${binary-wrap-mysqldump:wrapper-path}" -u root --all-databases {% if incremental_backup_retention_days > -1 %}--flush-logs --master-data=2 {% endif %}| {{ parameter_dict['gzip-location'] }}/bin/gzip > "${directory:mariadb-backup-full}/$({{ parameter_dict['coreutils-location'] }}/bin/date "+%Y%m%d%H%M%S").sql.gz"
{# KEEP GLOB PATTERN IN SYNC with generated filenames above
#           YYYYmmddHHMMSS -#}
file-glob = ??????????????.sql.gz

{% if full_backup_retention_days > 0 -%}
[{{ section("cron-entry-mariadb-backup-expire") }}]
<= cron
recipe = slapos.cookbook:cron.d
name = mariadb-backup-expire
frequency = 0 22 * * *
command = {{ parameter_dict['findutils-location'] }}/bin/find "${directory:mariadb-backup-full}" -maxdepth 1 -name "${cron-entry-mariadb-backup:file-glob}" -daystart -mtime +{{ full_backup_retention_days }} -delete
{%- endif %}
{%- endif %}

[my-cnf-parameters]
{% if use_ipv6 -%}
ip = {{ (ipv6_set | list)[0] }}
{% else -%}
ip = {{ (ipv4_set | list)[0] }}
{% endif -%}
port = {{ slapparameter_dict['tcpv4-port'] }}
socket = ${directory:run}/mariadb.sock
data-directory = ${directory:mariadb-data}
pid-file = ${directory:run}/mariadb.pid
error-log = ${directory:log}/mariadb_error.log
slow-query-log = ${directory:log}/mariadb_slowquery.log
63 64 65
innodb-buffer-size = {{ dumps(slapparameter_dict.get('innodb-buffer-size', 0)) }}
innodb-log-file-size = {{ dumps(slapparameter_dict.get('innodb-log-file-size', 0)) }}
innodb-log-buffer-size = {{ dumps(slapparameter_dict.get('innodb-log-buffer-size', 0)) }}
66
relaxed-writes = {{ dumps(slapparameter_dict.get('mariadb-relaxed-writes', False)) }}
67 68 69 70
{% if incremental_backup_retention_days > -1 -%}
binlog-path = ${directory:mariadb-backup-incremental}/binlog
# XXX: binlog rotation happens along with other log's rotation
binlog-expire-days = {{ incremental_backup_retention_days }}
71 72
{% else %}
binlog-path =
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
{% endif -%}

[my-cnf]
recipe = slapos.recipe.template:jinja2
rendered = ${directory:etc}/mariadb.cnf
template = {{ parameter_dict['template-my-cnf'] }}
context = section parameter_dict my-cnf-parameters

[init-script-parameters]
database-list = {{ dumps(database_list) }}

[init-script]
recipe = slapos.recipe.template:jinja2
# XXX: is there a better location ?
rendered = ${directory:etc}/mariadb_initial_setup.sql
template = {{ parameter_dict['template-mariadb-initial-setup'] }}
context = section parameter_dict init-script-parameters

[update-mysql]
recipe = slapos.cookbook:generic.mysql.wrap_update_mysql
output = ${directory:services}/mariadb_update
binary = ${binary-wrap-mysql_upgrade:wrapper-path}
mysql = ${binary-wrap-mysql:wrapper-path}
init-script = ${init-script:rendered}
97
mysql_tzinfo_to_sql = ${binary-wrap-mysql_tzinfo_to_sql:wrapper-path}
98 99 100 101 102 103 104 105 106

[mysqld]
recipe = slapos.cookbook:generic.mysql.wrap_mysqld
output = ${directory:services}/mariadb
binary = {{ parameter_dict['mariadb-location'] }}/bin/mysqld
configuration-file = ${my-cnf:rendered}
data-directory = ${my-cnf-parameters:data-directory}
mysql-install-binary = {{ parameter_dict['mariadb-location'] }}/scripts/mysql_install_db
mysql-base-directory = {{ parameter_dict['mariadb-location'] }}
107 108 109 110

[mariadb-instance]
# Options
user = user
111
parallel-test-database-amount = {{ slapparameter_dict.get('test-database-amount', 30) }}
112 113 114 115 116 117 118 119 120
database = erp5
test-user = erp5_test
test-database = erp5_test
mysql-test-database-base = testdb
mysql-test-user-base = testuser

[logrotate]
recipe = slapos.cookbook:logrotate
# Binaries
121 122 123
logrotate-binary = {{ parameter_dict['logrotate-location'] }}/usr/sbin/logrotate
gzip-binary = {{ parameter_dict['gzip-location'] }}/bin/gzip
gunzip-binary = {{ parameter_dict['gzip-location'] }}/bin/gunzip
124
# Directories
125 126
wrapper = ${directory:bin}/logrotate
conf = ${directory:etc}/logrotate.conf
127 128
logrotate-entries = ${directory:logrotate-entries}
backup = ${directory:logrotate-backup}
129
state-file = ${directory:srv}/logrotate.status
130 131 132 133 134

[logrotate-entry-mariadb]
<= logrotate
recipe = slapos.cookbook:logrotate.d
name = mariadb
135
log = ${my-cnf-parameters:error-log} ${my-cnf-parameters:slow-query-log}
136
post = "${binary-wrap-mysql:wrapper-path}" -B -u root -e "FLUSH LOGS"
137 138 139

[cron]
recipe = slapos.cookbook:cron
140
dcrond-binary = {{ parameter_dict['dcron-location'] }}/sbin/crond
141 142 143 144
cron-entries = ${directory:cron-entries}
crontabs = ${directory:crontabs}
cronstamps = ${directory:cronstamps}
catcher = ${cron-simplelogger:wrapper}
145
binary = ${directory:services}/crond
146 147 148

[cron-simplelogger]
recipe = slapos.cookbook:simplelogger
149 150
wrapper = ${directory:bin}/cron_simplelogger
log = ${directory:log}/cron.log
151 152 153 154 155 156 157 158 159 160

[cron-entry-logrotate]
<= cron
recipe = slapos.cookbook:cron.d
name = logrotate
frequency = 0 0 * * *
command = ${logrotate:wrapper}

[binary-link]
recipe = slapos.cookbook:symbolic.link
161
target-directory = ${directory:bin}
162
link-binary =
163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188
  {{ parameter_dict['coreutils-location'] }}/bin/basename
  {{ parameter_dict['coreutils-location'] }}/bin/cat
  {{ parameter_dict['coreutils-location'] }}/bin/cp
  {{ parameter_dict['coreutils-location'] }}/bin/ls
  {{ parameter_dict['coreutils-location'] }}/bin/tr
  {{ parameter_dict['coreutils-location'] }}/bin/uname
  {{ parameter_dict['gettext-location'] }}/lib/gettext/hostname
  {{ parameter_dict['grep-location'] }}/bin/grep
  {{ parameter_dict['sed-location'] }}/bin/sed

[binary-wrap-base]
recipe = slapos.cookbook:wrapper
# Note: --defaults-file must be the first argument, otherwise wrapped binary
# will reject it.
command-line = "{{ parameter_dict['mariadb-location'] }}/bin/${:command}" --defaults-file="${my-cnf:rendered}"
wrapper-path = ${directory:bin}/${:command}
parameters-extra = true

[binary-wrap-mysql]
< = binary-wrap-base
command = mysql

[binary-wrap-mysqldump]
< = binary-wrap-base
command = mysqldump

189
[binary-wrap-mysql_upgrade]
190
< = binary-wrap-base
191 192 193 194 195
command = mysql_upgrade

[binary-wrap-mysql_tzinfo_to_sql]
< = binary-wrap-base
command = mysql_tzinfo_to_sql
196 197 198

[directory]
recipe = slapos.cookbook:mkdirectory
199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215
bin = ${buildout:directory}/bin
etc = ${buildout:directory}/etc
services = ${:etc}/run
promise = ${:etc}/promise
cron-entries = ${:etc}/cron.d
crontabs = ${:etc}/crontabs
cronstamps = ${:etc}/cronstamps
logrotate-entries = ${:etc}/logrotate.d
srv = ${buildout:directory}/srv
backup = ${:srv}/backup
mariadb-backup-full = ${:backup}/mariadb-full
mariadb-backup-incremental = ${:backup}/mariadb-incremental
logrotate-backup = ${:backup}/logrotate
mariadb-data = ${:srv}/mariadb
var = ${buildout:directory}/var
log = ${:var}/log
run = ${:var}/run
216

217 218
[promise]
recipe = slapos.cookbook:check_port_listening
219 220 221
path = ${directory:promise}/mariadb
hostname = ${my-cnf-parameters:ip}
port = ${my-cnf-parameters:port}
222

223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241
[buildout]
parts =
  publish-mariadb-url
  logrotate
  logrotate-entry-mariadb
  cron
  cron-entry-logrotate
  cron-entry-mariadb-backup
  cron-entry-mariadb-backup-expire
  binary-link
  update-mysql
  mysqld
  promise
  {{ part_list | join('\n  ') }}

eggs-directory = {{ eggs_directory }}
develop-eggs-directory = {{ develop_eggs_directory }}
offline = true
{% endif %}