WIP: Add maxscale role #106
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