From f5e61e7060b7f9636bdcd05f2aa8c78398eee260 Mon Sep 17 00:00:00 2001 From: Sven Velt Date: Fri, 11 Apr 2025 18:14:33 +0200 Subject: [PATCH] FQCN, ansible-lint, small fixes --- README.md | 4 +- defaults/main.yml | 2 +- handlers/main.yml | 2 +- meta/main.yml | 5 +- tasks/main.yml | 124 ++++++++++++++++++++++++++-------------------- 5 files changed, 78 insertions(+), 59 deletions(-) diff --git a/README.md b/README.md index 85b2f9a..0a17775 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,9 @@ Example Playbook - hosts: db-servers roles: - - { role: mariadb-replication, db_debug: True } + - role: mariadb-replication + vars: + db_debug: true License ------- diff --git a/defaults/main.yml b/defaults/main.yml index 3c52018..daf50dd 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -1,7 +1,7 @@ --- db_packages: - mariadb-server - - python3-mysqldb + - python3-pymysql db_servicename: mysql diff --git a/handlers/main.yml b/handlers/main.yml index fd1c0e7..711e637 100644 --- a/handlers/main.yml +++ b/handlers/main.yml @@ -1,6 +1,6 @@ --- - name: Restart MariaDB - service: + ansible.builtin.service: name: "{{ db_servicename }}" state: restarted diff --git a/meta/main.yml b/meta/main.yml index 6e9d201..65cea7c 100644 --- a/meta/main.yml +++ b/meta/main.yml @@ -7,12 +7,15 @@ galaxy_info: license: GPL-2.0-or-later - min_ansible_version: 2.9 + min_ansible_version: '2.9' platforms: + - name: Debian - name: Ubuntu versions: - focal + - jammy + - noble galaxy_tags: - database diff --git a/tasks/main.yml b/tasks/main.yml index be898cc..bddf704 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -1,121 +1,135 @@ --- +- name: Sanity check + ansible.builtin.assert: + that: + - hostname_replication_primary is defined + - db_server_id is defined + - name: Install software - package: + ansible.builtin.package: name: "{{ item }}" state: present with_items: "{{ db_packages }}" - - name: "Quick-Fix MariaDB/systemd problems" - lineinfile: + ansible.builtin.lineinfile: path: /usr/lib/systemd/system/mariadb.service regexp: "^SendSIGKILL=no" line: "SendSIGKILL=yes" - backup: yes + backup: true register: db_systemd_fix when: ansible_virtualization_type == "lxc" - -- name: Reload systemd daemon - command: /bin/systemctl daemon-reload +- name: Reload systemd daemon # noqa: no-handler + ansible.builtin.systemd: + daemon_reload: true when: db_systemd_fix is changed - - name: 'Enable service "{{ db_servicename }}"' - service: + ansible.builtin.service: name: "{{ db_servicename }}" state: started - enabled: yes - + enabled: true - name: "Config: Listen on all ip addresses" - lineinfile: + ansible.builtin.lineinfile: path: /etc/mysql/mariadb.conf.d/50-server.cnf regexp: "^ *#* *bind-address" line: "bind-address = 0.0.0.0" - backup: yes + backup: true notify: 'Restart MariaDB' - - name: "Config: Set server-id" - lineinfile: + ansible.builtin.lineinfile: dest: /etc/mysql/mariadb.conf.d/50-server.cnf regexp: "^ *#* *server-id" line: "server-id = {{ db_server_id }}" - backup: yes + backup: true notify: 'Restart MariaDB' +- name: Ensure log directory is present + ansible.builtin.file: + path: /var/log/mysql + state: directory + owner: mysql + group: mysql + mode: "0770" - name: "Config: Enable binlog" - lineinfile: + ansible.builtin.lineinfile: dest: /etc/mysql/mariadb.conf.d/50-server.cnf regexp: "^ *#* *log_bin" line: "log_bin = /var/log/mysql/mysql-bin.log" - backup: yes + backup: true when: db_server_id == 1 notify: 'Restart MariaDB' - - name: MariaDB create replication user - mysql_user: + community.mysql.mysql_user: name: "{{ db_repl_user }}" password: "{{ db_repl_password }}" priv: '*.*:REPLICATION SLAVE' host: "%" + column_case_sensitive: true state: present + login_unix_socket: /var/run/mysqld/mysqld.sock notify: 'Restart MariaDB' - - name: Get MariaDB master state - mysql_info: + community.mysql.mysql_info: filter: master_status + login_unix_socket: /var/run/mysqld/mysqld.sock register: db_master_status - -- debug: - msg: "{{ db_server_id }} - {{ db_master_status.master_status }}" - when: db_debug|default(False) == True - +- name: "DEBUG»»» db_server_id / db_master_status.master_status" + ansible.builtin.debug: + msg: + - "db_server_id: {{ db_server_id }}" + - "db_master_status.master_status: {{ db_master_status.master_status }}" + when: db_debug|default(false) - name: "(Maybe) Restart MariaDB" - meta: flush_handlers - + ansible.builtin.meta: flush_handlers - name: Get MariaDB master state - mysql_info: + community.mysql.mysql_info: filter: master_status + login_unix_socket: /var/run/mysqld/mysqld.sock register: db_master_status_new +- name: "DEBUG»»» db_server_id / db_master_status_new.master_status" + ansible.builtin.debug: + msg: + - "db_server_id: {{ db_server_id }}" + - "db_master_status_new.master_status: {{ db_master_status_new.master_status|to_nice_json }}" + when: db_debug|default(false) -- debug: - msg: "{{ db_server_id }} - {{ db_master_status_new.master_status }}" - when: db_debug|default(False) == True - - -- name: "(Master) Reset binlog" - command: '/usr/bin/mysql -u root -e "RESET MASTER"' +- name: "(Master) Reset binlog" # noqa: no-changed-when + ansible.builtin.command: + cmd: '/usr/bin/mysql -u root -e "RESET MASTER"' when: db_server_id == 1 and db_master_status.master_status == {} +- name: "(Replica) Get status" + community.mysql.mysql_replication: + mode: getreplica + login_unix_socket: /var/run/mysqld/mysqld.sock + register: db_replica_status -- name: "(Slave) Get status" - mysql_replication: - mode: getslave - register: db_slave_status +- name: "DEBUG»»» db_replica_status" + ansible.builtin.debug: + var: db_replica_status + when: db_debug|default(false) +- name: "(Replica) Block for replicas" + when: db_server_id != 1 and db_replica_status.Slave_IO_Running|default("No") == "No" + block: -- debug: - var: db_slave_status - when: db_debug|default(False) == True - - -- name: "(Slave) Setup replication" - command: '/usr/bin/mysql -u root -e "CHANGE MASTER TO master_host=\"{{ hostvars["db-01"]["ansible_default_ipv4"].address }}\", master_user=\"{{ db_repl_user }}\", master_password=\"{{ db_repl_password }}\", master_use_gtid=current_pos"' - when: db_server_id != 1 and db_slave_status.Slave_IO_Running|default("No") == "No" - - -- name: "(Slave) Start slave" - mysql_replication: - mode: startslave - when: db_server_id != 1 and db_slave_status.Slave_IO_Running|default("No") == "No" + - name: "(Replica) Setup replication" # noqa: no-changed-when + ansible.builtin.command: + cmd: '/usr/bin/mysql -u root -e "CHANGE MASTER TO master_host=\"{{ hostvars[hostname_replication_primary]["ansible_default_ipv4"].address }}\", master_user=\"{{ db_repl_user }}\", master_password=\"{{ db_repl_password }}\", master_use_gtid=current_pos"' # noqa: yaml[line-length] + - name: "(Replica) Start replica" + community.mysql.mysql_replication: + mode: startreplica + login_unix_socket: /var/run/mysqld/mysqld.sock