1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-23 22:50:09 +03:00

Feature #1254: datastore_mad part of the full iscsi support.

This commit has adapted from the contribution provided by SZTAKI LPDS.
This commit is contained in:
Jaime Melis 2012-06-26 18:49:31 +02:00
parent a708ffb5f5
commit b91bb29284
5 changed files with 57 additions and 29 deletions

View File

@ -56,6 +56,7 @@ done < <($XPATH /DS_DRIVER_ACTION_DATA/DATASTORE/BASE_PATH \
/DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/VG_NAME \
/DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/BASE_IQN \
/DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/BASE_TID \
/DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/TARGET_CONF \
/DS_DRIVER_ACTION_DATA/IMAGE/PATH \
/DS_DRIVER_ACTION_DATA/IMAGE/SIZE \
/DS_DRIVER_ACTION_DATA/IMAGE/TEMPLATE/MD5 \
@ -69,10 +70,11 @@ DST_HOST="${XPATH_ELEMENTS[4]:-$HOST}"
VG_NAME="${XPATH_ELEMENTS[5]:-$VG_NAME}"
BASE_IQN="${XPATH_ELEMENTS[6]:-$BASE_IQN}"
BASE_TID="${XPATH_ELEMENTS[7]:-$BASE_TID}"
SRC="${XPATH_ELEMENTS[8]}"
SIZE="${XPATH_ELEMENTS[9]}"
MD5="${XPATH_ELEMENTS[10]}"
SHA1="${XPATH_ELEMENTS[11]}"
TARGET_CONF="${XPATH_ELEMENTS[8]:-$TARGET_CONF}"
SRC="${XPATH_ELEMENTS[9]}"
SIZE="${XPATH_ELEMENTS[10]}"
MD5="${XPATH_ELEMENTS[11]}"
SHA1="${XPATH_ELEMENTS[12]}"
set_up_datastore "$BASE_PATH" "$RESTRICTED_DIRS" "$SAFE_DIRS" "$UMASK"
@ -80,14 +82,18 @@ LV_NAME="lv-one-${ID}"
IQN="$BASE_IQN:$DST_HOST.$VG_NAME.$LV_NAME"
DEV="/dev/$VG_NAME/$LV_NAME"
let TID=ID+BASE_TID
REGISTER_CMD=$(cat <<EOF
set -e
$SUDO $LVCREATE -L${SIZE}M ${VG_NAME} -n ${LV_NAME}
$SUDO $(tgtadm_target_new "$TID" "$IQN")
$SUDO $(tgtadm_target_bind_all "$TID")
$SUDO $(tgtadm_logicalunit_new "$TID" "$DEV")
TID=\$($SUDO $(tgtadm_next_tid))
[ -z "\$TID" ] && TID=$BASE_TID
$SUDO $(tgtadm_target_new "\$TID" "$IQN")
$SUDO $(tgtadm_target_bind_all "\$TID")
$SUDO $(tgtadm_logicalunit_new "\$TID" "$DEV")
$SUDO $(tgt_admin_dump_config "$TARGET_CONF")
EOF
)

View File

@ -29,3 +29,7 @@ BASE_TID=1
# Lists of hosts (separated by spaces) for which no iscsiadm login or logout
# is performed.
NO_ISCSI="$HOSTNAME"
# File where the iSCSI configured is dumped to (tgt-admin --dump)
# If it poings to /dev/null, iSCSI targets will not be persistent
TARGET_CONF=/etc/tgt/targets.conf

View File

@ -54,10 +54,10 @@ done < <($XPATH /DS_DRIVER_ACTION_DATA/DATASTORE/BASE_PATH \
/DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/VG_NAME \
/DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/BASE_IQN \
/DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/BASE_TID \
/DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/TARGET_CONF \
/DS_DRIVER_ACTION_DATA/IMAGE/FSTYPE \
/DS_DRIVER_ACTION_DATA/IMAGE/SIZE)
BASE_PATH="${XPATH_ELEMENTS[0]}"
RESTRICTED_DIRS="${XPATH_ELEMENTS[1]}"
SAFE_DIRS="${XPATH_ELEMENTS[2]}"
@ -66,8 +66,9 @@ DST_HOST="${XPATH_ELEMENTS[4]:-$HOST}"
VG_NAME="${XPATH_ELEMENTS[5]:-$VG_NAME}"
BASE_IQN="${XPATH_ELEMENTS[6]:-$BASE_IQN}"
BASE_TID="${XPATH_ELEMENTS[7]:-$BASE_TID}"
FSTYPE="${XPATH_ELEMENTS[8]}"
SIZE="${XPATH_ELEMENTS[9]:-0}"
TARGET_CONF="${XPATH_ELEMENTS[8]:-$TARGET_CONF}"
FSTYPE="${XPATH_ELEMENTS[9]}"
SIZE="${XPATH_ELEMENTS[10]:-0}"
set_up_datastore "$BASE_PATH" "$RESTRICTED_DIRS" "$SAFE_DIRS" "$UMASK"
@ -75,28 +76,25 @@ LV_NAME="lv-one-${ID}"
IQN="$BASE_IQN:$DST_HOST.$VG_NAME.$LV_NAME"
DEV="/dev/$VG_NAME/$LV_NAME"
let TID=ID+BASE_TID
# ------------ Image to save_as disk, no need to create a FS ------------
REGISTER_CMD=$(cat <<EOF
set -e
$SUDO $LVCREATE -L${SIZE}M ${VG_NAME} -n ${LV_NAME}
$SUDO $(tgtadm_target_new "$TID" "$IQN")
$SUDO $(tgtadm_target_bind_all "$TID")
$SUDO $(tgtadm_logicalunit_new "$TID" "$DEV")
$SUDO $(mkfs_command "$DEV" "$FSTYPE")
TID=\$($SUDO $(tgtadm_next_tid))
[ -z "\$TID" ] && TID=$BASE_TID
$SUDO $(tgtadm_target_new "\$TID" "$IQN")
$SUDO $(tgtadm_target_bind_all "\$TID")
$SUDO $(tgtadm_logicalunit_new "\$TID" "$DEV")
$SUDO $(tgt_admin_dump_config "$TARGET_CONF")
[ "$FSTYPE" != "save_as" ] && $SUDO $(mkfs_command "$DEV" "$FSTYPE")
EOF
)
# ------------ Image to save_as disk, no need to create a FS ------------
if [ "$FSTYPE" = "save_as" ]; then
echo "$DST"
exit 0
fi
# ------------ Create the image to the repository ------------
ssh_exec_and_log "$DST_HOST" "$REGISTER_CMD" \
"Error registering $DST_HOST:$DEV"
"Error registering $DST_HOST:$DEV"
echo "$IQN"

View File

@ -58,10 +58,12 @@ LV_NAME=`echo $TARGET|$AWK -F. '{print $(NF)}'`
VG_NAME=`echo $TARGET|$AWK -F. '{print $(NF-1)}'`
DEV="/dev/$VG_NAME/$LV_NAME"
let TID=ID+BASE_TID
IQN="$BASE_IQN:$DST_HOST.$VG_NAME.$LV_NAME"
RM_COMMAND=$(cat <<EOF
$SUDO $(tgtadm_target_delete "$TID")
TID=\$($SUDO $(tgtadm_get_tid_for_iqn "$IQN"))
$SUDO $(tgtadm_target_delete "\$TID")
$SUDO $SYNC
$SUDO $LVREMOVE -f $VG_NAME/$LV_NAME
EOF

View File

@ -43,6 +43,7 @@ SUDO=sudo
SYNC=sync
TAR=tar
TGTADM=tgtadm
TGTADMIN=tgt-admin
VMKFSTOOLS=/usr/sbin/vmkfstools
WGET=wget
@ -342,6 +343,23 @@ function tgtadm_target_delete {
echo "$TGTADM --lld iscsi --op delete --mode target --tid $ID"
}
function tgtadm_get_tid_for_iqn {
IQN="$1"
echo "$TGTADM --lld iscsi --op show --mode target | \
grep \"$IQN\" | awk '{split(\$2,tmp,\":\"); print(tmp[1]);}'"
}
function tgtadm_next_tid {
echo "$TGTADM --lld iscsi --op show --mode target | \
$GREP \"Target\" | tail -n 1 | \
$AWK '{split(\$2,tmp,\":\"); print tmp[1]+1;}'"
}
function tgt_admin_dump_config {
FILE_PATH="$1"
echo "$TGTADMIN --dump |sudo tee $FILE_PATH >& /dev/null"
}
###
function iscsiadm_discovery {