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
|
#!/bin/bash
set -u
function reset() {
while pgrep gluster >/dev/null; do
pkill -9 gluster
sleep 0.1
done
findmnt -t fuse.glusterfs -o TARGET | tail -n +2 | xargs -r -n 1 umount
mkdir -p /d/dev
vgremove -fyS "vg_name=~_$(hostname -s)_"
for dev in $(ls /d/dev/ 2>/dev/null); do
losetup -d /d/dev/${dev}
rm -f /d/dev/${dev}
done
}
function clean_all() {
rm -rf /d/* 2>/dev/null
mkdir /d/dev
fstrim /d
rm -rf /var/log/glusterfs 2>/dev/null
mkdir -p /var/log/glusterfs 2>/dev/null
rm -rf /var/lib/glusterd 2>/dev/null
tar -xf /tmp/glusterd-backup.tgz -C /var/lib
}
function prepare() {
reset
tar -czf /tmp/glusterd-backup.tgz -C /var/lib glusterd
clean_all
}
function terminate() {
local name="${1}"
local url
reset
tar -czf /tmp/glusterfs-logs.tgz -C /var/log glusterfs
if [[ -n "${HOST_URL}" ]]; then
url="${HOST_URL}/run/${name%.t}.$(date --utc +"%Y%m%d%H%M%S").tgz"
curl -s -X PUT --upload-file /tmp/glusterfs-logs.tgz "${url}" >/dev/null
fi
clean_all
}
prepare
ROOT="/root/glusterfs"
NAME="$(realpath --relative-to "${ROOT}" "${1}")"
LOG="/tmp/output.log"
pushd "${ROOT}" >/dev/null
echo "$(date --utc --rfc-3339 seconds) - $(hostname -s)" >"${LOG}"
res="0"
if ! prove -vmfe /bin/bash "${NAME}" >>"${LOG}" 2>&1; then
res="1"
fi
echo "$(date --utc --rfc-3339 seconds) - Result: ${res}" >>"${LOG}"
mv "${LOG}" /var/log/glusterfs/
popd >/dev/null
terminate "${NAME}"
exit ${res}
|