Create role to install MariaDB MaxScale
This role have to add the official MariaDB MaxScale repository as maxscale isn't in the Debian repositories. Moreover as maxscale need two mysql users to works, the role can also create these users if requested and ansible has access to a master server.
This commit is contained in:
parent
c5bf537022
commit
94f088e1bf
3
maxscale/README.md
Normal file
3
maxscale/README.md
Normal file
|
@ -0,0 +1,3 @@
|
|||
# maxscale
|
||||
|
||||
Install MariaDB maxscale on a server.
|
29
maxscale/defaults/main.yml
Normal file
29
maxscale/defaults/main.yml
Normal file
|
@ -0,0 +1,29 @@
|
|||
---
|
||||
|
||||
maxscale_version: 2.4
|
||||
|
||||
# The passwords needs to be either unencrypted or encrypted with maxpasswd on
|
||||
# the MaxScale server.
|
||||
maxscale_mysql_user: maxscale
|
||||
maxscale_mysql_password: Null
|
||||
encrypted_maxscale_mysql_password: Null
|
||||
maxscale_monitor_user: monitor_user
|
||||
maxscale_monitor_password: Null
|
||||
encrypted_maxscale_monitor_password: Null
|
||||
|
||||
# Define this variable if you want ansible to create the two users on the MySQL server
|
||||
# through delegation
|
||||
maxscale_mysql_master: Null
|
||||
|
||||
maxscale_mysql_servers: []
|
||||
# Example (port is optional and default to 3306):
|
||||
# maxscale_mysql_servers:
|
||||
# - name: db1
|
||||
# address: 192.0.2.102
|
||||
# port: 3306
|
||||
|
||||
maxscale_services:
|
||||
- name: "Splitter"
|
||||
router: "readwritesplit"
|
||||
port: 3306
|
||||
|
5
maxscale/handlers/main.yml
Normal file
5
maxscale/handlers/main.yml
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
- name: 'restart maxscale'
|
||||
service:
|
||||
name: maxscale
|
||||
state: restarted
|
20
maxscale/meta/main.yml
Normal file
20
maxscale/meta/main.yml
Normal file
|
@ -0,0 +1,20 @@
|
|||
galaxy_info:
|
||||
author: Evolix
|
||||
description: Install MariaDB Maxscale
|
||||
|
||||
issue_tracker_url: https://gitea.evolix.org/evolix/ansible-roles/issues
|
||||
|
||||
license: GPLv2
|
||||
|
||||
min_ansible_version: 2.4
|
||||
|
||||
platforms:
|
||||
- name: Debian
|
||||
version:
|
||||
- stretch
|
||||
- buster
|
||||
|
||||
dependencies: []
|
||||
# List your role dependencies here, one per line.
|
||||
# Be sure to remove the '[]' above, if you add dependencies
|
||||
# to this list.
|
26
maxscale/tasks/config_stretch.yml
Normal file
26
maxscale/tasks/config_stretch.yml
Normal file
|
@ -0,0 +1,26 @@
|
|||
- name: "Create key for password encryption"
|
||||
command:
|
||||
cmd: "/usr/bin/maxkeys"
|
||||
creates: "/var/lib/maxscale/.secrets"
|
||||
|
||||
- name: "Encrypt mysql password for saving in configuration"
|
||||
command:
|
||||
cmd: "/usr/bin/maxpasswd {{ maxscale_mysql_password|quote }}"
|
||||
register: encrypt_maxscale_mysql_password_result
|
||||
when: encrypted_maxscale_mysql_password is none
|
||||
|
||||
- name: "Encrypt monitor password for saving in configuration"
|
||||
command:
|
||||
cmd: "/usr/bin/maxpasswd {{ maxscale_monitor_password|quote }}"
|
||||
register: encrypt_maxscale_monitor_password_result
|
||||
when: encrypted_maxscale_monitor_password is none
|
||||
|
||||
- name: "Copy the configuration"
|
||||
template:
|
||||
src: "maxscale.cnf.j2"
|
||||
dest: "/etc/maxscale.cnf"
|
||||
owner: 'root'
|
||||
group: 'root'
|
||||
mode: '0644'
|
||||
notify: 'restart maxscale'
|
||||
|
9
maxscale/tasks/main.yml
Normal file
9
maxscale/tasks/main.yml
Normal file
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
|
||||
- include: packages_stretch.yml
|
||||
|
||||
- include: mysql_add_user.yml
|
||||
when: maxscale_mysql_master is string
|
||||
|
||||
- include: config_stretch.yml
|
||||
|
20
maxscale/tasks/mysql_add_user.yml
Normal file
20
maxscale/tasks/mysql_add_user.yml
Normal file
|
@ -0,0 +1,20 @@
|
|||
- name: "Create maxscale user on MySQL master"
|
||||
mysql_user:
|
||||
name: "{{ maxscale_mysql_user }}"
|
||||
password: "{{ maxscale_mysql_password }}"
|
||||
host: "{{ item }}"
|
||||
priv: 'mysql.user:SELECT/mysql.db:SELECT/mysql.tables_priv:SELECT/mysql.roles_mapping:SELECT/*.*:SHOW DATABASES'
|
||||
state: present
|
||||
delegate_to: "{{ maxscale_mysql_master }}"
|
||||
loop: "{{ ansible_facts['all_ipv4_addresses'] }}"
|
||||
|
||||
- name: "Create monitor user on MySQL master"
|
||||
mysql_user:
|
||||
name: "{{ maxscale_monitor_user }}"
|
||||
password: "{{ maxscale_monitor_password }}"
|
||||
host: "{{ item }}"
|
||||
priv: '*.*:REPLICATION CLIENT'
|
||||
state: present
|
||||
delegate_to: "{{ maxscale_mysql_master }}"
|
||||
loop: "{{ ansible_facts['all_ipv4_addresses'] }}"
|
||||
|
22
maxscale/tasks/packages_stretch.yml
Normal file
22
maxscale/tasks/packages_stretch.yml
Normal file
|
@ -0,0 +1,22 @@
|
|||
- name: "Install MariaDB keys"
|
||||
apt_key:
|
||||
keyserver: keyserver.ubuntu.com
|
||||
id: "{{ item }}"
|
||||
loop:
|
||||
- "0x13cfde6dd9ee9784f41af0f670e4618a8167ee24"
|
||||
- "0x4c470fffefc4d3dc59778655ce1a3dd5e3c94f49"
|
||||
- "0x199369e5404bd5fc7d2fe43bcbcb082a1bb943db"
|
||||
- "0x177f4010fe56ca3336300305f1656f24c74cd1d8"
|
||||
- "0x7b963f525ad3ae6259058d30135659e928c12247"
|
||||
|
||||
- name: "Add MariaDB MaxScale repository"
|
||||
apt_repository:
|
||||
repo: "deb https://downloads.mariadb.com/MaxScale/{{ maxscale_version }}/debian {{ ansible_distribution_release }} main"
|
||||
state: present
|
||||
filename: mariadb-maxscale
|
||||
|
||||
- name: "Install MariaDB MaxScale"
|
||||
apt:
|
||||
name: maxscale
|
||||
state: present
|
||||
|
43
maxscale/templates/maxscale.cnf.j2
Normal file
43
maxscale/templates/maxscale.cnf.j2
Normal file
|
@ -0,0 +1,43 @@
|
|||
[maxscale]
|
||||
threads=auto
|
||||
|
||||
{% for server in maxscale_mysql_servers %}
|
||||
[{{ server['name'] }}]
|
||||
type=server
|
||||
address={{ server['address'] }}
|
||||
port={{ server['port']|default(3306) }}
|
||||
protocol=MariaDBBackend
|
||||
|
||||
{% endfor %}
|
||||
[MariaDB-Monitor]
|
||||
type=monitor
|
||||
module=mariadbmon
|
||||
servers={% for server in maxscale_mysql_servers %}{{ server['name'] }}{% if not loop.last %}, {% endif %}{% endfor %}
|
||||
|
||||
user={{ maxscale_monitor_user }}
|
||||
{% if encrypted_maxscale_monitor_password is none %}
|
||||
password={{ encrypt_maxscale_monitor_password_result['stdout'] }}
|
||||
{% else %}
|
||||
password={{ encrypted_maxscale_monitor_password }}
|
||||
{% endif %}
|
||||
monitor_interval=2000
|
||||
|
||||
{% for service in maxscale_services %}
|
||||
[{{ service['name'] }}-Service]
|
||||
type=service
|
||||
router={{ service['router'] }}
|
||||
cluster=MariaDB-Monitor
|
||||
user={{ maxscale_mysql_user }}
|
||||
{% if encrypted_maxscale_mysql_password is none %}
|
||||
password={{ encrypt_maxscale_mysql_password_result['stdout'] }}
|
||||
{% else %}
|
||||
password={{ encrypted_maxscale_mysql_password }}
|
||||
{% endif %}
|
||||
|
||||
[{{ service['name'] }}-Listener]
|
||||
type=listener
|
||||
service={{ service['name'] }}-Service
|
||||
protocol=MariaDBClient
|
||||
port={{ service['port'] }}
|
||||
{% endfor %}
|
||||
|
2
maxscale/tests/inventory
Normal file
2
maxscale/tests/inventory
Normal file
|
@ -0,0 +1,2 @@
|
|||
localhost
|
||||
|
9
maxscale/tests/test.yml
Normal file
9
maxscale/tests/test.yml
Normal file
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
- hosts: test-kitchen
|
||||
vars:
|
||||
maxscale_mysql_password: maxscale-pwd
|
||||
maxscale_monitor_password: mypwd
|
||||
maxscale_mysql_servers:
|
||||
- 127.0.0.1 # Need at least one server
|
||||
roles:
|
||||
- maxscale
|
2
maxscale/vars/main.yml
Normal file
2
maxscale/vars/main.yml
Normal file
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
# vars file for maxscale
|
Loading…
Reference in a new issue