{%- if pillar.get('mysql', {}).server is defined %} {%- from "mysql/map.jinja" import mysql_connection_args as connection with context %} {%- set server = pillar.mysql.server %} {%- for database_name, database in server.get('database', {}).iteritems() %} mysql_database_{{ database_name }}: mysql_database.present: - name: {{ database_name }} - character_set: {{ database.get('encoding', 'utf8') }} #- connection_user: {{ connection.user }} #- connection_pass: {{ connection.password }} #- connection_charset: {{ connection.charset }} {%- if grains.get('noservices') %} - onlyif: /bin/false {%- endif %} {%- for user in database.get('users', {}) %} mysql_user_{{ user.name }}_{{ database_name }}_{{ user.host }}: mysql_user.present: - host: '{{ user.host }}' - name: '{{ user.name }}' {%- if user.password is defined %} - password: {{ user.password }} {%- else %} - allow_passwordless: true {%- endif %} #- connection_user: {{ connection.user }} #- connection_pass: {{ connection.password }} #- connection_charset: {{ connection.charset }} {%- if grains.get('noservices') %} - onlyif: /bin/false {%- endif %} mysql_grants_{{ user.name }}_{{ database_name }}_{{ user.host }}: mysql_grants.present: - grant: {{ user.rights }} - database: {{ user.get('database', database_name + '.*') }} - user: '{{ user.name }}' - host: '{{ user.host }}' - ssl_option: {{ user.get('ssl_option', False) }} #- connection_user: {{ connection.user }} #- connection_pass: {{ connection.password }} #- connection_charset: {{ connection.charset }} - require: - mysql_user: mysql_user_{{ user.name }}_{{ database_name }}_{{ user.host }} - mysql_database: mysql_database_{{ database_name }} {%- if grains.get('noservices') %} - onlyif: /bin/false {%- endif %} {%- endfor %} {%- if database.initial_data is defined %} /root/mysql/scripts/restore_{{ database_name }}.sh: file.managed: - source: salt://mysql/conf/restore.sh - mode: 770 - template: jinja - defaults: database_name: {{ database_name }} database: {{ database }} - require: - file: mysql_dirs - mysql_database: mysql_database_{{ database_name }} restore_mysql_database_{{ database_name }}: cmd.run: - name: /root/mysql/scripts/restore_{{ database_name }}.sh - unless: "[ -f /root/mysql/flags/{{ database_name }}-installed ]" - cwd: /root - require: - file: /root/mysql/scripts/restore_{{ database_name }}.sh {%- endif %} {%- endfor %} {%- for user in server.get('users', []) %} {%- for host in user.get('hosts', user.get('host', 'localhost'))|sequence %} mysql_user_{{ user.name }}_{{ host }}: mysql_user.present: - host: '{{ host }}' - name: '{{ user.name }}' {%- if user['password_hash'] is defined %} - password_hash: '{{ user.password_hash }}' {%- elif user['password'] is defined and user['password'] != None %} - password: '{{ user.password }}' {%- else %} - allow_passwordless: True {%- endif %} #- connection_user: {{ connection.user }} #- connection_pass: {{ connection.password }} #- connection_charset: {{ connection.charset }} {%- if grains.get('noservices') %} - onlyif: /bin/false {%- endif %} {%- if 'grants' in user %} mysql_user_{{ user.name }}_{{ host }}_grants: mysql_grants.present: - name: {{ user.name }} - grant: {{ user['grants']|sequence|join(",") }} - database: '{{ user.get('database','*.*') }}' - grant_option: {{ user['grant_option'] | default(False) }} - user: {{ user.name }} - host: '{{ host }}' - ssl_option: {{ user.get('ssl_option', False) }} #- connection_user: {{ connection.user }} #- connection_pass: {{ connection.password }} #- connection_charset: {{ connection.charset }} - require: - mysql_user_{{ user.name }}_{{ host }} {%- if grains.get('noservices') %} - onlyif: /bin/false {%- endif %} {%- endif %} {%- if 'databases' in user %} {%- for db in user['databases'] %} mysql_user_{{ user.name }}_{{ host }}_grants_db_{{ db.database }}_{{ loop.index0 }}: mysql_grants.present: - name: {{ user.name ~ '_' ~ db['database'] ~ '_' ~ db['table'] | default('all') }} - grant: {{ db['grants']|sequence|join(",") }} - database: '{{ db['database'] }}.{{ db['table'] | default('*') }}' - grant_option: {{ db['grant_option'] | default(False) }} - user: {{ user.name }} - host: '{{ host }}' - ssl_option: {{ db.get('ssl_option', False) }} #- connection_user: {{ connection.user }} #- connection_pass: {{ connection.password }} #- connection_charset: {{ connection.charset }} - require: - mysql_user_{{ user.name }}_{{ host }} # the following line is not mandatory as database might not be managed by salt formula #- mysql_database_{{ db.database }} {%- if grains.get('noservices') %} - onlyif: /bin/false {%- endif %} {%- endfor %} {%- endif %} {%- endfor %} {%- endfor %} {%- endif %}