purge-cluster.yml 9.68 KB
Newer Older
1
2
3
---
# This playbook purges Ceph
# It removes: packages, configuration files and ALL THE DATA
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#
# Use it like this:
# ansible-playbook purge-cluster.yml
#     Prompts for confirmation to purge, defaults to no and
#     doesn't purge the cluster. yes purges the cluster.
#
# ansible-playbook -e ireallymeanit=yes|no purge-cluster.yml
#     Overrides the prompt using -e option. Can be used in
#     automation scripts to avoid interactive prompt.

- name: confirm whether user really meant to purge the cluster
  hosts: localhost

  vars_prompt:
    - name: ireallymeanit
      prompt: Are you sure you want to purge the cluster?
      default: 'no'
      private: no

  tasks:
24
  - name: exit playbook, if user did not mean to purge cluster
25
26
27
28
29
30
31
    fail:
      msg: >
        "Exiting purge-cluster playbook, cluster was NOT purged.
         To purge the cluster, either say 'yes' on the prompt or
         or use `-e ireallymeanit=yes` on the command line when
         invoking the playbook"
    when: ireallymeanit != 'yes'
32

33
34
35
36
37
- name: stop ceph cluster
  hosts:
    - mons
    - osds
    - mdss
38
39
    - rgws

40
41
42
  become: yes

  vars:
43
44
45
46
47
    osd_group_name: osds
    mon_group_name: mons
    rgw_group_name: rgws
    mds_group_name: mdss

48
# When set to true both groups of packages are purged.
49
# This can cause problem with qemu-kvm
50
51
    purge_all_packages: true

52
53
54
# When set to true and raw _multi_journal is used then journal disk are also zapped
    zap_journal_disks: true

55
56
57
58
59
60
61
    ceph_packages:
      - ceph
      - ceph-common
      - ceph-fs-common
      - ceph-fuse
      - ceph-mds
      - ceph-release
62
      - ceph-radosgw
63
64
65
66
67
68
69
70
71
72

    ceph_remaining_packages:
      - libcephfs1
      - librados2
      - libradosstriper1
      - librbd1
      - python-cephfs
      - python-rados
      - python-rbd

73
74
75
76
    cluster: ceph # name of the cluster
    monitor_name: "{{ ansible_hostname }}"
    mds_name: "{{ ansible_hostname }}"

77

78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
  handlers:
  - name: restart machine
    shell: sleep 2 && shutdown -r now "Ansible updates triggered"
    async: 1
    poll: 0
    ignore_errors: true

  - name: wait for server to boot
    local_action: wait_for port=22 host={{ inventory_hostname }} state=started delay=10 timeout=400

  - name: remove data
    file:
     path: /var/lib/ceph
     state: absent

Sébastien Han's avatar
Sébastien Han committed
93
  tasks:
94
95
96
97
98
99
100
  - name: check for a device list
    fail:
      msg: "OSD automatic discovery was detected, purge cluster does not support this scenario. If you want to purge the cluster, manually provide the list of devices in group_vars/osds using the devices variable."
    when:
      devices is not defined and
      osd_auto_discovery

101
  - name: get osd numbers
102
    shell: "if [ -d /var/lib/ceph/osd ] ; then ls /var/lib/ceph/osd | cut -d '-' -f 2 ; fi"
103
104
    register: osd_ids
    changed_when: false
Sébastien Han's avatar
Sébastien Han committed
105

106
107
108
109
  - name: are we using systemd
    shell: "if [ -d /usr/lib/systemd ] ; then find /usr/lib/systemd/system -name 'ceph*' | wc -l ; else echo 0 ; fi"
    register: systemd_unit_files

110
111
112
113
114
115
116
# Infernalis
  - name: stop ceph.target with systemd
    service:
      name: ceph.target
      state: stopped
      enabled: no
    when:
117
      ansible_os_family == 'RedHat' and
118
      systemd_unit_files.stdout != "0"
Sébastien Han's avatar
Sébastien Han committed
119

120
121
122
123
124
125
126
  - name: stop ceph-osd with systemd
    service:
      name: ceph-osd@{{item}}
      state: stopped
      enabled: no
    with_items: "{{ osd_ids.stdout_lines }}"
    when:
127
      ansible_os_family == 'RedHat' and
128
      systemd_unit_files.stdout != "0" and
129
      osd_group_name in group_names
