You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
117 lines
4.2 KiB
YAML
117 lines
4.2 KiB
YAML
---
|
|
- debug:
|
|
msg: "{{ props }}"
|
|
when: debug
|
|
|
|
- name: "Ensure replication user exists on master"
|
|
mysql_user:
|
|
login_unix_socket: /run/mysqld/mysqld.sock
|
|
login_password: "{{ mysql_root_password }}"
|
|
name: "{{ mysql_replication_user.name }}"
|
|
host: "{{ mysql_replication_user.host | default('%') }}"
|
|
password: "{{ mysql_replication_user.password }}"
|
|
priv: "{{ mysql_replication_user.priv | default('*.*:REPLICATION SLAVE,REPLICATION CLIENT') }}"
|
|
state: present
|
|
when:
|
|
- props[inventory_hostname].mysql_replication_role == 'master'
|
|
- mysql_replication_user.name is defined
|
|
- (mysql_replication_master | length) > 0
|
|
|
|
- name: "Create temporarily backup user on master instance to dump all DBs"
|
|
mysql_user:
|
|
login_unix_socket: /run/mysqld/mysqld.sock
|
|
login_password: "{{ mysql_root_password }}"
|
|
name: "{{ mysqldump_creds.username }}"
|
|
host: "{{ mysqldump_creds.host }}"
|
|
password: "{{ mysqldump_creds.password }}"
|
|
priv: "{{ mysqldump_creds.priv }}"
|
|
state: present
|
|
when:
|
|
- props[inventory_hostname].mysql_replication_role == 'master'
|
|
- import_dump | default(False)
|
|
|
|
# using shell module due to missing SSL-flag in mysql_db module
|
|
- name: "Dumpall DBs"
|
|
# delegate_to: "{{ mysql_replication_slave }}"
|
|
# no_log: True
|
|
no_log: False
|
|
shell: "mysqldump -A -h {{ mysql_replication_master }} -u {{ mysqldump_creds.username }} -p{{ mysqldump_creds.password }} --ssl > {{ backup_target }}"
|
|
register: mysql_dump
|
|
when:
|
|
- props[inventory_hostname].mysql_replication_role == 'slave'
|
|
- import_dump | default(False)
|
|
|
|
- name: "Check slave replication status"
|
|
mysql_replication:
|
|
mode: getreplica
|
|
login_unix_socket: /run/mysqld/mysqld.sock
|
|
login_password: "{{ mysql_root_password }}"
|
|
ignore_errors: true
|
|
register: slaveinfo
|
|
when:
|
|
- props[inventory_hostname].mysql_replication_role == 'slave'
|
|
- (mysql_replication_master | length) > 0
|
|
|
|
- name: "DEBUG"
|
|
debug:
|
|
msg: "return slave: {{ slaveinfo.Is_Replica }}"
|
|
when:
|
|
- debug
|
|
- props[inventory_hostname].mysql_replication_role == 'slave'
|
|
- slaveinfo is defined
|
|
|
|
- name: "Import dumped DBs from mysql-master"
|
|
mysql_db:
|
|
login_unix_socket: /run/mysqld/mysqld.sock
|
|
login_password: "{{ mysql_root_password }}"
|
|
state: import
|
|
name: all
|
|
target: "{{ backup_target }}"
|
|
when:
|
|
- props[inventory_hostname].mysql_replication_role == 'slave'
|
|
- import_dump | default(False)
|
|
|
|
# TODO SSL TRUST
|
|
- name: "Check master replication status."
|
|
mysql_replication:
|
|
mode: getprimary
|
|
login_host: "{{ mysql_replication_master }}"
|
|
login_user: "{{ mysql_replication_user.name }}"
|
|
login_password: "{{ mysql_replication_user.password }}"
|
|
ca_cert: '/tmp/{{ mysql_replication_master }}.ca.crt'
|
|
register: masterinfo
|
|
when:
|
|
- props[inventory_hostname].mysql_replication_role == 'slave'
|
|
- slaveinfo is defined
|
|
- (slaveinfo.Is_Replica is defined and not slaveinfo.Is_Replica) or (slaveinfo.Is_Replica is not defined and slaveinfo is failed)
|
|
- (mysql_replication_master | length) > 0
|
|
|
|
- name: "Configure replication on the slave"
|
|
mysql_replication:
|
|
mode: changeprimary
|
|
login_unix_socket: /run/mysqld/mysqld.sock
|
|
login_password: "{{ mysql_root_password }}"
|
|
master_host: "{{ mysql_replication_master }}"
|
|
master_user: "{{ mysql_replication_user.name }}"
|
|
master_password: "{{ mysql_replication_user.password }}"
|
|
master_log_file: "{{ masterinfo.File }}"
|
|
master_log_pos: "{{ masterinfo.Position }}"
|
|
ignore_errors: true
|
|
when:
|
|
- props[inventory_hostname].mysql_replication_role == 'slave'
|
|
- slaveinfo is defined
|
|
- (slaveinfo.Is_Replica is defined and not slaveinfo.Is_Replica) or (slaveinfo.Is_Replica is not defined and slaveinfo is failed)
|
|
- mysql_replication_user.name is defined
|
|
- (mysql_replication_master | length) > 0
|
|
|
|
- name: "Start replication"
|
|
mysql_replication:
|
|
mode: startreplica
|
|
login_unix_socket: /run/mysqld/mysqld.sock
|
|
login_password: "{{ mysql_root_password }}"
|
|
when:
|
|
- props[inventory_hostname].mysql_replication_role == 'slave'
|
|
- slaveinfo is defined
|
|
- (slaveinfo.Is_Replica is defined and not slaveinfo.Is_Replica) or (slaveinfo.Is_Replica is not defined and slaveinfo is failed)
|
|
- (mysql_replication_master | length) > 0
|