summaryrefslogtreecommitdiffstats
path: root/os-plugins/plugins/xen/files/xen.examples/scripts/block-iscsi
diff options
context:
space:
mode:
Diffstat (limited to 'os-plugins/plugins/xen/files/xen.examples/scripts/block-iscsi')
-rwxr-xr-xos-plugins/plugins/xen/files/xen.examples/scripts/block-iscsi78
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