Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
370 changes: 186 additions & 184 deletions roles/mysql/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -1,186 +1,188 @@
---
- name: "Message for non redhat family servers"
when: ansible_facts['os_family'] != 'RedHat'
ansible.builtin.fail:
msg: "Sorry, this role only works on RedHat family servers"

- name: "Install and configure mongo on redhat family servers"
- name: "Fix distro name for repo base url"
ansible.builtin.set_fact:
ansible_distribution: "rockylinux"
when: ansible_distribution == "Rocky"

- name: "Add MariaDB.org repository"
ansible.builtin.template:
src: "mariadb.repo.j2"
dest: "/etc/yum.repos.d/mariadb.repo"
mode: "0644"
when: ansible_facts['os_family'] == 'RedHat'

- name: "Add MariaDB repository"
ansible.builtin.template:
src: "mariadb.sources.j2"
dest: "/etc/apt/sources.list.d/mariadb.sources"
mode: "0644"
when: ansible_facts['os_family'] == 'Debian'

- name: "Install mariadb packages"
ansible.builtin.package:
name:
- "MariaDB-server"
- "MariaDB-client"
- "{{ mariadb_python_mysql_version }}"
state: "present"
when: ansible_facts['os_family'] == 'RedHat'

- name: "Install mariadb packages"
ansible.builtin.package:
name:
- "mariadb-server"
- "mariadb-client"
- "{{ mariadb_python_mysql_version | lower }}"
state: "present"
when: ansible_facts['os_family'] == 'Debian'

- name: "Start and enable mariadb"
ansible.builtin.service:
name: "mariadb"
state: "started"
enabled: true

- name: "Set mysql root password for all root accounts"
community.mysql.mysql_user:
name: "root"
password: "{{ mysql_root_password }}"
priv: "*.*:ALL,GRANT"
login_unix_socket: >-
{{
'/run/mysqld/mysqld.sock'
if ansible_facts.os_family == 'Debian'
else '/var/lib/mysql/mysql.sock'
}}

- name: "MySQL my.cnf"
ansible.builtin.template:
src: "my.cnf.j2"
dest: "/root/.my.cnf"
mode: "0600"
owner: "root"
group: "root"

- name: "Delete anonymous MySQL server user"
community.mysql.mysql_user:
name: ""
state: "absent"
login_user: "root"
host: "{{ mariadb_host }}"
login_password: "{{ mysql_root_password }}"

- name: "Delete anonymous MySQL server user for localhost"
community.mysql.mysql_user:
name: ""
state: "absent"
login_user: "root"
host: "{{ mariadb_host }}"
login_password: "{{ mysql_root_password }}"

- name: "Delete test MySQL server user"
community.mysql.mysql_user:
name: "{{ item }}"
state: "absent"
login_user: "root"
login_password: "{{ mysql_root_password }}"
with_items:
- "test"
- "test_%"

- name: "Delete anonymous MySQL server user for localhost"
community.mysql.mysql_user:
name: ""
state: "absent"
login_user: "root"
login_password: "{{ mysql_root_password }}"

- name: "Remove the MySQL test database"
community.mysql.mysql_db:
db: "test"
state: "absent"
login_user: "root"
login_password: "{{ mysql_root_password }}"

- name: "Create databases"
community.mysql.mysql_db:
name: "{{ item }}"
state: "present"
with_items:
- "{{ databases.names }}"

- name: "Create database users"
community.mysql.mysql_user:
name: "{{ item[0].name }}"
host: "{{ item[0].hosts | join(',') if item[0].hosts is defined and (item[0].hosts | length>0) else item[1] }}"
password: "{{ item[0].password }}"
priv: "{{ item[0].db_name }}.*:ALL"
state: "present"
append_privs: true
no_log: true
with_nested:
- "{{ databases.users }}"
- "{{ database_clients }}"

- name: "Create development database users"
community.mysql.mysql_user:
name: "{{ item.name}}"
host: "%"
password: "{{ item.password }}"
priv: "*.*:ALL"
state: "present"
no_log: true
with_items:
- "{{ databases.development_user|default([]) }}"
when:
- develop | bool

- name: "Allow external connections when in development"
ansible.builtin.lineinfile:
dest: "/etc/my.cnf.d/server.cnf"
insertafter: '\\[mysqld\\]'
state: "present"
line: "bind-address=0.0.0.0"
when:
- develop | bool

# Add backup user
- name: "Add mariadb backup user"
community.mysql.mysql_user:
name: "{{ mysql_backup_user }}"
password: "{{ mysql_backup_password }}"
login_user: "root"
login_password: "{{ mysql_root_password }}"
priv: "*.*:SELECT,LOCK TABLES,SHOW VIEW"
state: "present"
no_log: true
when:
- backup_node | bool

- name: "Create the backup directory"
ansible.builtin.file:
path: "/home/backup"
state: "directory"
owner: "root"
group: "root"
mode: "0700"
when:
- backup_node | bool

- name: "Put mariadb_backup script"
ansible.builtin.template:
src: "mariadb_backup.sh.j2"
dest: "/usr/local/sbin/mariadb_backup.sh"
mode: "0700"
owner: "root"
when:
- backup_node | bool

