OBS User unknown
2008-03-06 01:36:51 +00:00
committed by Git OBS Bridge
parent 3c15755877
commit 3a23990c80
60 changed files with 11208 additions and 891 deletions

View File

@@ -10,58 +10,36 @@
# open-iscsi database below /var/lib/open-iscsi/node.db
#
# (c) Kurt Garloff <kurt@garloff.de>, 2006-09-04, GNU GPL
# Contributors: Jim Fehlig <jfehlig@novell.com>
# Stefan de Konink <skinkie@xs4all.nl>
dir=$(dirname "$0")
. "$dir/block-common.sh"
#command=$1
#echo "DBG:xen/scripts/block-iscsi $1 $2 XENBUS_PATH=$XENBUS_PATH $par $node"
# echo "DBG:xen/scripts/block-iscsi $1 $2 XENBUS_PATH=$XENBUS_PATH $par $node"
#write_dev()
#{
# echo "$1"
#}
sess_lun_to_bdev()
{
unset dev
cnt=`ls -d $1/device/target*/*:0:*:$2/block* | wc -l`
nm=`ls -d $1/device/target*/*:0:*:$2/block*`
for n in $nm; do
d=`readlink $n`
d=${d##*/}
if test -z "$dev"; then dev=$d; else dev="$dev $d"; fi
done
}
# Arguments: IQN name, LUN
find_sdev()
{
unset dev
lun=${2:-0}
for session in /sys/class/iscsi_session/session*; do
if ! test -e $session; then return; fi
if test $1 = `cat $session/targetname`; then
sess_lun_to_bdev $session $lun
#echo "fs: $1[$lun] ($cnt) -> $dev" 1>&2
if [ "$1" = "`cat $session/targetname`" ]; then
dev=`readlink $session/device/target*/*:0:*/block*`
dev=${dev##*/}
return
fi
done
}
}
find_sdev_rev()
{
unset tgt
for session in /sys/class/iscsi_session/session*; do
if ! test -e $session; then return; fi
sess_lun_to_bdev $session "*"
for d in $dev; do
if test "$d" = "$1"; then
tgt=`cat $session/targetname`
#echo "fsr: $2 -> $tgt ($cnt)" 1>&2
return
fi
done
dev=`readlink $session/device/target*/*:0:*/block*`
dev=${dev##*/}
if [ "$dev" = "$1" ]; then
tgt=`cat $session/targetname`
return
fi
done
}
@@ -71,42 +49,32 @@ case "$command" in
/etc/init.d/open-iscsi status >/dev/null 2>&1 ||
{ /etc/init.d/open-iscsi start >/dev/null 2>&1; sleep 1; }
# list of targets on node
/sbin/iscsiadm -m discovery | sed "s/ .*//g" | while read line; do /sbin/iscsiadm -m discovery -t sendtargets -p $line; done >/dev/null
par=`xenstore-read $XENBUS_PATH/params` || true
TGTID=$par; TGTID=${TGTID//@/:}
LUN=${TGTID##*,}; TGTID=${TGTID%,*}
if test $LUN = $TGTID; then unset LUN; fi
#echo "add $TGTID lun $LUN" 1>&2
while read rec port uuid; do
rec=${rec%]}; rec=${rec#[}
if test $uuid = $TGTID; then
find_sdev $TGTID $LUN
if test -z "$dev"; then
#echo iscsiadm -m node -T $uuid -p $port -l 1>&2
iscsiadm -m node -r $rec -l || exit 2
usleep 100000
find_sdev $TGTID $LUN
fi
xenstore-write $XENBUS_PATH/node /dev/$dev
TGTID=`echo $par | sed "s/\/\///g"`
while read rec uuid; do
if [ "$uuid" = "$TGTID" ]; then
find_sdev $TGTID
if [ -z "$dev" ]; then
/sbin/iscsiadm -m node -T $uuid -p $rec --login || exit 2
sleep 4
find_sdev $TGTID
fi
xenstore-write $XENBUS_PATH/node /dev/$dev
write_dev /dev/$dev
exit 0
exit 0
fi
done < <(iscsiadm -m node)
done < <(/sbin/iscsiadm -m node)
exit 1
;;
remove)
node=`xenstore-read $XENBUS_PATH/node` || true
dev=$node; dev=${dev#/dev/}
find_sdev_rev $dev
#echo "remove $dev:$tgt" 1>&2
if test -x /sbin/blockdev -a -n "$node"; then blockdev --flushbufs $node; fi
if [ -x /sbin/blockdev -a -n "$node" ]; then blockdev --flushbufs "$node"; fi
test -z "$tgt" && exit 2
while read rec port uuid; do
if test $uuid = $tgt; then
rec=${rec%]}; rec=${rec#[}
iscsiadm -m node -r $rec -u
exit 0
fi
done < <(iscsiadm -m node)
/sbin/iscsiadm -m node -T $tgt --logout
exit 1
;;
esac