[stgt] [PATCH] scripts/tgt-setup-lun small improvements

Alexander Nezhinsky alexandern at Voltaire.COM
Sun Sep 13 16:20:22 CEST 2009


Resending with extended usage text.

Some fixes to tgt-setu-lun that improve usability,
including an option to set the backing-store type
and transport (lld type).

Signed-off-by: Alexander Nezhinsky <alexandern at voltaire.com>
---
diff --git a/scripts/tgt-setup-lun b/scripts/tgt-setup-lun
index 1e214ee..107f140 100755
--- a/scripts/tgt-setup-lun
+++ b/scripts/tgt-setup-lun
@@ -21,20 +21,30 @@
 
 usage()
 {
-	name=$(basename $0)
-	echo "usage: $name -d dev -n target_name [initiator_IP1 initiator_IP2 ...] ";
-	echo "example: $name -d /dev/sdb1 -n noni 192.168.10.63";
+	name=$(basename $0);
+	echo "usage:";
+	echo -e "\t$name -n tgt_name -d dev -b bs_name -t transport [initiator_IP1 initiator_IP2 ...]";
+	echo "defaults:";
+	echo -e "\tbacking store: rdwr";
+	echo -e "\ttransport: iscsi";
+	echo -e "\tinitiator: ALL";
+	echo "examples:";
+	echo -e "\t$name -n tgt-1 -d /dev/sdb1 192.168.1.2";
+	echo -e "\t$name -n tgt-2 -d /tmp/null -b null -t iser";
+	echo -e "\t$name -n tgt-3 -d ~/disk3.bin -b rdwr 192.168.1.2 192.168.1.3";
 }
 
 verify_params()
 {
-	if ! [ "$dev" ]; then
+	if ! [ "$dev" -o "$bs_type" == "null" ]; then
 		echo "Error: a device is mandatory";
 		exit 1;
+	else
+		return;
 	fi
 
 	# Make sure that the device exists
-	if ! [ -b $dev -o -f $dev ]; then
+	if ! [ -b $dev -o -f $dev -o -c $dev ]; then
 		echo "Error: $dev is not a device";
 		exit 1;
 	fi
@@ -43,11 +53,16 @@ verify_params()
 		echo "Error: target name is mandatory";
 		exit 1;
 	fi
+
+	if ! [ "$lld_name" ]; then
+		echo "Error: lld name empty";
+		exit 1;
+	fi
 }
 
 find_vacant_tgt_id()
 {
-	id_list=$(tgtadm --lld iscsi --op show --mode target | grep Target | cut -d" " -f2 | sed s/://)
+	id_list=$(tgtadm --lld $lld_name --op show --mode target | grep Target | cut -d" " -f2 | sed s/://)
 
 	next_vacant_id=1
 
@@ -69,7 +84,7 @@ find_vacant_lun()
 	next_vacant_lun=0
 	tmp_file=/tmp/target_list.txt
 
-	tgtadm --lld iscsi --op show --mode target > $tmp_file
+	tgtadm --lld $lld_name --op show --mode target > $tmp_file
 
 	while read line; do
 		# Check if we finished going over this target
@@ -105,12 +120,12 @@ find_vacant_lun()
 
 err_exit()
 {
-	echo "Deleting the new target"
-	tgtadm --lld iscsi --op delete --mode target --tid $tid
+	echo "Deleting new target, tid=$tid"
+	tgtadm --lld $lld_name --op delete --mode target --tid $tid
 	res=$?
 
 	if [ $res -ne 0 ]; then
-		echo "Error: could not delete a target"
+		echo "Error: failed to delete target, tid=$tid"
 	fi
 
 	exit 1
@@ -118,7 +133,7 @@ err_exit()
 
 check_if_tgt_exists()
 {
-	tgt_list=$(tgtadm --lld iscsi --op show --mode target | grep Target | cut -d" " -f3)
+	tgt_list=$(tgtadm --lld $lld_name --op show --mode target | grep Target | cut -d" " -f3)
 
 	for curr_tgt in $tgt_list; do
 		if [ $tgt_name = $curr_tgt ]; then
@@ -134,13 +149,19 @@ if [ $# -eq 0 ]; then
 	exit 1
 fi
 
-while getopts "d:n:h" opt
+lld_name="iscsi"
+
+while getopts "d:n:b:t:h:" opt
 do
 	case ${opt} in
 	d)
 		dev=$OPTARG;;
 	n)
 		tgt_name=$OPTARG;;
+	b)
+		bs_type=$OPTARG;;
+	t)
+		lld_name=$OPTARG;;
 	h*)
 		usage
 		exit 1
@@ -155,45 +176,55 @@ verify_params
 
 # Check if tgtd is running (we should have 2 daemons)
 tgtd_count=`pidof tgtd | wc -w`
-if [ $tgtd_count -ne 2 ]; then
+if [ $tgtd_count -lt 1 ]; then
 	echo "tgtd is not running"
 	echo "Exiting..."
 	exit 1
 fi
 
+echo "Using transport: $lld_name"
+
 tgt_name="iqn.2001-04.com.$(hostname -s)-$tgt_name"
 
 # Make sure that a target with the same name doesn't exist
 check_if_tgt_exists
 if [ $? -eq 1 ]; then
-	echo "Error: a target named $tgt_name already exists"
-	echo "Please select a different target name"
-	exit 1
-fi
-
-find_vacant_tgt_id
-tid=$?
+	echo "Error: target named $tgt_name already exists"
+	read -p "Add a new lun to the existing target? (yes/NO): " add_lun
+	if [ $add_lun != "yes" ]; then
+		exit 1
+	fi
+	tid=$(tgtadm --lld $lld_name --op show --mode target | grep $tgt_name | cut -d" " -f2)
+	tid=${tid%:}
+else
+	find_vacant_tgt_id
+	tid=$?
 
-# Create the new target
-echo "Creating the new target ($tgt_name)"
-tgtadm --lld iscsi --op new --mode target --tid $tid -T $tgt_name
-res=$?
+	# Create the new target
+	echo "Creating new target (name=$tgt_name, tid=$tid)"
+	tgtadm --lld $lld_name --op new --mode target --tid $tid -T $tgt_name
+	res=$?
 
-if [ $res -ne 0 ]; then
-	echo "Error: could not create a target"
-	exit 1
+	if [ $res -ne 0 ]; then
+		echo "Error: failed to create target (name=$tgt_name, tid=$tid)"
+		exit 1
+	fi
 fi
 
 find_vacant_lun $tid
 lun=$?
 
 # Add a logical unit to the target
-echo "Adding a logical unit ($dev) to the target"
-tgtadm --lld iscsi --op new --mode logicalunit --tid $tid --lun $lun -b $dev
+echo "Adding a logical unit ($dev) to target, tid=$tid"
+if [ $bs_type ]; then
+	echo "Setting backing store type: $bs_type"
+	bs_opt="-E $bs_type"
+fi
+tgtadm --lld $lld_name --op new --mode logicalunit --tid $tid --lun $lun -b $dev $bs_opt
 res=$?
 
 if [ $res -ne 0 ]; then
-	echo "Error: could not add a logical unit to the target"
+	echo "Error: failed to add a logical unit ($dev) to target, tid=$tid"
 	err_exit
 fi
 
@@ -202,22 +233,21 @@ if test "$initiators" ; then
 	# Allow access only for specific initiators
 	echo "Accepting connections only from $initiators"
 	for initiator in $initiators; do
-		tgtadm --lld iscsi --op bind --mode target --tid $tid -I $initiator
+		tgtadm --lld $lld_name --op bind --mode target --tid $tid -I $initiator
 		res=$?
 
 		if [ $res -ne 0 ]; then
-			echo "Error: could not assign an initiator to the target"
-			err_exit
+			echo "Error: could not assign initiator $initiator to the target"
 		fi
 	done
 else
 	# Allow access for everyone
-	echo "Accepting connections from every initiator"
-	tgtadm --lld iscsi --op bind --mode target --tid $tid -I ALL
+	echo "Accepting connections from all initiators"
+	tgtadm --lld $lld_name --op bind --mode target --tid $tid -I ALL
 	res=$?
 
 	if [ $res -ne 0 ]; then
-		echo "Error: could not assign initiators to the target"
+		echo "Error: failed to set access for all initiators"
 		err_exit
 	fi
 fi
--
To unsubscribe from this list: send the line "unsubscribe stgt" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html



More information about the stgt mailing list