- name: "Create cron symlink for backup script"
# todo: use cron task
ansible.builtin.file:
src: "/usr/local/sbin/mariadb_backup.sh"
dest: "/etc/cron.daily/db_backup"
state: "link"
mode: "0700"
owner: "root"
when:
- ansible_facts['os_family'] == 'RedHat'
block:
# Add MariaDB repo and key

- name: "Fix distro name for repo base url"
ansible.builtin.set_fact:
ansible_distribution: "rockylinux"
when: ansible_distribution == "Rocky"

- name: "Add MariaDB.org repository"
ansible.builtin.template:
src: "mariadb.repo.j2"
dest: "/etc/yum.repos.d/mariadb.repo"
mode: "0644"

- name: "Install mariadb server"
ansible.builtin.dnf:
name:
- "MariaDB-server"
- "MariaDB-client"
- "{{ mariadb_python_mysql_version }}"
state: "present"

- name: "Start and enable mariadb"
ansible.builtin.service:
name: "mariadb"
state: "started"
enabled: true

- name: "Set mysql root password for all root accounts"
run_once: true
community.mysql.mysql_user:
name: "root"
password: "{{ mysql_root_password }}"
priv: "*.*:ALL,GRANT"
login_unix_socket: "/var/lib/mysql/mysql.sock"

- name: "MySQL my.cnf"
ansible.builtin.template:
src: "my.cnf.j2"
dest: "/root/.my.cnf"
mode: "0400"
owner: "root"
group: "root"

- name: "Delete anonymous MySQL server user"
run_once: true
community.mysql.mysql_user:
name: ""
state: "absent"
login_user: "root"
host: "{{ mariadb_host }}"
login_password: "{{ mysql_root_password }}"

- name: "Delete anonymous MySQL server user for localhost"
run_once: true
community.mysql.mysql_user:
name: ""
state: "absent"
login_user: "root"
host: "{{ mariadb_host }}"
login_password: "{{ mysql_root_password }}"

- name: "Delete test MySQL server user"
run_once: true
community.mysql.mysql_user:
name: "{{ item }}"
state: "absent"
login_user: "root"
login_password: "{{ mysql_root_password }}"
with_items:
- "test"
- "test_%"

- name: "Delete anonymous MySQL server user for localhost"
run_once: true
community.mysql.mysql_user:
name: ""
state: "absent"
login_user: "root"
login_password: "{{ mysql_root_password }}"

- name: "Remove the MySQL test database"
run_once: true
community.mysql.mysql_db:
db: "test"
state: "absent"
login_user: "root"
login_password: "{{ mysql_root_password }}"

- name: "Create databases"
run_once: true
community.mysql.mysql_db:
name: "{{ item }}"
state: "present"
with_items:
- "{{ databases.names }}"

- name: "Create database users"
run_once: true
community.mysql.mysql_user:
name: "{{ item[0].name }}"
host: "{{ item[0].hosts | join(',') if item[0].hosts is defined and (item[0].hosts | length>0) else item[1] }}"
password: "{{ item[0].password }}"
priv: "{{ item[0].db_name }}.*:ALL"
state: "present"
append_privs: true
no_log: true
with_nested:
- "{{ databases.users }}"
- "{{ database_clients }}"

- name: "Create development database users"
run_once: true
community.mysql.mysql_user:
name: "{{ item.name}}"
host: "%"
password: "{{ item.password }}"
priv: "*.*:ALL"
state: "present"
no_log: true
with_items:
- "{{ databases.development_user|default([]) }}"
when:
- develop | bool

- name: "Allow external connections when in development"
ansible.builtin.lineinfile:
dest: "/etc/my.cnf.d/server.cnf"
insertafter: '\\[mysqld\\]'
state: "present"
line: "bind-address=0.0.0.0"
when:
- develop | bool

# Add backup user
- name: "Add mariadb backup user"
run_once: true
community.mysql.mysql_user:
name: "{{ mysql_backup_user }}"
password: "{{ mysql_backup_password }}"
login_user: "root"
login_password: "{{ mysql_root_password }}"
priv: "*.*:SELECT,LOCK TABLES,SHOW VIEW"
state: "present"
no_log: true
when:
- backup_node | bool

- name: "Create the backup directory"
ansible.builtin.file:
path: "/home/backup"
state: "directory"
owner: "root"
group: "root"
mode: "0700"
when:
- backup_node | bool

- name: "Put mariadb_backup script"
ansible.builtin.template:
src: "mariadb_backup.sh.j2"
dest: "/usr/local/sbin/mariadb_backup.sh"
mode: "0700"
owner: "root"
when:
- backup_node | bool

- name: "Create cron symlink for backup script"
# todo: use cron task
ansible.builtin.file:
src: "/usr/local/sbin/mariadb_backup.sh"
dest: "/etc/cron.daily/db_backup"
state: "link"
mode: "0700"
owner: "root"
when:
- backup_node | bool
- backup_node | bool
11 changes: 11 additions & 0 deletions roles/mysql/templates/mariadb.sources.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# MariaDB Server
# To use a different major version of the server, or to pin to a specific minor version, change URI below.
X-Repolib-Name: MariaDB Server
Enabled: yes
Types: deb
URIs: https://dlm.mariadb.com/repo/mariadb-server/{{ ansible_distribution_major_version }}.rolling/repo/debian
Suites: {{ ansible_distribution_release }}
Components: main
Architectures: amd64
Signed-By: /etc/apt/keyrings/mariadb-keyring.gpg

Loading