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
|
#!/bin/sh
set -e
# set -x
usage()
{
cat <<EOF
Description:
Replace ring weight
Usage:
$0 <cluster-name> <account|container|object|object-1|...> <weight source> <weight dest>
Options:
-h: show this help menu
EOF
exit 1
}
while getopts "h" o; do
case "${o}" in
h)
usage
;;
?)
echo "Invalid option" && exit 1
;;
esac
done
shift $((OPTIND-1))
if [ $# -ne 4 ] ; then
echo "ERROR: Four arguments expected"
usage
fi
CLUSTER_NAME=${1}
RING_TYPE=${2}
SOURCE_WEIGHT=${3}
DEST_WEIGHT=${4}
LOCAL_RING_PATH="/var/lib/oci/clusters/${CLUSTER_NAME}/swift-ring"
# Build available ring list
AVAILABLE_RINGS=""
for ring in $(ls ${LOCAL_RING_PATH}/ | grep -E '^(account|container|object).*?\.builder'); do
AVAILABLE_RINGS="${AVAILABLE_RINGS} ${ring%.builder}"
done
if [ ! -e "${LOCAL_RING_PATH}/${2}.builder" ] && [ "${2}" != "all" ] ; then
echo "ERROR: Not a valid/existing ring type"
exit 1
fi
TMPFILE=$(mktemp)
swift-ring-builder ${RING_TYPE}.builder | grep " ${SOURCE_WEIGHT}.00" | awk '{print $4}' | cut -d: -f1 | sort -u >${TMPFILE}
for i in $(cat ${TMPFILE}) ; do
swift-ring-builder ${RING_TYPE}.builder set_weight ${i} ${DEST_WEIGHT} -y
done
rm ${TMPFILE}
|