#!/bin/bash
mon_host=mon01.example.com
cluster=ceph
osd_host=$1
[ -z $osd_host ] && exit 1
ssh_osd() {
ssh root@$osd_host "$*"
}
ssh_mon() {
ssh root@$mon_host "$*"
}
recreate_dev() {
id=$1
dev=$2
ssh_osd "systemctl stop ceph-osd@${id}"
ssh_mon "ceph osd down ${id}"
ssh_mon "ceph osd out ${id}"
sleep 1
ssh_mon "ceph osd destroy ${id} --yes-i-really-mean-it"
sleep 1
ssh_osd "ceph-volume lvm zap ${dev}"
ssh_osd "ceph-volume lvm create --osd-id ${id} --data ${dev}"
}
get_num_osds() {
ssh_osd "mount | grep -v tmpfs | grep 'osd/${cluster}' | awk '{printf \"%s %s\n\",\$1,\$3}' | sed 's_/var/lib/ceph/osd/${cluster}-__g' | wc -l"
}
get_next_osd() {
ssh_osd "mount | grep -v tmpfs | grep 'osd/${cluster}' | awk '{printf \"%s %s\n\",\$1,\$3}' | sed 's_/var/lib/ceph/osd/${cluster}-__g' | sort -u | head -n 1"
}
for i in $(seq 1 `get_num_osds` )
do
osd=$(get_next_osd)
dev=$(echo $osd | awk '{print $1}')
dev=${dev/[0-9]/}
id=$(echo $osd | awk '{print $2}')
echo "$i: id{$id} dev{$dev}"
recreate_dev $id $dev
done