first draft

This commit is contained in:
Ludovic Cartier
2025-12-18 11:42:56 +01:00
parent 20fba6cb9b
commit d81541660e
13 changed files with 228 additions and 0 deletions

22
tasks/configure.yml Normal file
View File

@@ -0,0 +1,22 @@
---
- name: percona | configure Percona Server
template:
src: my.cnf.j2
dest: /etc/mysql/conf.d/01-ansible.cnf
mode: '0644'
notify: Restart Percona Server
- name: percona | ensure Percona Server is started and enabled
service:
name: mysql
state: started
enabled: yes
- name: percona | update MySQL root password
mysql_user:
name: root
host: localhost
password: "{{ percona_root_password }}"
login_unix_socket: /var/run/mysqld/mysqld.sock
priv: "*.*:ALL,GRANT"
ignore_errors: true # In case password is already set and socket auth is disabled

10
tasks/databases.yml Normal file
View File

@@ -0,0 +1,10 @@
---
- name: percona | create databases
mysql_db:
name: "{{ item.name }}"
collation: "{{ item.collation | default(omit) }}"
encoding: "{{ item.encoding | default(omit) }}"
state: present
login_user: root
login_password: "{{ percona_root_password }}"
loop: "{{ percona_databases }}"

27
tasks/install.yml Normal file
View File

@@ -0,0 +1,27 @@
---
- name: percona | download Percona release package
get_url:
url: "{{ percona_release_package_url }}"
dest: /tmp/percona-release_latest.generic_all.deb
mode: '0644'
- name: percona | install Percona release package
apt:
deb: /tmp/percona-release_latest.generic_all.deb
state: present
- name: percona | determine Percona release string
set_fact:
percona_release_string: >-
{% if percona_version == '8.4' %}ps-84-lts{% elif percona_version == '8.0' %}ps-80{% else %}ps-80{% endif %}
- name: percona | enable Percona repository
command: "percona-release setup -y {{ percona_release_string }}"
args:
creates: "/etc/apt/sources.list.d/percona-{{ percona_release_string }}-release.list"
- name: percona | install Percona Server
apt:
name: percona-server-server
state: present
update_cache: yes

16
tasks/main.yml Normal file
View File

@@ -0,0 +1,16 @@
---
- name: percona | requirements
include_tasks: requirements.yml
- name: percona | installation
include_tasks: install.yml
- name: percona | configuration
include_tasks: configure.yml
- name: percona | databases
include_tasks: databases.yml
- name: percona | users
include_tasks: users.yml

20
tasks/requirements.yml Normal file
View File

@@ -0,0 +1,20 @@
---
- name: percona | apt update cache
ansible.builtin.apt:
update_cache: yes
cache_valid_time: 86400
- name: percona | install requirements
ansible.builtin.apt:
name:
- apt-transport-https
- lsb-release
- ca-certificates
- curl
- gnupg2
state: present
- name: percona | install python3-pymysql for database management
ansible.builtin.apt:
name: python3-pymysql
state: present

11
tasks/users.yml Normal file
View File

@@ -0,0 +1,11 @@
---
- name: percona | create users
mysql_user:
name: "{{ item.name }}"
password: "{{ item.password }}"
host: "{{ item.host | default('%') }}"
priv: "{{ item.priv | default('*.*:USAGE') }}"
state: present
login_user: root
login_password: "{{ percona_root_password }}"
loop: "{{ percona_users }}"