prole/infrastructure/roles/mariadb_replica/tasks/main.yml
chrisfu 78a16f47e2 ansible: add merlin k3s host + USB-backed MariaDB bring-up
- Add merlin.prole.org (10.0.0.6) to inventory (k3s_hosts, mariadb_primary)

- Relax k3s preflight: /var/lib/rancher no longer requires iSCSI, only blocks SD-backed storage

- Add netplan static IP role (NetworkManager) and MariaDB primary/replica roles + site.yml ordering

- Add/upgrade USB prep tooling (prepare_mariadb_usb.sh + generated setup.sh + fstab-by-LABEL)

Co-authored-by: Junie <junie@jetbrains.com>
2026-03-05 19:17:40 -08:00

85 lines
2.7 KiB
YAML

---
- 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