mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
158 lines
3.8 KiB
Bash
Executable File
158 lines
3.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# $Id: iscsi_common.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/vm/storage/iscsi/iscsi_common.sh $
|
|
# iscsi_common.sh -- mount volume from ISCSI server
|
|
#
|
|
#
|
|
|
|
# check if server is up and running
|
|
check_iscsi_server() {
|
|
local pings=1
|
|
while ! ping -c 1 -n -q $1 > /dev/null && [ $pings -ne $2 ]
|
|
do
|
|
let pings=pings+1
|
|
done
|
|
|
|
printf "##check_iscsi_server: number of pings=$pings\n"
|
|
[ $pings -eq $2 ] && return 1
|
|
return 0;
|
|
}
|
|
|
|
do_iscsi_login () {
|
|
local rc=0
|
|
#create a record in the client database
|
|
iscsiadm -m node -T $1 -p $2 -o new
|
|
rc=$?
|
|
if [ $rc -gt 0 ]
|
|
then
|
|
printf "Failed to create ISCSI initiator record for target rc=$rc\n" >&2
|
|
return 6
|
|
fi
|
|
# do not autologin upon restart
|
|
iscsiadm -m node -T $1 -p $2 -o update -n node.startup -v manual
|
|
|
|
#login to the target
|
|
iscsiadm -m node -T $1 -p $2 -l
|
|
rc=$?
|
|
if [ $rc -gt 0 ]
|
|
then
|
|
printf "Failed to login to target, rc=$rc\n" >&2
|
|
return 7
|
|
fi
|
|
}
|
|
|
|
|
|
get_device_links() {
|
|
local n=20
|
|
local dev=
|
|
local host=$1
|
|
local iqn=$2
|
|
local disktype=$3
|
|
while [ -z "$dev" -a $n -gt 0 ]
|
|
do
|
|
sleep 3;
|
|
let n=n-1;
|
|
dev=$(ls -l /dev/disk/by-path/ip-$host*$iqn*| awk '{print $NF}' | awk -F"/" '{print $NF}' | head -1)
|
|
done
|
|
|
|
if [ $n -eq 0 ]
|
|
then
|
|
printf "****Timed out waiting for $disktype device to register**\n"
|
|
fi
|
|
printf "$dev\n"
|
|
}
|
|
|
|
do_iscsi_logout() {
|
|
local rc=0
|
|
if [ "$1" == "" ]
|
|
then
|
|
return $rc
|
|
fi
|
|
iscsiadm -m node -T $1 -u #logout
|
|
rc=$?
|
|
if [ $rc -gt 0 ]
|
|
then
|
|
printf "*****Warning: failed to logout of $1 rc=$rc\n"
|
|
fi
|
|
iscsiadm -m node -T $1 -o delete #delete record from db
|
|
if [ $? -gt 0 ]
|
|
then
|
|
printf "*****Warning: failed to delete iscsi record $1 rc=$rc\n"
|
|
fi
|
|
return $rc
|
|
}
|
|
|
|
# unmount a local directory and all data disks within
|
|
unmount_all() {
|
|
local rc=0
|
|
local err=0
|
|
local localdir=$1
|
|
local vmname=$2
|
|
local disks=$(ls -l $DISKDIR | grep $vmname | awk '{print $NF}') #/dev/sdb
|
|
for d in $disks ;
|
|
do
|
|
disknum=$(echo $d | awk -F"/" '{print $NF}') #sdb
|
|
tgt=$(ls -l /dev/disk/by-path | grep -w $disknum | awk '{print $(NF-2)}' | grep -v part | cut -d: -f2- | cut -d- -f3-)
|
|
softlink=$(ls -l $DISKDIR |grep $vmname| grep $d | awk '{print $(NF-2)}') #vmname-root or vmname-swap or vmname-data
|
|
rm $DISKDIR/$softlink #delete soft link
|
|
rc=$?
|
|
if [ $rc -gt 0 ]
|
|
then
|
|
printf "*****Warning: failed to delete $DISKDIR/$softlink rc=$rc\n"
|
|
let err=err+1
|
|
fi
|
|
do_iscsi_logout $tgt
|
|
let err=err+$?
|
|
done
|
|
|
|
#unmount the image filesystem from nfs
|
|
local errmsg=$(umount $localdir 2>&1)
|
|
rc=$?
|
|
if [ $rc -gt 0 ]
|
|
then
|
|
echo $errmsg | grep "not mounted"
|
|
if [ $? -eq 1 ]
|
|
then
|
|
printf "*****Warning: unmount failed rc=$rc\n"
|
|
let err=err+1
|
|
fi
|
|
fi
|
|
rm -fr $localdir
|
|
|
|
return $err
|
|
}
|
|
|
|
#find the block device for a particular vm disk
|
|
get_blkdev() {
|
|
local vmname=$1
|
|
local disktype=$2
|
|
local disk=$(ls -l $DISKDIR | grep $vmname-$disktype | awk '{print $NF}') #/dev/sdb
|
|
echo $disk
|
|
}
|
|
|
|
# unmount an iscsi disk
|
|
unmount_disk() {
|
|
local rc=0
|
|
local err=0
|
|
local vmname=$1
|
|
local disktype=$2
|
|
local disks=$(ls -l $DISKDIR | grep $vmname | grep $disktype | awk '{print $NF}') #/dev/sdb
|
|
for d in $disks ;
|
|
do
|
|
local disknum=$(echo $d | awk -F"/" '{print $NF}') #sdb
|
|
local tgt=$(ls -l /dev/disk/by-path | grep -w $disknum | awk '{print $(NF-2)}' | grep -v part | cut -d: -f2- | cut -d- -f3-)
|
|
local softlink=$(ls -l $DISKDIR |grep $vmname| grep $d | awk '{print $(NF-2)}') #vmname-root or vmname-swap or vmname-data
|
|
rm $DISKDIR/$softlink #delete soft link
|
|
rc=$?
|
|
if [ $rc -gt 0 ]
|
|
then
|
|
printf "*****Warning: failed to delete $DISKDIR/$softlink rc=$rc\n"
|
|
let err=err+1
|
|
fi
|
|
do_iscsi_logout $tgt
|
|
let err=err+$?
|
|
done
|
|
return $err
|
|
}
|
|
|
|
DISKDIR="/dev/disk/by-vm/"
|