ceph-ansible/purge-cluster.yml

251 lines
5.8 KiB
YAML

---
# This playbook purges Ceph
# It removes: packages, configuration files and ALL THE DATA
- name: stop ceph cluster
hosts:
- mons
- osds
- mdss
- rgws
become: yes
roles:
- ceph-common
vars:
# When set to true both groups of packages are purged.
# This can cause problem with qemu-kvm
purge_all_packages: true
# When set to true and raw _multi_journal is used then journal disk are also zapped
zap_journal_disks: true
ceph_packages:
- ceph
- ceph-common
- ceph-fs-common
- ceph-fuse
- ceph-mds
- ceph-release
- ceph-radosgw
ceph_remaining_packages:
- libcephfs1
- librados2
- libradosstriper1
- librbd1
- python-cephfs
- python-rados
- python-rbd
tasks:
- name: get osd numbers
shell: "if [ -d /var/lib/ceph/osd ] ; then ls /var/lib/ceph/osd | cut -d '-' -f 2 ; fi"
register: osd_ids
changed_when: false
# Infernalis
- name: stop ceph.target with systemd
service:
name: ceph.target
state: stopped
enabled: no
when:
ansible_os_family == 'RedHat' and
ceph_stable_release == 'infernalis'
- name: stop ceph-osd with systemd
service:
name: ceph-osd@{{item}}
state: stopped
enabled: no
with_items: "{{ osd_ids.stdout_lines }}"
when:
ansible_os_family == 'RedHat' and
ceph_stable_release == 'infernalis' and
osd_group_name in group_names
- name: stop ceph mons with systemd
service:
name: ceph-mon@{{ ansible_hostname }}
state: stopped
enabled: no
when:
ansible_os_family == 'RedHat' and
ceph_stable_release == 'infernalis' and
mon_group_name in group_names
- name: stop ceph mdss with systemd
service:
name: ceph-mds@{{ ansible_hostname }}
state: stopped
when:
ansible_os_family == 'RedHat' and
ceph_stable_release == 'infernalis' and
mds_group_name in group_names
# before infernalis
- name: stop ceph osds
command: service ceph stop osd
when:
ansible_os_family == 'RedHat' and
osd_group_name in group_names and
ceph_stable_release != 'infernalis'
- name: stop ceph mons
command: service ceph stop mon
when:
ansible_os_family == 'RedHat' and
mon_group_name in group_names and
ceph_stable_release != 'infernalis'
- name: stop ceph mdss
command: service ceph stop mds
when:
ansible_os_family == 'RedHat' and
mds_group_name in group_names and
ceph_stable_release != 'infernalis'
# Ubuntu 14.04
- name: stop ceph osds on ubuntu
command: stop ceph-osd-all
failed_when: false
when:
ansible_distribution == 'Ubuntu' and
osd_group_name in group_names
- name: stop ceph mons on ubuntu
command: stop ceph-mon-all
failed_when: false
when:
ansible_distribution == 'Ubuntu' and
mon_group_name in group_names
- name: stop ceph mdss on ubuntu
command: stop ceph-mds-all
failed_when: false
when:
ansible_distribution == 'Ubuntu' and
mds_group_name in group_names
# rc is 2 if file not found, so no mount point, so no error
- name: get osd data mount points
shell: ls /var/lib/ceph/osd
register: mounted_osd
changed_when: false
failed_when: mounted_osd.rc != 0 and mounted_osd.rc != 2
when:
osd_group_name in group_names
- name: umount osd data partition
shell: umount /var/lib/ceph/osd/{{ item }}
failed_when: false
with_items:
- "{{ mounted_osd.stdout_lines }}"
when:
osd_group_name in group_names
- name: zap osd disks
shell: ceph-disk zap "{{ item }}"
with_items: devices
when:
osd_group_name in group_names
- 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
zap_journal_disks
- name: purge ceph packages with yum
yum:
name: "{{ item }}"
state: absent
with_items:
- "{{ ceph_packages }}"
when:
ansible_pkg_mgr == 'yum'
- name: purge ceph packages with dnf
dnf:
name: "{{ item }}"
state: absent
with_items:
- "{{ ceph_packages }}"
when:
ansible_pkg_mgr == 'dnf'
- name: purge ceph packages with apt
apt:
name: "{{ item }}"
state: absent
with_items:
- "{{ ceph_packages }}"
when:
ansible_pkg_mgr == 'apt'
- name: purge remaining ceph packages with yum
yum:
name: "{{ item }}"
state: absent
with_items:
- "{{ ceph_remaining_packages }}"
when:
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
purge_all_packages == true
- name: purge remaining ceph packages with apt
apt:
name: "{{ item }}"
state: absent
with_items:
- "{{ ceph_remaining_packages }}"
when:
ansible_pkg_mgr == 'apt' and
purge_all_packages == true
- name: remove config
file:
path: /etc/ceph
state: absent
- name: remove data
file:
path: /var/lib/ceph
state: absent
- name: remove logs
file:
path: /var/log/ceph
state: absent
- name: remove form SysV
shell: "update-rc.d -f ceph remove"
when:
ansible_distribution == 'Ubuntu'
- name: remove Upstart nad SysV files
shell: "find /etc -name '*ceph*' -delete"
when:
ansible_distribution == 'Ubuntu'
- name: remove Upstart and apt logs and cache
shell: "find /var -name '*ceph*' -delete"
when:
ansible_distribution == 'Ubuntu'