Sébastien Han's avatar
Sébastien Han committed
130

131
  - name: stop ceph mons with systemd
132
133
    service:
      name: ceph-mon@{{ ansible_hostname }}
134
135
136
      state: stopped
      enabled: no
    when:
137
      ansible_os_family == 'RedHat' and
138
139
      systemd_unit_files.stdout != "0" and
      mon_group_name in group_names
Sébastien Han's avatar
Sébastien Han committed
140

141
  - name: stop ceph mdss with systemd
142
143
    service:
      name: ceph-mds@{{ ansible_hostname }}
144
145
      state: stopped
    when:
146
      ansible_os_family == 'RedHat' and
147
148
      systemd_unit_files.stdout != "0" and
      mds_group_name in group_names
Sébastien Han's avatar
Sébastien Han committed
149

150
151
152
153
154
155
156
157
158
  - name: stop ceph rgws with systemd
    service:
      name: ceph-radosgw@rgw.{{ ansible_hostname }}
      state: stopped
    when:
      ansible_os_family == 'RedHat' and
      systemd_unit_files.stdout != "0" and
      rgw_group_name in group_names

159
160
161
162
# before infernalis
  - name: stop ceph osds
    command: service ceph stop osd
    when:
163
      ansible_os_family == 'RedHat' and
164
      osd_group_name in group_names and
165
      systemd_unit_files.stdout == "0"
Sébastien Han's avatar
Sébastien Han committed
166

167
168
169
  - name: stop ceph mons
    command: service ceph stop mon
    when:
170
      ansible_os_family == 'RedHat' and
171
      mon_group_name in group_names and
172
      systemd_unit_files.stdout == "0"
173

174
175
176
  - name: stop ceph mdss
    command: service ceph stop mds
    when:
177
      ansible_os_family == 'RedHat' and
178
      mds_group_name in group_names and
179
      systemd_unit_files.stdout == "0"
180

181
182
183
184
185
186
187
  - name: stop ceph rgws
    command: service ceph-radosgw stop
    when:
      ansible_os_family == 'RedHat' and
      rgw_group_name in group_names and
      systemd_unit_files.stdout == "0"

188
189
# Ubuntu 14.04
  - name: stop ceph osds on ubuntu
190
191
192
193
    shell: |
      for id in $(ls /var/lib/ceph/osd/ |grep -oh '[0-9]*'); do
        initctl stop ceph-osd cluster={{ cluster }} id=$id
      done
194
    failed_when: false
195
196
197
    when:
      ansible_distribution == 'Ubuntu' and
      osd_group_name in group_names
198
    with_items: "{{ osd_ids.stdout_lines }}"
leseb's avatar
leseb committed
199

200
  - name: stop ceph mons on ubuntu
201
    command: initctl stop ceph-mon cluster={{ cluster }} id={{ monitor_name }}
202
203
204
205
    failed_when: false
    when:
      ansible_distribution == 'Ubuntu' and
      mon_group_name in group_names
206

207
  - name: stop ceph mdss on ubuntu
208
    command: initctl stop ceph-mds cluster={{ cluster }} id={{ mds_name }}
209
    failed_when: false
210
211
212
213
    when:
      ansible_distribution == 'Ubuntu' and
      mds_group_name in group_names

214
  - name: stop ceph rgws on ubuntu
215
    command: initctl stop radosgw cluster={{ cluster }} id={{ ansible_hostname }}
216
217
218
219
220
    failed_when: false
    when:
      ansible_distribution == 'Ubuntu' and
      rgw_group_name in group_names

221
222
223
224
225
  - name: check for anything running ceph
    shell: "ps awux | grep -v grep | grep -q -- ceph-"
    register: check_for_running_ceph
    failed_when: check_for_running_ceph.rc == 0

226
  - name: get osd data mount points
227
    shell: "(grep /var/lib/ceph/osd /proc/mounts || echo -n) | awk '{ print $2 }'"
228
229
    register: mounted_osd
    changed_when: false
230
231
232

  - name: drop all cache
    shell: "sync && sleep 1 && echo 3 > /proc/sys/vm/drop_caches"
233
    when:
234
      osd_group_name in group_names
235
236

  - name: umount osd data partition
237
    shell: umount {{ item }}
238
239
240
241
242
    with_items:
     - "{{ mounted_osd.stdout_lines }}"
    when:
     osd_group_name in group_names

