-
Notifications
You must be signed in to change notification settings - Fork 365
/
Copy pathdatabase.sls
70 lines (63 loc) · 2.68 KB
/
database.sls
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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
63
64
65
66
67
68
69
70
{%- from tpldir ~ "/map.jinja" import mysql with context %}
{%- set mysql_root_user = salt['pillar.get']('mysql:server:root_user', 'root') %}
{%- set mysql_root_pass = salt['pillar.get']('mysql:server:root_password', salt['grains.get']('server_id')) %}
{%- set mysql_host = salt['pillar.get']('mysql:server:host', 'localhost') %}
{%- set db_states = [] %}
{%- set mysql_salt_user = salt['pillar.get']('mysql:salt_user:salt_user_name', mysql_root_user) %}
{%- set mysql_salt_pass = salt['pillar.get']('mysql:salt_user:salt_user_password', mysql_root_pass) %}
{%- set mysql_unix_socket = mysql.config.sections.mysqld.socket %}
include:
- .python
{%- for database_obj in salt['pillar.get']('mysql:database', []) %}
{%- set state_id = 'mysql_db_' ~ loop.index0 %}
{%- if not database_obj %}{# in case database_obj == [] #}
{%- continue %}
{%- elif database_obj is mapping %}
{%- set database = database_obj.get('name') %}
{%- set present = database_obj.get('present', True) %}
{%- else %}
{%- set database = database_obj %}
{%- set present = True %}
{%- endif %}
{{ state_id }}:
{%- if present %}
mysql_database.present:
{%- if database_obj is mapping %}
- character_set: {{ database_obj.get('character_set', '') }}
- collate: {{ database_obj.get('collate', '') }}
{%- endif %}
{%- else %}
mysql_database.absent:
{%- endif %}
- name: {{ database }}
- connection_host: '{{ mysql_host }}'
- connection_user: '{{ mysql_salt_user }}'
{%- if mysql_salt_pass %}
- connection_pass: '{{ mysql_salt_pass }}'
{%- endif %}
- connection_charset: utf8
{%- if mysql_unix_socket %}
- connection_unix_socket: '{{ mysql_unix_socket }}'
{% endif %}
{%- if salt['pillar.get'](['mysql', 'schema', database, 'load']|join(':'), False) %}
{{ state_id }}_schema:
file.managed:
- name: /etc/mysql/{{ database }}.schema
- source: {{ salt['pillar.get'](['mysql', 'schema', database, 'source']|join(':')) }}
{%- set template_type = salt['pillar.get'](['mysql', 'schema', database, 'template']|join(':'), False) %}
{%- set template_context = salt['pillar.get'](['mysql', 'schema', database, 'context']|join(':'), {}) %}
{%- if template_type %}
- template: {{ template_type }}
- context: {{ template_context|yaml }}
{%- endif %}
- user: {{ salt['pillar.get']('mysql:server:user', 'mysql') }}
- makedirs: True
{{ state_id }}_load:
cmd.wait:
- name: mysql -u {{ mysql_salt_user }} -h{{ mysql_host }} {% if mysql_salt_pass %}-p{%- endif %}{{ mysql_salt_pass }} {{ database }} < /etc/mysql/{{ database }}.schema
- watch:
- file: {{ state_id }}_schema
- mysql_database: {{ state_id }}
{%- endif %}
{%- do db_states.append(state_id) %}
{%- endfor %}