Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/tleguern/ansible-role-mysql
Simple MySQL role with some compatibility with Jeff Geerling's one
https://github.com/tleguern/ansible-role-mysql
ansible ansible-role mysql
Last synced: 23 days ago
JSON representation
Simple MySQL role with some compatibility with Jeff Geerling's one
- Host: GitHub
- URL: https://github.com/tleguern/ansible-role-mysql
- Owner: tleguern
- License: other
- Created: 2021-01-25T19:25:56.000Z (almost 4 years ago)
- Default Branch: master
- Last Pushed: 2023-10-18T10:29:56.000Z (about 1 year ago)
- Last Synced: 2024-10-11T02:45:24.031Z (about 1 month ago)
- Topics: ansible, ansible-role, mysql
- Language: Jinja
- Homepage:
- Size: 81.1 KB
- Stars: 3
- Watchers: 1
- Forks: 6
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Ansible Role: MySQL
[![builds.sr.ht status](https://builds.sr.ht/~tleguern/ansible-role-mysql.svg)](https://builds.sr.ht/~tleguern/ansible-role-mysql?)
Installs and configures MySQL or MariaDB on the following operating systems:
- OpenBSD (MariaDB only)
- Debian
- Ubuntu
- FedoraThis role is originally based on Jeff Geerling's with an emphasis on better portability (ie: Non-Linux unixen) and simplicity.
It is therefore not entirely compatible as some variables were renamed to prevent misunderstanding and the replication parameters have been excised and left to another role (for example [this one](https://github.com/Deveryware/ansible-role-mysql-replication)).Automatic testing is provided using molecule's delegated driver and .
## Requirements
This role requires root access and should be run with `become=yes`.
## Dependencies
collection community.mysql >= 3.1.0 (included in ansible >= 6.x)
## Role Variables
| Variable | Description | Default |
|----------|-------------|---------|
| `mysql_config_path` | Path of the main configuration file | `{{ __mysql_config_path }}` |
| `mysql_config` | Extra configuration rules for my.cnf. See bellow. | `[]` |
| `mysql_databases` | The MySQL databases to create | `[]` |
| `mysql_datadir` | Directory where MySQL data are stored | `{{ __mysql_datadir }}` |
| `mysql_db_admin_password_update` | Whether to force update the MySQL root user's password | `false` |
| `mysql_db_admin_password` | MySQL administrator password | mandatory |
| `mysql_db_admin_user` | MySQL default administrator account | `root` |
| `mysql_packages` | A list of packages | `{{ __mysql_packages }}` |
| `mysql_python_package` | Name of the python package used by Ansible | `{{ __mysql_python_package }}` |
| `mysql_provider` | Either `mariadb` or `mysql` | `mariadb` |
| `mysql_service` | MySQL service name | `{{ __mysql_service }}` |
| `mysql_socket` | MySQL Unix domain socket used for connections | `{{ __mysql_socket }}` |
| `mysql_system_group` | MySQL system group | `{{ __mysql_system_group }}` |
| `mysql_system_user` | MySQL system user | `{{ __mysql_system_user }}` |
| `mysql_users` | The MySQL users and their privileges | `[]` |
| `mysql_enabled_on_startup` | Enable mysql service | `true` |
| `mysql_service_state` | Expected state of mysql service after configuration | `started` |Most of the time `mysql_db_admin_user` is `root`, this is chosen by operating systems packagers and therefore should not be changed.
### Debian / Ubuntu
| Variable | Default |
|--------------------------|------------------------------------|
| `__mysql_config_path` | `/etc/mysql/{{ mysql_provider }}.conf.d/mysqld.cnf` |
| `__mysql_datadir` | `/var/lib/mysql` |
| `__mysql_packages` | `[mariadb-server]` |
| `__mysql_python_package` | `python3-pymysql` |
| `__mysql_service` | `mysql` |
| `__mysql_socket` | `/run/mysqld/mysqld.sock` |
| `__mysql_system_group` | `mysql` |
| `__mysql_system_user` | `mysql` |### Fedora
| Variable | Default |
|--------------------------|-----------------------------|
| `__mysql_config_path` | `/etc/my.cnf` |
| `__mysql_datadir` | `/var/lib/mysql` |
| `__mysql_packages` | `[mariadb, mariadb-server]` |
| `__mysql_python_package` | `python3-PyMySQL` |
| `__mysql_service` | `mariadb` |
| `__mysql_socket` | `/var/lib/mysql/mysql.sock` |
| `__mysql_system_group` | `mysql` |
| `__mysql_system_user` | `mysql` |### OpenBSD
| Variable | Default |
|--------------------------|-----------------------------|
| `__mysql_config_path` | `/etc/my.cnf` |
| `__mysql_datadir` | `/var/mysql` |
| `__mysql_packages` | `[mariadb-server]` |
| `__mysql_python_package` | `py3-pymysql` |
| `__mysql_service` | `mysqld` |
| `__mysql_socket` | `/var/run/mysql/mysql.sock` |
| `__mysql_system_group` | `_mysql` |
| `__mysql_system_user` | `_mysql` |### `mysql_config`
`mysql_config` is a simple representation of my.cnf in YAML as a list of hashes containing only the INI section name and its content.
User provided values are combined with eventual system specific ones from this role.Example:
```yaml
mysql_socket: /var/www/var/run/mysql/mysql.sock
mysql_config:
- name: client-server
content: |
socket={{ mysql_socket }}
port=3306
- name: mysqld
content: |
bind-address=127.0.0.1
datadir={{ mysql_datadir }}
log-basename=mysqld
general-log
slow_query_log
- name: mysqld_safe
content: |
syslog
```### `mysql_provider`
This variable is used to specify the provider for `mysql`: either MariaDB (the default on most operating systems now) or Oracle's MySQL.
If you want to install the later it is mandatory to configure your package repository in advance, perhaps with a `pre_tasks` in a playbook.
Then the following variables need to be overloaded from the default value:```yaml
# Assuming Debian Buster
mysql_packages:
- mysql-server
mysql_service: mysql
mysql_provider: mysql
```The variable `mysql_provider` is only used during the initial installation.
### `mysql_databases`
This variable is a list of hashes representing MySQL databases.
All of its keys are parameters to the [`mysql_db` module](https://docs.ansible.com/ansible/latest/collections/community/mysql/mysql_db_module.html).| Variable | Default |
|--------------|-------------------|
| name | mandatory |
| collation | `utf8_general_ci` |
| encoding | `utf8` |
| state | `present` |### `mysql_users`
This variable is a list of hashes representing MySQL users.
All of its keys are parameters to the [`mysql_user` module](https://docs.ansible.com/ansible/latest/collections/community/mysql/mysql_user_module.html).| Variable | Default |
|--------------|-------------|
| name | mandatory |
| host | `localhost` |
| password | mandatory |
| priv | `*.*:USAGE` |
| state | `present` |
| append_privs | `no` |
| encrypted | `no` |## Dependencies
None.
## Example Playbook
```yaml
- hosts: dbs
vars:
- mysql_db_admin_password: "{{ vaulted_mysql_db_admin_password }}"
- mysql_users:
- name: app_user
password: app_password
- mysql_databases:
- name: app_db
roles:
- role: tleguern.mysql
```## License
MIT / ISC
## Contributing
Either send [send GitHub pull requests](https://github.com/tleguern/ansible-role-mysql) or [send patches on SourceHut](https://lists.sr.ht/~tleguern/misc).
## Author Information
This role was created in 2021 by [Tristan Le Guern](https://www.bouledef.eu/~tleguern) on top of [Jeff Geerling](https://www.jeffgeerling.com/)'s own Ansible role.