diff options
Diffstat (limited to 'os-plugins/plugins/xen/files/xen.examples/scripts/block-iscsi')
-rwxr-xr-x | os-plugins/plugins/xen/files/xen.examples/scripts/block-iscsi | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/os-plugins/plugins/xen/files/xen.examples/scripts/block-iscsi b/os-plugins/plugins/xen/files/xen.examples/scripts/block-iscsi new file mode 100755 index 00000000..f473a0a9 --- /dev/null +++ b/os-plugins/plugins/xen/files/xen.examples/scripts/block-iscsi @@ -0,0 +1,78 @@ +#!/bin/bash + +# Usage: block-iscsi [add tgtname | remove dev] +# +# This assumes you're running a correctly configured +# iscsi target (server) at the other end! +# Note that we assume that the passwords for discovery (if needed) +# are in /etc/iscsid.conf +# and the node session passwords (if required) in the +# 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" + +# echo "DBG:xen/scripts/block-iscsi $1 $2 XENBUS_PATH=$XENBUS_PATH $par $node" + +find_sdev() +{ + unset dev + for session in /sys/class/iscsi_session/session*; do + if [ "$1" = "`cat $session/targetname`" ]; then + dev=`basename $session/device/target*/*:0:*/block*/*` + return + fi + done +} + +find_sdev_rev() +{ + unset tgt + for session in /sys/class/iscsi_session/session*; do + dev=`basename $session/device/target*/*:0:*/block*/*` + if [ "$dev" = "$1" ]; then + tgt=`cat $session/targetname` + return + fi + done +} + +case "$command" in + add) + # load modules and start iscsid + /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=`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 + fi + done < <(/sbin/iscsiadm -m node) + exit 1 + ;; + + remove) + node=`xenstore-read $XENBUS_PATH/node` || true + dev=$node; dev=${dev#/dev/} + find_sdev_rev $dev + if [ -x /sbin/blockdev -a -n "$node" ]; then blockdev --flushbufs "$node"; fi + test -z "$tgt" && exit 2 + /sbin/iscsiadm -m node -T $tgt --logout + exit 1 + ;; +esac |