forked from Demonware/postgresql
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathconfigure_repmgr.yml
151 lines (129 loc) · 5.93 KB
/
configure_repmgr.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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
- name: Repmgr | Update configuration (repmgr.conf)
template:
src: "repmgr.conf-{{ repmgr_version[:3] }}.j2"
dest: "{{repmgr_config_directory}}/repmgr.conf"
owner: "{{ postgresql_service_user }}"
group: "{{ postgresql_service_group }}"
mode: 0640
notify: restart repmgr
- name: Repmgr | Ensure systemd drop-in directory exists
file:
path: "/etc/systemd/system/repmgr{{postgresql_version}}.service.d/"
state: directory
mode: 0755
- name: Repmgr | Update drop-in
template:
src: "repmgr.custom.conf.j2"
dest: "/etc/systemd/system/repmgr{{postgresql_version}}.service.d/custom.conf"
- name: Repmgr | Allow passwordless restarts with postgres user
template:
src: "sudoers.postgresql.j2"
dest: "/etc/sudoers.d/postgresql"
mode: 0640
- name: Repmgr | Update .pgpass for postgres user
template:
src: "pgpass.j2"
dest: "{{repmgr_passfile}}"
owner: "{{ postgresql_service_user }}"
group: "{{ postgresql_service_group }}"
mode: 0400
trim_blocks: no
no_log: true
- name: Repmgr | Generate ssh keypair for postgres user
command: "ssh-keygen -b {{repmgr_ssh_key_bits}} -t {{repmgr_ssh_key_type}} -f {{repmgr_private_key_path}} -N ''"
args:
creates: "{{repmgr_private_key_path}}"
become: yes
become_user: "{{ postgresql_service_user }}"
when: repmgr_primary
- name: Repmgr | Slurp ssh public key
slurp:
src: "{{repmgr_public_key_path}}"
register: ssh_public_key
when: repmgr_primary
- name: Repmgr | Slurp ssh private key
slurp:
src: "{{repmgr_private_key_path}}"
register: ssh_private_key
when: repmgr_primary
- name: Repmgr | Update authorized_keys for postgres user
authorized_key:
user: postgres
state: present
key: "{% for host, vars in hostvars.items() if 'repmgr_primary' in vars and vars['repmgr_primary'] == True %}{{ vars['ssh_public_key']['content'] | b64decode }}{% endfor %}"
- name: Repmgr | Update public ssh key for postgres user
copy:
content: "{% for host, vars in hostvars.items() if 'repmgr_primary' in vars and vars['repmgr_primary'] == True %}{{ vars['ssh_public_key']['content'] | b64decode }}{% endfor %}"
dest: "{{repmgr_public_key_path}}"
owner: "{{ postgresql_service_user }}"
group: "{{ postgresql_service_group }}"
mode: 0644
- name: Repmgr | Update private ssh key for postgres user
copy:
content: "{% for host, vars in hostvars.items() if 'repmgr_primary' in vars and vars['repmgr_primary'] == True %}{{ vars['ssh_private_key']['content'] | b64decode }}{% endfor %}"
dest: "{{repmgr_private_key_path}}"
owner: "{{ postgresql_service_user }}"
group: "{{ postgresql_service_group }}"
mode: 0600
- name: Repmgr | Check cluster status
command: "{{postgresql_bin_directory}}/repmgr -f {{repmgr_config_directory}}/repmgr.conf cluster show"
become: yes
become_user: "{{ postgresql_service_user }}"
changed_when: repmgr_cluster_show.rc != 0
register: repmgr_cluster_show
ignore_errors: True
- name: Repmgr | Register as primary
command: "{{postgresql_bin_directory}}/repmgr -f {{repmgr_config_directory}}/repmgr.conf primary register"
become: yes
become_user: "{{ postgresql_service_user }}"
when: repmgr_primary and not ansible_hostname in repmgr_cluster_show.stdout and not "primary" in repmgr_cluster_show.stdout
- name: Repmgr | Ensure postgresql slave is stopped before clone
service:
name: "postgresql-{{postgresql_version}}"
state: stopped
when: not repmgr_primary and not ansible_hostname in repmgr_cluster_show.stdout and not "standby" in repmgr_cluster_show.stdout
- name: Repmgr | Clone standby
command: "{{postgresql_bin_directory}}/repmgr -F -h {% for host, vars in hostvars.items() if 'repmgr_primary' in vars and vars['repmgr_primary'] == True %}{{ host }}{% endfor %} -p {{ postgresql_port }} -U repmgr -d repmgr -f {{repmgr_config_directory}}/repmgr.conf standby clone"
become: yes
become_user: "{{ postgresql_service_user }}"
when: not repmgr_primary and not ansible_hostname in repmgr_cluster_show.stdout and not "standby" in repmgr_cluster_show.stdout
- name: Repmgr | Ensure postgresql slave is running after clone
service:
name: "postgresql-{{postgresql_version}}"
state: started
when: not repmgr_primary
- name: Repmgr | Wait for Postgres
wait_for:
timeout: 2
delegate_to: localhost
become: false
- name: Repmgr | Register standby
command: "{{postgresql_bin_directory}}/repmgr -F -h {% for host, vars in hostvars.items() if 'repmgr_primary' in vars and vars['repmgr_primary'] == True %}{{ host }}{% endfor %} -U repmgr -d repmgr -f {{repmgr_config_directory}}/repmgr.conf standby register"
become: yes
become_user: "{{ postgresql_service_user }}"
when: not repmgr_primary and not ansible_hostname in repmgr_cluster_show.stdout and not "standby" in repmgr_cluster_show.stdout
- name: Repmgr | Verify cluster functionality
command: "{{postgresql_bin_directory}}/repmgr -F -h {% for host, vars in hostvars.items() if 'repmgr_primary' in vars and vars['repmgr_primary'] == True %}{{ host }}{% endfor %} -U repmgr -d repmgr -f {{repmgr_config_directory}}/repmgr.conf cluster crosscheck"
become: yes
become_user: "{{ postgresql_service_user }}"
- name: Repmgr | Ensure repmgrd is running
service:
name: "repmgr{{postgresql_version}}"
state: started
enabled: yes
when: repmgr_monitoring_history == "true" or repmgr_failover == "automatic"
- name: Repmgr | Ensure crontab is installed
package:
name: crontabs
when: repmgr_monitoring_history == "true" or repmgr_failover == "automatic"
- name: Repmgr | Ensure crond is running
service:
name: "crond"
state: started
enabled: yes
- name: Repmgr | Setup cluster monitoring history cleanup
copy:
content: "{{postgresql_bin_directory}}/repmgr -f {{repmgr_config_directory}}/repmgr.conf cluster cleanup --keep-history={{repmgr_keep_history_days}}"
dest: "/etc/cron.daily/repmgr_cleanup"
mode: 0755
when: repmgr_monitoring_history == "true" or repmgr_failover == "automatic"