Files
pkgsrc-ng/sysutils/bacula/files/chio-changer
2013-09-26 17:14:40 +02:00

98 lines
2.1 KiB
Bash
Executable File

#!/bin/sh
#
# Bacula interface to chio autoloader
#
# If you set in your Device resource
#
# Changer Command = "path-to-this-script/chio-changer %c %o %S %a %d"
# you will have the following input to this script:
#
# So Bacula will always call with all the following arguments, even though
# in come cases, not all are used.
#
# chio-changer "changer-device" "command" "slot" "archive-device" "drive-index"
# $1 $2 $3 $4 $5
#
# N.B. If you change the script, take care to return either
# the chio exit code or a 0. If the script exits with a non-zero
# exit code, Bacula will assume the request failed.
CHIO=/bin/chio
# check parameter count on commandline
check_parm_count() {
pCount=$1
pCountNeed=$2
if test $pCount -lt $pCountNeed; then
echo "usage: chio-changer ctl-device command [slot archive-device drive-index]"
echo " Insufficient number of arguments given."
if test $pCount -lt 2; then
echo " Mimimum usage is first two arguments ..."
else
echo " Command expected $pCountNeed arguments"
fi
exit 1
fi
}
# Check for special cases where only 2 arguments are needed,
# all others are a minimum of 5
case $2 in
list|listall)
check_parm_count $# 2
;;
slots)
check_parm_count $# 2
;;
transfer)
check_parm_count $# 4
;;
*)
check_parm_count $# 5
;;
esac
# Setup arguments
ctl=$1
cmd="$2"
slot=$3
device=$4
drive=$5
case $cmd in
unload)
${CHIO} -f $ctl move drive $drive slot $slot
;;
load)
${CHIO} -f $ctl move slot $slot drive $drive
;;
list)
${CHIO} -f $ctl status slot voltags | /usr/bin/awk "/</ { slot=\$2 }\
/Primary volume tag:/ { tag=\$4 }\
/From:/ { print slot tag }"
;;
listall)
echo "Not yet implemented"
;;
loaded)
${CHIO} -f $ctl status drive $drive | /usr/bin/awk "BEGIN { from=0 }\
/From:/{ from=\$3 }\
END { print from }"
;;
slots)
${CHIO} -f $ctl params | awk "/slots/{print \$2}"
;;
transfer)
${CHIO} -f $ctl move slot $slot slot $device
;;
esac
sleep 1