Skip to content
Snippets Groups Projects
Select Git revision
  • ec0e2a765a587d0df94b0afb9f7a4ef78a5319ab
  • master default
  • v0.52.5
  • v0.52.4
  • v0.52.3
  • v0.52.2
  • v0.52.1
  • v0.52.0
  • v0.51.0
  • v0.50.0
  • v0.49.0
11 results

server.sls

Blame
  • user avatar
    Eric Veiras Galisson authored
    ec0e2a76
    History
    server.sls 6.00 KiB
    include:
      - .config
      - .python
    
    {%- 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') %}
    
    {%- if mysql_root_password %}
    {%- if os_family == 'Debian' %}
    mysql_debconf_utils:
      pkg.installed:
        - name: {{ mysql.debconf_utils }}
    
    mysql_debconf:
      debconf.set:
        - name: {{ mysql.serverpkg }}
        - data:
            '{{ mysql.serverpkg }}/start_on_boot': {'type': 'boolean', 'value': 'true'}
        - require_in:
          - pkg: {{ mysql.serverpkg }}
        - require:
          - pkg: mysql_debconf_utils
    
      {%- if 'osmajorrelease' in grains and salt['grains.get']('osmajorrelease')|int < 9 or not salt['grains.get']('os')|lower == 'debian' %}
    
    mysql_password_debconf:
      debconf.set:
        - name: mysql-server
        - data:
            'mysql-server/root_password': {'type': 'password', 'value': '{{ mysql_root_password }}'}
            'mysql-server/root_password_again': {'type': 'password', 'value': '{{ mysql_root_password }}'}
        - require_in:
          - pkg: {{ mysql.serverpkg }}
        - require:
          - pkg: mysql_debconf_utils
    
      {%- endif %}
    
    {%- elif os_family in ['RedHat', 'Suse', 'FreeBSD'] %}
    mysql_root_password:
      cmd.run:
        - 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;"
        - require:
          - service: mysqld-service-running
    
    {%- for host in {'localhost': '', 'localhost.localdomain': '', salt['grains.get']('fqdn'): ''}.keys() %}
    mysql_delete_anonymous_user_{{ host }}:
      mysql_user:
        - absent
        - host: {{ host or "''" }}
        - name: ''
        - connection_host: '{{ mysql_host }}'
        - connection_user: '{{ mysql_salt_user }}'
        {%- if mysql_salt_password %}
        - connection_pass: '{{ mysql_salt_password }}'
        {%- endif %}
        - connection_charset: utf8
        - require:
          - service: mysqld-service-running
          - pkg: mysql_python
          {%- if (mysql_salt_user == mysql_root_user) and mysql_root_password %}
          - cmd: mysql_root_password
          {%- endif %}
          {%- if (mysql_salt_user != mysql_root_user) %}
          - sls: mysql.salt-user
          {%- endif %}
    {%- endfor %}
    {%- endif %}
    {%- endif %}
    
    {%- if os_family == 'Arch' %}
    # on arch linux: inital mysql datadirectory is not created
    mysql_install_datadir:
      cmd.run:
    {%- if mysql.version is defined and mysql.version >= 5.7 %}
        - name: mysqld --initialize-insecure --user=mysql --basedir=/usr --datadir={{ mysql_datadir }}
    {%- else %}
        - name: mysql_install_db --user=mysql --basedir=/usr --datadir={{ mysql_datadir }}
    {%- endif %}
        - runas: root
        - creates: {{ mysql_datadir }}/mysql/user.frm
        - env:
            - TMPDIR: '/tmp'
        - require:
          - pkg: {{ mysql.serverpkg }}
          - file: mysql_config
        - require_in:
          - service: mysqld-service-running
    {%- endif %}
    
    mysqld-packages:
      pkg.installed:
        - name: {{ mysql.serverpkg }}
    {%- if os_family == 'Debian' and mysql_root_password %}
        - require:
          - debconf: mysql_debconf
    {%- endif %}
        - require_in:
          - file: mysql_config
    {%- if "config_directory" in mysql %}
          - file: mysql_config_directory
    {%- endif %}
    
    {%- if os_family in ['RedHat', 'Suse'] and mysql.version is defined and mysql.version >= 5.7 and mysql.serverpkg.lower() != 'mariadb-server' %}
    # Initialize mysql database with --initialize-insecure option before starting service so we don't get locked out.
    mysql_initialize:
      cmd.run:
        - name: mysqld --initialize-insecure --user=mysql --basedir=/usr --datadir={{ mysql_datadir }}
        - runas: root
        - creates: {{ mysql_datadir }}/mysql/
        - require:
          - pkg: {{ mysql.serverpkg }}
    {%- endif %}
    
    {%- if os_family in ['RedHat', 'Suse'] and mysql.serverpkg.lower() == 'mariadb-server' %}
    # For MariaDB it's enough to only create the datadir
    mysql_initialize:
      file.directory:
        - name: {{ mysql_datadir }}
        - user: mysql
        - group: mysql
        - makedirs: True
        - require:
          - pkg: {{ mysql.serverpkg }}
    {%- endif %}
    
    {%- if os_family in ['Gentoo'] %}
    mysql_initialize:
      cmd.run:
        - name: emerge --config {{ mysql.serverpkg }}
        - runas: root
        - creates: {{ mysql_datadir }}/mysql/
        - require:
          - pkg: {{ mysql.serverpkg }}
    {%- endif %}
    
    mysqld-service-running:
      service.running:
        - name: {{ mysql.service }}
        - enable: True
        - require:
          - pkg: {{ mysql.serverpkg }}
    {%- 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']) %}
          - cmd: mysql_initialize
    {%- elif os_family in ['RedHat', 'Suse'] and mysql.serverpkg.lower() == 'mariadb-server' %}
          - file: {{ mysql_datadir }}
    {%- endif %}
        - watch:
          - pkg: {{ mysql.serverpkg }}
          - file: mysql_config
    {%- if "config_directory" in mysql and "server_config" in mysql %}
          - file: mysql_server_config
    {%- endif %}
    
    mysql_what_is_status_of_{{ mysql.service }}:
      cmd.run:
        - names:
          - service {{ mysql.service }} status
        - onfail:
          - service: mysqld-service-running
    
    # 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
        - source: salt://{{ tpldir }}/files/usr-my.cnf
        - create: False
        - watch_in:
          - service: mysqld-service-running