2015-10-02 17:37:39 +02:00
include:
2018-05-18 13:40:36 +02:00
- .config
- .python
2015-10-02 17:37:39 +02:00
2019-12-02 14:55:41 +01:00
{%- from tpldir ~ "/map.jinja" import mysql with context %}
{%- set os = salt['grains.get']('os', None) %}
{%- set os_family = salt['grains.get']('os_family', None) %}
{%- set mysql_root_user = salt['pillar.get']('mysql:server:root_user', 'root') %}
{%- set mysql_root_password = salt['pillar.get']('mysql:server:root_password', salt['grains.get']('server_id')) %}
{%- set mysql_host = salt['pillar.get']('mysql:server:host', 'localhost') %}
{%- set mysql_salt_user = salt['pillar.get']('mysql:salt_user:salt_user_name', mysql_root_user) %}
{%- set mysql_salt_password = salt['pillar.get']('mysql:salt_user:salt_user_password', mysql_root_password) %}
{%- set mysql_datadir = salt['pillar.get']('mysql:server:mysqld:datadir', '/var/lib/mysql') %}
2020-10-30 10:48:17 +10:00
{%- set mysql_unix_socket = salt['pillar.get']('mysql:server:unix_socket', '') %}
2019-12-02 14:55:41 +01:00
{%- if mysql_root_password %}
{%- if os_family == 'Debian' %}
2014-11-25 17:42:08 +00:00
mysql_debconf_utils:
pkg.installed:
- name: {{ mysql.debconf_utils }}
2014-07-01 15:18:54 -04:00
mysql_debconf:
2014-05-12 11:04:24 -04:00
debconf.set:
2018-07-09 16:51:32 +02:00
- name: {{ mysql.serverpkg }}
2018-01-22 12:50:12 +00:00
- data:
2018-07-09 16:51:32 +02:00
'{{ mysql.serverpkg }}/start_on_boot': {'type': 'boolean', 'value': 'true'}
2018-01-22 12:50:12 +00:00
- require_in:
2018-06-24 14:37:18 +01:00
- pkg: {{ mysql.serverpkg }}
2018-01-22 12:50:12 +00:00
- require:
- pkg: mysql_debconf_utils
2019-12-02 14:55:41 +01:00
{%- if 'osmajorrelease' in grains and salt['grains.get']('osmajorrelease')|int < 9 or not salt['grains.get']('os')|lower == 'debian' %}
2018-12-06 09:24:07 +00:00
2018-01-22 12:50:12 +00:00
mysql_password_debconf:
debconf.set:
- name: mysql-server
2014-05-12 11:04:24 -04:00
- data:
2017-01-24 15:56:19 +00:00
'mysql-server/root_password': {'type': 'password', 'value': '{{ mysql_root_password }}'}
'mysql-server/root_password_again': {'type': 'password', 'value': '{{ mysql_root_password }}'}
2014-07-01 15:18:54 -04:00
- require_in:
2018-06-24 14:37:18 +01:00
- pkg: {{ mysql.serverpkg }}
2014-11-25 17:42:08 +00:00
- require:
- pkg: mysql_debconf_utils
2018-12-06 09:24:07 +00:00
2019-12-02 14:55:41 +01:00
{%- endif %}
2018-01-22 12:50:12 +00:00
2019-12-02 14:55:41 +01:00
{%- elif os_family in ['RedHat', 'Suse', 'FreeBSD'] %}
2014-07-01 15:18:54 -04:00
mysql_root_password:
cmd.run:
2018-03-16 23:48:25 +01:00
- name: mysqladmin --host "{{ mysql_host }}" --user {{ mysql_root_user }} password '{{ mysql_root_password|replace("'", "'\"'\"'") }}'
- unless: mysql --host "{{ mysql_host }}" --user {{ mysql_root_user }} --password='{{ mysql_root_password|replace("'", "'\"'\"'") }}' --execute="SELECT 1;"
2014-05-14 15:39:32 +04:00
- require:
2018-12-06 09:24:07 +00:00
- service: mysqld-service-running
2014-05-14 15:39:32 +04:00
2019-12-02 14:55:41 +01:00
{%- for host in {'localhost': '', 'localhost.localdomain': '', salt['grains.get']('fqdn'): ''}.keys() %}
2014-07-01 15:18:54 -04:00
mysql_delete_anonymous_user_{{ host }}:
2014-05-14 15:39:32 +04:00
mysql_user:
- absent
2014-10-09 17:32:39 +10:00
- host: {{ host or "''" }}
2014-05-14 15:39:32 +04:00
- name: ''
2015-04-15 19:06:07 +02:00
- connection_host: '{{ mysql_host }}'
2015-10-08 12:06:25 +02:00
- connection_user: '{{ mysql_salt_user }}'
2019-12-02 14:55:41 +01:00
{%- if mysql_salt_password %}
2015-10-08 12:06:25 +02:00
- connection_pass: '{{ mysql_salt_password }}'
2020-10-30 10:48:17 +10:00
{%- endif %}
{%- if mysql_unix_socket %}
- connection_unix_socket: '{{ mysql_unix_socket }}'
2019-12-02 14:55:41 +01:00
{%- endif %}
2014-08-05 22:14:11 +03:00
- connection_charset: utf8
2014-05-14 15:39:32 +04:00
- require:
2018-12-06 09:24:07 +00:00
- service: mysqld-service-running
2014-07-01 15:18:54 -04:00
- pkg: mysql_python
2015-10-08 12:06:25 +02:00
{%- if (mysql_salt_user == mysql_root_user) and mysql_root_password %}
2014-07-01 15:18:54 -04:00
- cmd: mysql_root_password
2014-05-14 15:39:32 +04:00
{%- endif %}
2017-03-09 22:16:34 +01:00
{%- if (mysql_salt_user != mysql_root_user) %}
- sls: mysql.salt-user
{%- endif %}
2019-12-02 14:55:41 +01:00
{%- endfor %}
{%- endif %}
{%- endif %}
2014-05-12 11:04:24 -04:00
2019-12-02 14:55:41 +01:00
{%- if os_family == 'Arch' %}
2015-09-29 18:55:24 +00:00
# on arch linux: inital mysql datadirectory is not created
2015-09-29 19:46:15 +00:00
mysql_install_datadir:
2015-09-29 18:55:24 +00:00
cmd.run:
2019-12-02 14:55:41 +01:00
{%- if mysql.version is defined and mysql.version >= 5.7 %}
2016-10-09 18:25:43 +00:00
- name: mysqld --initialize-insecure --user=mysql --basedir=/usr --datadir={{ mysql_datadir }}
2019-12-02 14:55:41 +01:00
{%- else %}
2016-10-09 18:25:43 +00:00
- name: mysql_install_db --user=mysql --basedir=/usr --datadir={{ mysql_datadir }}
2019-12-02 14:55:41 +01:00
{%- endif %}
2018-09-05 23:04:38 +02:00
- runas: root
2016-10-09 18:25:43 +00:00
- creates: {{ mysql_datadir }}/mysql/user.frm
2016-09-07 09:33:43 -07:00
- env:
- TMPDIR: '/tmp'
2015-09-29 18:55:24 +00:00
- require:
2018-06-24 14:37:18 +01:00
- pkg: {{ mysql.serverpkg }}
2015-09-29 18:55:24 +00:00
- file: mysql_config
- require_in:
2018-12-06 09:24:07 +00:00
- service: mysqld-service-running
2019-12-02 14:55:41 +01:00
{%- endif %}
2015-09-29 18:55:24 +00:00
2016-04-12 17:43:54 +02:00
mysqld-packages:
2014-07-01 15:18:54 -04:00
pkg.installed:
2018-06-24 14:37:18 +01:00
- name: {{ mysql.serverpkg }}
2019-12-02 14:55:41 +01:00
{%- if os_family == 'Debian' and mysql_root_password %}
2014-05-12 11:04:24 -04:00
- require:
2014-07-01 15:18:54 -04:00
- debconf: mysql_debconf
2019-12-02 14:55:41 +01:00
{%- endif %}
2016-12-25 16:24:25 +01:00
- require_in:
- file: mysql_config
2019-12-02 14:55:41 +01:00
{%- if "config_directory" in mysql %}
2018-11-14 13:40:18 +01:00
- file: mysql_config_directory
2019-12-02 14:55:41 +01:00
{%- endif %}
2016-04-12 17:43:54 +02:00
2019-12-02 14:55:41 +01:00
{%- if os_family in ['RedHat', 'Suse'] and mysql.version is defined and mysql.version >= 5.7 and mysql.serverpkg.lower() != 'mariadb-server' %}
2016-09-14 08:27:20 -07:00
# Initialize mysql database with --initialize-insecure option before starting service so we don't get locked out.
mysql_initialize:
cmd.run:
2016-10-09 18:25:43 +00:00
- name: mysqld --initialize-insecure --user=mysql --basedir=/usr --datadir={{ mysql_datadir }}
2018-09-05 23:04:38 +02:00
- runas: root
2019-10-09 14:34:51 +01:00
- creates: {{ mysql_datadir }}/mysql/
2016-09-14 08:27:20 -07:00
- require:
2018-06-24 14:37:18 +01:00
- pkg: {{ mysql.serverpkg }}
2019-12-02 14:55:41 +01:00
{%- endif %}
2016-09-14 08:27:20 -07:00
2019-12-02 14:55:41 +01:00
{%- if os_family in ['RedHat', 'Suse'] and mysql.serverpkg.lower() == 'mariadb-server' %}
2016-12-19 17:00:59 +01:00
# For MariaDB it's enough to only create the datadir
mysql_initialize:
file.directory:
- name: {{ mysql_datadir }}
- user: mysql
- group: mysql
- makedirs: True
- require:
2018-06-24 14:37:18 +01:00
- pkg: {{ mysql.serverpkg }}
2019-12-02 14:55:41 +01:00
{%- endif %}
2016-12-19 17:00:59 +01:00
2019-12-02 14:55:41 +01:00
{%- if os_family in ['Gentoo'] %}
2016-12-09 15:32:24 +01:00
mysql_initialize:
cmd.run:
2018-07-09 16:51:32 +02:00
- name: emerge --config {{ mysql.serverpkg }}
2018-09-05 23:04:38 +02:00
- runas: root
2019-10-09 14:34:51 +01:00
- creates: {{ mysql_datadir }}/mysql/
2016-12-09 15:32:24 +01:00
- require:
2018-06-24 14:37:18 +01:00
- pkg: {{ mysql.serverpkg }}
2019-12-02 14:55:41 +01:00
{%- endif %}
2016-12-09 15:32:24 +01:00
2020-08-25 09:45:37 +11:00
{%- if os_family in ['FreeBSD'] and mysql.serverpkg.lower() != 'mariadb-server' %}
mysql_initialize:
2020-08-27 16:00:27 +11:00
file.directory:
- name: /var/log/mysql
- user: mysql
- group: mysql
- mode: '0750'
2020-08-25 09:45:37 +11:00
cmd.run:
- name: /usr/local/libexec/mysqld --initialize-insecure --user=mysql --basedir=/usr/local --datadir={{ mysql_datadir }}
- runas: root
- creates: {{ mysql_datadir }}/mysql/
- require:
- pkg: {{ mysql.serverpkg }}
- file: /var/log/mysql
{%- endif %}
2018-12-06 09:24:07 +00:00
mysqld-service-running:
2014-07-01 15:18:54 -04:00
service.running:
2013-08-15 21:50:58 -06:00
- name: {{ mysql.service }}
2013-06-13 16:30:25 -06:00
- enable: True
2016-04-12 17:43:54 +02:00
- require:
2018-06-24 14:37:18 +01:00
- pkg: {{ mysql.serverpkg }}
2020-08-25 09:45:37 +11:00
{%- if (os_family in ['RedHat', 'Suse'] and mysql.version is defined and mysql.version >= 5.7 and mysql.serverpkg.lower() != 'mariadb-server') or (os_family in ['Gentoo', 'FreeBSD']) %}
2016-09-14 08:27:20 -07:00
- cmd: mysql_initialize
2019-12-02 14:55:41 +01:00
{%- elif os_family in ['RedHat', 'Suse'] and mysql.serverpkg.lower() == 'mariadb-server' %}
2016-12-19 17:00:59 +01:00
- file: {{ mysql_datadir }}
2019-12-02 14:55:41 +01:00
{%- endif %}
2013-08-15 16:56:33 -05:00
- watch:
2018-06-24 14:37:18 +01:00
- pkg: {{ mysql.serverpkg }}
2015-10-02 17:37:39 +02:00
- file: mysql_config
2019-12-02 14:55:41 +01:00
{%- if "config_directory" in mysql and "server_config" in mysql %}
2015-10-02 17:37:39 +02:00
- file: mysql_server_config
2019-12-02 14:55:41 +01:00
{%- endif %}
2015-02-11 02:21:31 +00:00
2018-10-01 16:35:13 +01:00
mysql_what_is_status_of_{{ mysql.service }}:
cmd.run:
- names:
- service {{ mysql.service }} status
- onfail:
2018-12-06 09:24:07 +00:00
- service: mysqld-service-running
2018-10-01 16:35:13 +01:00
2015-02-11 02:21:31 +00:00
# official oracle mysql repo
# creates this file, that rewrites /etc/mysql/my.cnf setting
# so, make it empty
mysql_additional_config:
file.managed:
- name: /usr/my.cnf
2018-05-18 13:40:36 +02:00
- source: salt://{{ tpldir }}/files/usr-my.cnf
2015-02-11 02:21:31 +00:00
- create: False
- watch_in:
2018-12-06 09:24:07 +00:00
- service: mysqld-service-running