243
244
245
246
247
248
249
  - name: remove osd mountpoint tree
    shell: rm -rf /var/lib/ceph/osd
    register: remove_osd_mountpoints
    failed_when: false
    when:
      osd_group_name in group_names

250
251
252
253
254
255
  - name: remove monitor store and bootstrap keys
    shell: rm -rf /var/lib/ceph/
    failed_when: false
    when:
      mon_group_name in group_names

256
257
258
259
260
261
  - name: is reboot needed
    local_action: shell echo requesting reboot
    notify:
      - restart machine
      - wait for server to boot
      - remove data
262
263
    when:
      osd_group_name in group_names and
264
265
      remove_osd_mountpoints.rc != 0

266
267
268
269
270
271
  - name: zap osd disks
    shell: ceph-disk zap "{{ item }}"
    with_items: devices
    when:
     osd_group_name in group_names

272
273
274
275
276
277
  - name: zap journal devices
    shell: ceph-disk zap "{{ item }}"
    with_items: "{{ raw_journal_devices|default([])|unique }}"
    when:
      osd_group_name in group_names and
      raw_multi_journal and
278
      zap_journal_disks
279

280
281
  - name: purge ceph packages with yum
    yum:
282
283
284
285
      name: "{{ item }}"
      state: absent
    with_items:
      - "{{ ceph_packages }}"
286
    when:
287
288
289
290
291
292
293
294
295
296
      ansible_pkg_mgr == 'yum'

  - name: purge ceph packages with dnf
    dnf:
      name: "{{ item }}"
      state: absent
    with_items:
      - "{{ ceph_packages }}"
    when:
      ansible_pkg_mgr == 'dnf'
297

298
299
300
301
302
303
304
  - name: purge ceph packages with apt
    apt:
      name: "{{ item }}"
      state: absent
    with_items:
      - "{{ ceph_packages }}"
    when:
305
      ansible_pkg_mgr == 'apt'
306
307
308

  - name: purge remaining ceph packages with yum
    yum:
309
310
311
312
313
      name: "{{ item }}"
      state: absent
    with_items:
      - "{{ ceph_remaining_packages }}"
    when:
314
315
316
317
318
319
320
321
322
323
324
      ansible_pkg_mgr == 'yum' and
      purge_all_packages == true

  - name: purge remaining ceph packages with dnf
    dnf:
      name: "{{ item }}"
      state: absent
    with_items:
      - "{{ ceph_remaining_packages }}"
    when:
      ansible_pkg_mgr == 'dnf' and
325
326
327
328
329
330
331
332
333
      purge_all_packages == true

  - name: purge remaining ceph packages with apt
    apt:
      name: "{{ item }}"
      state: absent
    with_items:
      - "{{ ceph_remaining_packages }}"
    when:
334
      ansible_pkg_mgr == 'apt' and
335
336
337
338
339
340
341
342
343
344
345
346
      purge_all_packages == true

  - name: remove config
    file:
     path: /etc/ceph
     state: absent

  - name: remove logs
    file:
     path: /var/log/ceph
     state: absent

347
  - name: remove from SysV
348
349
350
351
352
    shell: "update-rc.d -f ceph remove"
    when:
      ansible_distribution == 'Ubuntu'

  - name: remove Upstart nad SysV files
KGoreczny's avatar
KGoreczny committed
353
    shell: "find /etc -name '*ceph*' -delete"
354
355
    when:
      ansible_distribution == 'Ubuntu'
leseb's avatar
leseb committed
356

357
  - name: remove Upstart and apt logs and cache
KGoreczny's avatar
KGoreczny committed
358
    shell: "find /var -name '*ceph*' -delete"
359
    when:
KGoreczny's avatar
KGoreczny committed
360
      ansible_distribution == 'Ubuntu'
361
362
363
364
365
366

  - name: request data removal
    local_action: shell echo requesting data removal
    notify:
      - remove data

367
368
369
370
371
372
373
374
375
376
377
378
379
380
  - name: purge yum cache
    command: yum clean all
    when:
      ansible_pkg_mgr == 'yum'

  - name: purge dnf cache
    command: dnf clean all
    when:
      ansible_pkg_mgr == 'dnf'

  - name: clean apt
    shell: apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
    when:
      ansible_pkg_mgr == 'apt'