--- - name: Skip MariaDB replica provisioning when disabled ansible.builtin.meta: end_host when: not (mariadb_replica_enabled | default(false) | bool) - name: Install MariaDB and tooling ansible.builtin.package: name: - mariadb-server - mariadb-client - rsync state: present - name: Ensure USB mountpoint directory exists ansible.builtin.file: path: "{{ mariadb_usb_mountpoint | default('/srv/mariadb') }}" state: directory owner: root group: root mode: "0755" - name: Mount MariaDB USB filesystem ansible.builtin.mount: src: "LABEL={{ mariadb_usb_label | default('MARIADB') }}" path: "{{ mariadb_usb_mountpoint | default('/srv/mariadb') }}" fstype: "{{ mariadb_usb_fstype | default('ext4') }}" opts: "{{ mariadb_usb_mount_opts | default('noatime,nofail') }}" state: mounted - name: Stop MariaDB before datadir changes ansible.builtin.service: name: mariadb state: stopped failed_when: false - name: Ensure MariaDB datadir exists on USB ansible.builtin.file: path: "{{ mariadb_datadir | default((mariadb_usb_mountpoint | default('/srv/mariadb')) ~ '/mariadb') }}" state: directory owner: mysql group: mysql mode: "0700" - name: Allow MariaDB datadir in AppArmor (Ubuntu/Debian) ansible.builtin.copy: dest: /etc/apparmor.d/local/usr.sbin.mysqld owner: root group: root mode: "0644" content: | # Managed by Ansible (mariadb_replica) {{ mariadb_datadir | default((mariadb_usb_mountpoint | default('/srv/mariadb')) ~ '/mariadb') }}/ r, {{ mariadb_datadir | default((mariadb_usb_mountpoint | default('/srv/mariadb')) ~ '/mariadb') }}/** rwk, register: _mariadb_apparmor_local when: ansible_facts['os_family'] | default('') == 'Debian' - name: Reload AppArmor profile for mysqld ansible.builtin.command: apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld changed_when: false when: - ansible_facts['os_family'] | default('') == 'Debian' - _mariadb_apparmor_local is changed failed_when: false - name: Configure MariaDB bind-address ansible.builtin.lineinfile: path: /etc/mysql/mariadb.conf.d/50-server.cnf regexp: '^bind-address\s*=' line: "bind-address = {{ mariadb_bind_address | default('0.0.0.0') }}" insertafter: '^\[mysqld\]' - name: Configure MariaDB datadir ansible.builtin.lineinfile: path: /etc/mysql/mariadb.conf.d/50-server.cnf regexp: '^datadir\s*=' line: "datadir = {{ mariadb_datadir | default((mariadb_usb_mountpoint | default('/srv/mariadb')) ~ '/mariadb') }}" insertafter: '^\[mysqld\]' - name: Ensure MariaDB service is started and enabled ansible.builtin.service: name: mariadb state: started enabled: true