--- # tasks file for ansible-role-mysql - assert: that: - ansible_os_family == 'Debian' - ansible_distribution_release in ['wheezy', 'jessie', 'stretch', 'precise', 'trusty', 'xenial'] - name: Get groups getent: database: group - name: Preseed root password when: mysql_root_password is defined with_items: - root_password - root_password_again debconf: name: '{{ mysql_server_package }}' question: 'mysql-server/{{ item }}' vtype: password value: '{{ mysql_root_password }}' changed_when: False # Can't verify previous password therefore there's always # a change, explicitly disable that. - name: APT install with_items: - mysql-server - mysql-client - python-mysqldb apt: name: '{{ item }}' state: present update_cache: yes cache_valid_time: 3600 - name: Reconfigure package in case root password was changed changed_when: False command: 'dpkg-reconfigure --frontend noninteractive {{ mysql_server_package }}' - name: Allow MySQL access to the TLS cert and key when: "'ssl-cert' in getent_group" user: append: yes groups: ssl-cert name: mysql notify: - Restart MySQL - name: Alias mail when: mysql_mail_alias is defined lineinfile: dest: /etc/aliases create: True line: 'mysql: {{ mysql_mail_alias }}' regexp: 'mysql:' state: present - name: Add admin account when: mysql_admin_password is defined mysql_user: name: admin host: '%' password: '{{ mysql_admin_password }}' priv: '*.*:ALL,GRANT,REQUIRESSL' login_password: '{{ mysql_root_password|default(omit) }}' state: present - name: Copy configuration templates with_fileglob: - templates/mysql/conf.d/*.cnf - '{{ playbook_dir }}/templates/mysql/conf.d/*.cnf' template: src: '{{ item }}' dest: /etc/mysql/conf.d owner: root group: root mode: 0o0644 notify: - Restart MySQL - meta: flush_handlers - name: Wait for service to come online wait_for: port: 3306 - include: backup.yml when: mysql_backup_password is defined