-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathsite.yaml
224 lines (182 loc) · 6.5 KB
/
site.yaml
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
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
---
- hosts: nodes
any_errors_fatal: true
gather_facts: yes
become: yes
vars_prompt:
- name: lb_user
prompt: "http://my.linbit.com username"
private: no
- name: lb_pass
prompt: "http://my.linbit.com password (will not be echoed)"
private: yes
- name: lb_con_id
prompt: "LINBIT Contract ID (provided by LINBIT)"
private: no
- name: lb_clu_id
prompt: "LINBIT Cluster ID (provided by LINBIT)"
private: no
tasks:
- name: set selinux to permissive
selinux:
policy: targeted
state: permissive
- name: yum update all system packages to latest
yum: name=* state=latest
- name: check if reboot is needed after kernel update
shell: LAST_KERNEL=$(rpm -q --last kernel | awk 'NR==1{sub(/kernel-/,""); print $1}'); CURRENT_KERNEL=$(uname -r); if [ $LAST_KERNEL != $CURRENT_KERNEL ]; then echo 'reboot'; else echo 'no'; fi
ignore_errors: true
register: reboot_hint
- name: reboot to load new kernel if needed
reboot:
when: reboot_hint.stdout.find("reboot") != -1
register: reboot_happened
- name: fetch the latest linbit-manage-node.py
get_url:
url: "https://my.linbit.com/linbit-manage-node.py"
dest: "/tmp/linbit-manage-node.py"
mode: "0640"
force: "yes"
- name: register nodes using linbit-manage-node.py
shell: bash -c "LB_USERNAME={{ lb_user }} LB_PASSWORD={{ lb_pass }} LB_CONTRACT_ID={{ lb_con_id }} LB_CLUSTER_ID={{ lb_clu_id }} {{ ansible_python.executable }} /tmp/linbit-manage-node.py"
- name: install cluster stack and NFS related packages
yum:
name:
- kmod-drbd
- drbd
- pacemaker
- corosync
- resource-agents
- crmsh
- nfs-utils
- rpcbind
update_cache: yes
state: latest
- name: check if firewalld is running
shell: systemctl status firewalld
register: firewalld
failed_when: ( firewalld.rc not in [ 0, 3 ] )
- name: open ports in firewalld for DRBD
firewalld:
port: 7777-7999/tcp
permanent: true
immediate: true
state: enabled
when: firewalld.rc == 0
- name: open ports in firewalld for Pacemaker/Corosync/DLM
firewalld:
service: high-availability
permanent: true
immediate: true
state: enabled
when: firewalld.rc == 0
- name: open ports in firewalld for NFS
firewalld:
service: nfs
permanent: true
immediate: true
state: enabled
when: firewalld.rc == 0
- name: open ports in firewalld for mountd
firewalld:
service: mountd
permanent: true
immediate: true
state: enabled
when: firewalld.rc == 0
- name: open ports in firewalld for rpc-bind
firewalld:
service: rpc-bind
permanent: true
immediate: true
state: enabled
when: firewalld.rc == 0
- name: configure DRBD device
template: src=r0.j2 dest=/etc/drbd.d/r0.res
register: drbd0_config
- name: configure Corosync
template: src=corosync.j2 dest=/etc/corosync/corosync.conf
register: corosync
- name: stop Pacemaker to renew config
systemd: name=pacemaker state=stopped
- name: stop Corosync to renew config
systemd: name=corosync state=stopped
- name: wait for Pacemaker resources to stop
pause:
seconds: 40
- name: make sure DRBD device is down before wipefs
shell: drbdadm down r0 >> /root/linbit-ans-drbd.log
- name: wipefs on DRBD backing disk to prepare for metadata creation
shell: wipefs -afq {{ drbd_backing_disk }}
- name: drbdadm create-md
shell: drbdadm create-md r0 --force >> /root/linbit-ans-drbd.log
- name: drbdadm up
shell: drbdadm up r0 >> /root/linbit-ans-drbd.log
- name: wait for DRBD to become fully Connected
run_once: true
shell: "drbdadm cstate r0 | grep -v Connected"
register: connected
until: connected.rc != 0
retries: 5
delay: 10
failed_when: "connected.rc !=0 and connected.rc !=1"
- name: check for Inconsistent/Inconsistent[/...] data
run_once: true
shell: "drbdadm dstate r0 | grep -xe '\\(Inconsistent[/]*\\)*'"
register: dsinconsistent
- name: skip DRBD initial sync if all data is inconsistent
run_once: true
shell: drbdadm new-current-uuid r0 --clear-bitmap >> /root/linbit-ans-drbd.log
when: dsinconsistent.rc == 0
- name: restart Corosync
systemd: name=corosync state=restarted
- name: restart Pacemaker
systemd: name=pacemaker state=restarted
- name: enable Corosync at boot
systemd: name=corosync enabled=yes
- name: enable Pacemaker at boot
systemd: name=pacemaker enabled=yes
- name: place the cib import file on all nodes
template: src=cib.j2 dest=/root/cib.txt
register: cib_file
- name: stop all cluster resources for cib replacement
run_once: true
shell: crm configure property stop-all-resources=true >> /root/linbit-ans-cib-import.log
- name: wait for resources to stop
pause:
seconds: 40
- name: put the cluster into maintenance-mode to bring DRBD up temporarily
run_once: true
shell: crm configure property maintenance-mode=true >> /root/linbit-ans-cib-import.log
- name: down DRBD r0 to be certain it is down before up
shell: bash -c 'drbdadm down r0' >> /root/linbit-ans-drbd.log
- name: bring DRBD up in order to format
shell: bash -c 'drbdadm up r0' >> /root/linbit-ans-drbd.log
- name: wait for DRBD to connect before formatting
run_once: true
shell: "drbdadm cstate r0 | grep -v Connected"
retries: 5
delay: 10
register: connected
until: connected.rc != 0
failed_when: "connected.rc !=0 and connected.rc !=1"
- name: create the filesystem if this cluster or DRBD config changed
run_once: true
filesystem:
fstype: xfs
dev: /dev/drbd0
force: yes
- name: take DRBD down to give control back to the cluster
shell: bash -c 'drbdadm down r0' >> /root/linbit-ans-drbd.log
- name: delete old cib to re-evaluate Pacemaker's nodelist
run_once: true
shell: cibadmin -E --force
- name: import the new cib on one node
run_once: true
shell: crm configure load replace /root/cib.txt >> /root/linbit-ans-cib-import.log
- name: take the cluster out of maintenance-mode from one node
run_once: true
shell: crm configure property maintenance-mode=false >> /root/linbit-ans-cib-import.log
- name: start cluster resources after replacement from one node
run_once: true
shell: crm configure property stop-all-resources=false >> /root/linbit-ans-cib-import.log