--- - name: Initialize fact create_database set_fact: create_database: true - name: Check for existing database shell: mysql -Bqe 'show databases' register: databases ignore_errors: true - name: Check for existing tables in database shell: "mysql {{ dbmail_db_name }} -Bqe 'show tables'" register: tables when: "dbmail_db_name in databases.stdout" - name: Update fact create_database set_fact: create_database: false when: - "dbmail_db_name in databases.stdout" - "'dbmail_users' in tables.stdout" - name: Create copy of create_tables to work with copy: remote_src: true src: /usr/src/dbmail-3.3.0/sql/mysql/create_tables.mysql dest: /tmp/create_tables.sql when: create_database - name: Fix index name for auto_notifications table lineinfile: path: /tmp/create_tables.sql firstmatch: true line: ' FOREIGN KEY an_user_idnr_fk (user_idnr)' search_string: ' FOREIGN KEY user_idnr_fk (user_idnr)' backup: yes when: create_database - name: Fix index name for auto_replies table lineinfile: path: /tmp/create_tables.sql firstmatch: true line: ' FOREIGN KEY ar_user_idnr_fk (user_idnr)' search_string: ' FOREIGN KEY user_idnr_fk (user_idnr)' backup: yes when: create_database - name: Create a new database from structure file mysql_db: name: "{{ dbmail_db_name }}" state: import target: /tmp/create_tables.sql collation: utf8_general_ci encoding: utf8 login_unix_socket: /var/run/mysqld/mysqld.sock when: create_database - name: Create database user with mail database privileges for remote access mysql_user: name: "{{ dbmail_db_user }}" host: "{{ lookup('dig', item) }}" password: "{{ dbmail_db_password }}" priv: "{{ dbmail_db_name }}.*:ALL" state: present login_unix_socket: /var/run/mysqld/mysqld.sock loop: "{{ ansible_play_hosts }}" - name: Create database user with mail database privileges for local access mysql_user: name: "{{ dbmail_db_user }}" password: "{{ dbmail_db_password }}" priv: "{{ dbmail_db_name }}.*:ALL" state: present login_unix_socket: /var/run/mysqld/mysqld.sock