diff --git a/.ansible-lint b/.ansible-lint new file mode 100644 index 0000000..f99f65f --- /dev/null +++ b/.ansible-lint @@ -0,0 +1,2 @@ +enable_list: + - fqcn-builtins diff --git a/handlers/main.yml b/handlers/main.yml index f996c3d..3b0c2ba 100644 --- a/handlers/main.yml +++ b/handlers/main.yml @@ -1,7 +1,7 @@ --- - name: restart mariadb - service: + ansible.builtin.service: name: "{{ mariadb_service_name }}" state: restarted when: mariadb_notify_restart diff --git a/tasks/galera/bootstrap.yml b/tasks/galera/bootstrap.yml index 2616c0d..e9bfd2a 100644 --- a/tasks/galera/bootstrap.yml +++ b/tasks/galera/bootstrap.yml @@ -1,29 +1,29 @@ --- - name: SET_FACT | Prepare mark var - set_fact: + ansible.builtin.set_fact: __mark: "{{ mariadb_datadir }}/.ansible_galera_boostrap" - name: STAT | Bootstrap mark - stat: + ansible.builtin.stat: path: "{{ __mark }}" register: s - block: - name: SET_FACT | We must NOT restart after bootstrap! - set_fact: + ansible.builtin.set_fact: mariadb_notify_restart: false - name: SERVICE | Stop MariaDB - service: + ansible.builtin.service: name: "{{ mariadb_service_name }}" state: stopped - name: COMMAND | Bootstrap first node (systemd) - command: galera_new_cluster + ansible.builtin.command: galera_new_cluster when: ansible_service_mgr == 'systemd' - name: SERVICE | Bootstrap first node (clean init) - service: + ansible.builtin.service: name: "{{ mariadb_service_name }}" state: "started" arguments: --wsrep-new-cluster @@ -33,6 +33,6 @@ when: not s.stat.exists or mariadb_galera_resetup - name: COMMAND | Create Bootstrap mark - command: "touch {{ __mark }}" + ansible.builtin.command: "touch {{ __mark }}" args: creates: "{{ __mark }}" diff --git a/tasks/galera/main.yml b/tasks/galera/main.yml index e2f4c27..6458516 100644 --- a/tasks/galera/main.yml +++ b/tasks/galera/main.yml @@ -1,11 +1,11 @@ --- - name: APT | Install Galera - apt: + ansible.builtin.apt: pkg: "{{ mariadb_galera_package_name }}" - name: TEMPLATE | Deploy Galera configuration - template: + ansible.builtin.template: src: etc/mysql/mariadb.conf.d/20-galera.cnf.j2 dest: /etc/mysql/mariadb.conf.d/20-galera.cnf mode: 0644 @@ -14,15 +14,15 @@ register: galeraconfig - name: INCLUDE | Bootstrap first node - import_tasks: 'bootstrap.yml' + ansible.builtin.import_tasks: 'bootstrap.yml' when: inventory_hostname == mariadb_galera_primary_node - name: INCLUDE | Configure other nodes - import_tasks: 'nodes.yml' + ansible.builtin.import_tasks: 'nodes.yml' when: inventory_hostname != mariadb_galera_primary_node - name: SERVICE | Restart MariaDB if needed - service: + ansible.builtin.service: name: "{{ mariadb_service_name }}" state: restarted when: diff --git a/tasks/galera/nodes.yml b/tasks/galera/nodes.yml index 71b8069..c84f697 100644 --- a/tasks/galera/nodes.yml +++ b/tasks/galera/nodes.yml @@ -1,25 +1,25 @@ --- - name: COMMAND | GET debian.cnf from primary node - command: cat /etc/mysql/debian.cnf + ansible.builtin.command: cat /etc/mysql/debian.cnf register: debiancnf delegate_to: '{{ mariadb_galera_primary_node }}' changed_when: false - name: COMMAND | Get current debian.cnf - command: cat /etc/mysql/debian.cnf + ansible.builtin.command: cat /etc/mysql/debian.cnf register: ondc changed_when: false - block: - name: SERVICE | Stop MariaDB - service: + ansible.builtin.service: name: "{{ mariadb_service_name }}" state: stopped - name: COPY | Paste primary node's debian.cnf - copy: + ansible.builtin.copy: content: "{{ debiancnf.stdout }}" dest: /etc/mysql/debian.cnf mode: 0600 @@ -28,7 +28,7 @@ register: paste - name: SERVICE | Start MariaDB - service: + ansible.builtin.service: name: "{{ mariadb_service_name }}" state: started diff --git a/tasks/install/main.yml b/tasks/install/main.yml index b9d14f7..caea5ab 100644 --- a/tasks/install/main.yml +++ b/tasks/install/main.yml @@ -1,13 +1,13 @@ --- - name: INCLUDE | Setup MariaDB repository - import_tasks: 'mariadb/upstream.yml' + ansible.builtin.import_tasks: 'mariadb/upstream.yml' when: mariadb_origin == 'upstream' - name: INCLUDE | Install MariaDB - import_tasks: 'mariadb/default.yml' + ansible.builtin.import_tasks: 'mariadb/default.yml' - name: APT | Install few MariaDB related tools - apt: + ansible.builtin.apt: pkg: "{{ mariadb_tools }}" install_recommends: false diff --git a/tasks/install/mariadb/default.yml b/tasks/install/mariadb/default.yml index 7e5566d..a1e4fbb 100644 --- a/tasks/install/mariadb/default.yml +++ b/tasks/install/mariadb/default.yml @@ -1,5 +1,5 @@ --- - name: APT | Install MariaDB server - apt: + ansible.builtin.apt: pkg: mariadb-server diff --git a/tasks/install/mariadb/upstream.yml b/tasks/install/mariadb/upstream.yml index 979a471..8fced76 100644 --- a/tasks/install/mariadb/upstream.yml +++ b/tasks/install/mariadb/upstream.yml @@ -1,17 +1,17 @@ --- - name: APT | Install GPG - apt: + ansible.builtin.apt: name: gpg - name: APT_KEY | Install MariaDB key - apt_key: + ansible.builtin.apt_key: keyserver: "{{ mariadb_key_server }}" id: "{{ item }}" loop: "{{ mariadb_key_ids }}" - name: TEMPLATE | Deploy APT pinning (prevent upgrades from Debian) - template: + ansible.builtin.template: src: etc/apt/preferences.d/95-mariadb.j2 dest: /etc/apt/preferences.d/95-mariadb mode: 0644 @@ -19,10 +19,10 @@ group: root - name: APT_REPOSITORY | Add MariaDB repository - apt_repository: + ansible.builtin.apt_repository: repo: 'deb {{ mariadb_repository }} {{ ansible_distribution_release }} main' - name: APT_REPOSITORY | Add MariaDB (src) repository - apt_repository: + ansible.builtin.apt_repository: repo: 'deb-src {{ mariadb_repository }} {{ ansible_distribution_release }} main' when: mariadb_upstream_apt_src diff --git a/tasks/main.yml b/tasks/main.yml index 1497f92..6c06144 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -1,7 +1,7 @@ --- - name: INCLUDE_VARS | Extra variables - include_vars: "{{ lookup('first_found', params) }}" + ansible.builtin.include_vars: "{{ lookup('first_found', params) }}" vars: params: files: @@ -11,16 +11,16 @@ - 'vars' - name: STAT | Check if mysql exists - stat: + ansible.builtin.stat: path: /usr/sbin/mysqld register: mariadb_exists changed_when: false - name: INCLUDE | Install - import_tasks: install/main.yml + ansible.builtin.import_tasks: install/main.yml - name: TEMPLATE | Deploy config files - template: + ansible.builtin.template: src: "{{ item }}" dest: "/{{ item | replace('.j2', '') }}" mode: 0644 @@ -37,7 +37,7 @@ - name: SERVICE | Restart Mariadb now one at a time (prevent bugs) throttle: 1 - service: + ansible.builtin.service: name: "{{ mariadb_service_name }}" state: restarted when: @@ -45,29 +45,29 @@ not mariadb_galera_resetup - name: SERVICE | Ensure service is started - service: + ansible.builtin.service: name: "{{ mariadb_service_name }}" state: started - name: INCLUDE | Galera - import_tasks: galera/main.yml + ansible.builtin.import_tasks: galera/main.yml when: mariadb_use_galera - name: INCLUDE | Replication - import_tasks: replication/main.yml + ansible.builtin.import_tasks: replication/main.yml when: mariadb_replication_master or mariadb_replication_slave - name: INCLUDE | Secure install - import_tasks: 'secure.yml' + ansible.builtin.import_tasks: 'secure.yml' - name: MYSQL_DB | Create databases - mysql_db: + community.mysql.mysql_db: name: "{{ item }}" state: present loop: "{{ mariadb_databases }}" - name: MYSQL_USER | Manages users... - mysql_user: + community.mysql.mysql_user: name: "{{ item.name }}" password: "{{ item.password }}" priv: "{{ item.priv }}" diff --git a/tasks/replication/main.yml b/tasks/replication/main.yml index d719cfd..cf26dad 100644 --- a/tasks/replication/main.yml +++ b/tasks/replication/main.yml @@ -1,9 +1,9 @@ --- - name: INCLUDE | Replication Master - import_tasks: master.yml + ansible.builtin.import_tasks: master.yml when: mariadb_replication_master - name: INCLUDE | Replication slave - import_tasks: slave.yml + ansible.builtin.import_tasks: slave.yml when: mariadb_replication_slave diff --git a/tasks/replication/master.yml b/tasks/replication/master.yml index 797273f..04b11c9 100644 --- a/tasks/replication/master.yml +++ b/tasks/replication/master.yml @@ -1,7 +1,7 @@ --- - name: TEMPLATE | Deploy master configuration - template: + ansible.builtin.template: src: etc/mysql/mariadb.conf.d/40-master.cnf.j2 dest: /etc/mysql/mariadb.conf.d/40-master.cnf mode: 0644 diff --git a/tasks/replication/slave.yml b/tasks/replication/slave.yml index 71ff947..162a313 100644 --- a/tasks/replication/slave.yml +++ b/tasks/replication/slave.yml @@ -1,13 +1,13 @@ --- - name: MYSQL_VARIABLES | Set read only - mysql_variables: + community.mysql.mysql_variables: variable: read_only value: 'ON' when: mariadb_slave_readonly - name: TEMPLATE | Deploy slave configuration - template: + ansible.builtin.template: src: etc/mysql/mariadb.conf.d/40-slave.cnf.j2 dest: /etc/mysql/mariadb.conf.d/40-slave.cnf mode: 0644 @@ -16,21 +16,21 @@ notify: restart mariadb - name: MYSQL_REPLICATION | Get slave status - mysql_replication: + community.mysql.mysql_replication: mode: getslave ignore_errors: true register: slave_status - name: INCLUDE | Import data - import_tasks: slave/import_data.yml + ansible.builtin.import_tasks: slave/import_data.yml when: (slave_status.failed or not slave_status.Is_Slave) and mariadb_slave_import_data - name: Configure GTID Recplication - import_tasks: slave/gtid.yml + ansible.builtin.import_tasks: slave/gtid.yml when: slave_status.failed or not slave_status.Is_Slave or mariadb_slave_force_setup - name: MYSQL_REPLICATION | Get slave status - mysql_replication: + community.mysql.mysql_replication: mode: getslave ignore_errors: true register: slave_status diff --git a/tasks/replication/slave/gtid.yml b/tasks/replication/slave/gtid.yml index c036e0b..5aae329 100644 --- a/tasks/replication/slave/gtid.yml +++ b/tasks/replication/slave/gtid.yml @@ -1,11 +1,11 @@ --- - name: MYSQL_REPLICATION | Stop slave - mysql_replication: + community.mysql.mysql_replication: mode: stopslave - name: MYSQL_REPLICATION | Configure master host - mysql_replication: + community.mysql.mysql_replication: mode: changemaster master_host: "{{ mariadb_replication_host }}" master_port: "{{ mariadb_replication_port }}" @@ -14,9 +14,9 @@ no_log: "{{ not mariadb_debug_role }}" - name: MYSQL_REPLICATION | Setup replication with GTID - mysql_replication: + community.mysql.mysql_replication: primary_use_gtid: current_pos - name: MYSQL_REPLICATION | Start slave - mysql_replication: + community.mysql.mysql_replication: mode: startslave diff --git a/tasks/replication/slave/import_data.yml b/tasks/replication/slave/import_data.yml index 6658e56..f6187f9 100644 --- a/tasks/replication/slave/import_data.yml +++ b/tasks/replication/slave/import_data.yml @@ -1,7 +1,7 @@ --- - name: FILE | Create SSH client dir - file: + ansible.builtin.file: path: "{{ ansible_env.HOME }}/.ssh" state: directory mode: 0700 @@ -14,13 +14,13 @@ - block: - name: AUTHORIZED_KEY | Auth slave to backup host - authorized_key: + ansible.posix.authorized_key: user: "{{ mariadb_backup_user }}" state: present key: "{{ gen_ssh.public_key }}" - name: FILE | Create backup directory - file: + ansible.builtin.file: path: "{{ mariadb_backup_dir }}" state: directory mode: 0755 @@ -28,13 +28,13 @@ group: root - name: COMMAND | Prepare backup another server - command: "mariabackup --backup -u root --target-dir={{ mariadb_backup_dir }}" + ansible.builtin.command: "mariabackup --backup -u root --target-dir={{ mariadb_backup_dir }}" args: creates: "{{ mariadb_backup_dir }}/xtrabackup_info" register: backup - name: COMMAND | Dump - command: "mariabackup --prepare --target-dir={{ mariadb_backup_dir }}" + ansible.builtin.command: "mariabackup --prepare --target-dir={{ mariadb_backup_dir }}" when: backup.changed register: prep changed_when: "'This target seems to be not prepared yet' in prep.stderr" @@ -42,27 +42,27 @@ delegate_to: "{{ mariadb_slave_import_from }}" - name: MYSQL_VARIABLES | Get datadir - mysql_variables: + community.mysql.mysql_variables: variable: datadir register: datadir - name: SET_FACT | Get MariaDB datadir - set_fact: + ansible.builtin.set_fact: mariadb_datadir: "{{ datadir.msg }}" - name: SERVICE | Stop MariaDB before importing data - service: + ansible.builtin.service: name: "{{ mariadb_service_name }}" state: stopped - name: COMMAND | Sync backup to slave - TODO remove vagrant as static user (see why mariadb_backup_user is not working) - command: "sudo -E rsync --rsync-path='sudo rsync' -a -e 'ssh -o StrictHostKeyChecking=no' {{ mariadb_backup_user }}@{{ mariadb_slave_import_from }}:{{ mariadb_backup_dir }}/ {{ mariadb_datadir }}/" + ansible.builtin.command: "sudo -E rsync --rsync-path='sudo rsync' -a -e 'ssh -o StrictHostKeyChecking=no' {{ mariadb_backup_user }}@{{ mariadb_slave_import_from }}:{{ mariadb_backup_dir }}/ {{ mariadb_datadir }}/" become: false tags: - skip_ansible_lint - name: FILE | Re-apply owner - file: + ansible.builtin.file: path: "{{ mariadb_datadir }}" state: directory mode: 0755 @@ -71,18 +71,18 @@ recurse: true - name: SHELL | Remove InnoDB redo logs - shell: "rm -f {{ mariadb_datadir }}/ib_logfile*" + ansible.builtin.shell: "rm -f {{ mariadb_datadir }}/ib_logfile*" args: removes: "{{ mariadb_datadir }}/ib_logfile0" warn: false - name: SERVICE | Start MariaDB - service: + ansible.builtin.service: name: "{{ mariadb_service_name }}" state: started - name: FILE | Delete dump - file: + ansible.builtin.file: path: "{{ mariadb_backup_dir }}" state: absent delegate_to: "{{ mariadb_slave_import_from }}" diff --git a/tests/test.yml b/tests/test.yml index 4759ce2..1b17970 100644 --- a/tests/test.yml +++ b/tests/test.yml @@ -5,16 +5,16 @@ pre_tasks: - name: SETUP | Get facts - setup: + ansible.builtin.setup: register: s - name: DEBUG | Show facts - debug: + ansible.builtin.debug: var: s tasks: - name: APT | Install some packages - apt: + ansible.builtin.apt: name: "{{ p }}" update_cache: true cache_valid_time: 3600 @@ -22,7 +22,7 @@ p: ['ca-certificates', 'curl', 'strace', 'rsyslog', 'vim'] - name: SERVICE | Ensure rsyslog is started - service: + ansible.builtin.service: name: rsyslog state: started @@ -32,7 +32,7 @@ tasks: - name: COPY | Deploy first dump - copy: + ansible.builtin.copy: src: import1.sql dest: /tmp/import1.sql mode: 0644 @@ -41,7 +41,7 @@ register: c - name: MYSQL_DB | Import first dump - mysql_db: + community.mysql.mysql_db: name: "{{ item }}" state: import target: /tmp/import1.sql @@ -55,14 +55,14 @@ pre_tasks: - name: SHELL | Get master IP - shell: set -o pipefail && getent hosts {{ ansible_hostname | replace ('slave', 'master') }} | cut -d ' ' -f 1 + ansible.builtin.shell: set -o pipefail && getent hosts {{ ansible_hostname | replace ('slave', 'master') }} | cut -d ' ' -f 1 args: executable: /bin/bash register: ip changed_when: false - name: SET_FACT | Apply some configuration - set_fact: + ansible.builtin.set_fact: # MariaDB don't read /etc/hosts (from vagrant host plugin) mariadb_replication_host: "{{ ip.stdout }}" # Need this to use vagrant 'delegate_to' @@ -75,7 +75,7 @@ - block: - name: COPY | Deploy dump - copy: + ansible.builtin.copy: src: import2.sql dest: /tmp/import2.sql mode: 0644 @@ -85,7 +85,7 @@ register: c - name: MYSQL_DB | Import another dump - mysql_db: + community.mysql.mysql_db: name: "{{ item }}" state: import target: /tmp/import2.sql @@ -96,12 +96,12 @@ delegate_to: "{{ mariadb_slave_import_from }}" - name: MYSQL_REPLICATION | Get slave infos - mysql_replication: + community.mysql.mysql_replication: mode: getslave register: slave - name: FAIL | if slave threads are not running - fail: + ansible.builtin.fail: msg: "Slave issue" when: slave.Slave_IO_Running != 'Yes' or slave.Slave_SQL_Running != 'Yes' @@ -109,12 +109,12 @@ pre_tasks: - name: APT_REPOSITORY | Force galera-3 on Buster + MariaDB from Debian repository (prevent crashes) - set_fact: + ansible.builtin.set_fact: mariadb_galera_package_name: 'galera-3' when: ansible_distribution_release == 'buster' and mariadb_origin == 'default' - name: SET_FACT | Apply some configuration - set_fact: + ansible.builtin.set_fact: mariadb_galera_primary_node: '{% if is_docker %}docker-{% else %}vbox-{% endif %}{{ ansible_distribution_release }}-{{ mariadb_origin }}-galera-1' mariadb_wsrep_node_address: "{{ '127.0.0.1' if is_docker else ansible_eth1.ipv4.address }}"