forked from redhat-cop/automate-tower-ha-dr
-
Notifications
You must be signed in to change notification settings - Fork 0
/
tower-setup-replication.yml
100 lines (83 loc) · 3.28 KB
/
tower-setup-replication.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
---
- name: set facts for pgsql-replication role and preflight check
hosts: database*
vars:
pgsqlrep_type_list: [ 'local', 'remote' ]
vars_files: tower-vars.yml
tasks:
- name: HIGH LEVEL BLOCK TO DETERMINE IF DB FAILOVER IS MANAGED BY TOOLKIT
block:
- name: PostgreSQL streaming replication pre-preflight check
block:
- name: ensure there is only one database in main database group
fail:
msg: "Multiple hosts or none in primary database group. hosts: {{ groups['database'] }}"
when: groups['database'] | length != 1
- name: ensure there is at least one host in replication group
fail:
msg: "No hosts in database_replica group"
when: groups['database_replica'] | length == 0
- name: ensure there are only maximum two hosts in replication group
fail:
msg: "Too many hosts in replica group. Only an HA and DR instance are allowed. hosts: {{ groups['database_replica'] }}"
when: groups['database_replica'] | length > 2
- set_fact:
_pgsqlrep_types: "{{ groups['database_replica'] | map('extract', hostvars, 'pgsqlrep_type') | list}}"
- fail:
msg: "pgsqlrep_type is undefined for one or more hosts"
when: "'Undefined' in _pgsqlrep_types"
- fail:
msg: "pgsqlrep_type must be local or remote"
when: item not in pgsqlrep_type_list
with_items: "{{ _pgsqlrep_types }}"
delegate_to: localhost
run_once: true
- name: set facts for master and replica. Consider using facts?
set_fact:
_pgsqlrep_master_address: "{{ groups['database'][0] | infer_address(hostvars) }}"
_pgsqlrep_replica_address: "{{ groups['database_replica'] | map('infer_address', hostvars) | list }}"
- name: PostgreSQL streaming replication pre-preflight check. Contd
block:
- name: ensure pg_host has value of master database
fail:
msg: "pg_host does not match master"
when: pg_host != _pgsqlrep_master_address
delegate_to: localhost
run_once: true
when: not tower_db_external
- name: Configure PostgreSQL streaming replication
hosts: database_replica
become: true
vars_files: tower-vars.yml
tasks:
- name: HIGH LEVEL BLOCK TO DETERMINE IF DB FAILOVER IS MANAGED BY TOOLKIT
block:
- name: Set bundle variable for postgres install
set_fact:
bundle_install: true
when: tower_bundle | bool
- include_role:
name: postgres_base
when: not (pgsqlrep_install_skip | default(False) | bool)
when: not tower_db_external
- name: Configure PSQL master server
hosts: database[0]
become: true
vars_files: tower-vars.yml
roles:
- role: samdoran.pgsql-replication
pgsqlrep_role: master
pgsqlrep_master_address: "{{ _pgsqlrep_master_address }}"
pgsqlrep_replica_address: "{{ _pgsqlrep_replica_address }}"
when: not tower_db_external
- name: Configure PSQL replica
hosts: database_replica
become: true
vars_files: tower-vars.yml
roles:
- role: samdoran.pgsql-replication
pgsqlrep_role: replica
pgsqlrep_master_address: "{{ _pgsqlrep_master_address }}"
pgsqlrep_replica_address: "{{ _pgsqlrep_replica_address }}"
when: not tower_db_external
...