mirror of
https://github.com/OpenNebula/one.git
synced 2025-03-21 14:50:08 +03:00
Merge branch 'feature-1254'
This commit is contained in:
commit
ed45af12da
@ -51,7 +51,6 @@ done < <($XPATH /DS_DRIVER_ACTION_DATA/DATASTORE/BASE_PATH \
|
||||
/DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/HOST \
|
||||
/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/IMAGE/PATH \
|
||||
/DS_DRIVER_ACTION_DATA/IMAGE/SIZE)
|
||||
|
||||
@ -62,9 +61,8 @@ UMASK="${XPATH_ELEMENTS[3]}"
|
||||
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]}"
|
||||
SRC="${XPATH_ELEMENTS[7]}"
|
||||
SIZE="${XPATH_ELEMENTS[8]}"
|
||||
|
||||
set_up_datastore "$BASE_PATH" "$RESTRICTED_DIRS" "$SAFE_DIRS" "$UMASK"
|
||||
|
||||
@ -72,8 +70,6 @@ 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
|
||||
|
||||
LV_SRC=$(echo $SRC|awk -F. '{print $NF}')
|
||||
DEV_SRC="/dev/$VG_NAME/$LV_SRC"
|
||||
|
||||
@ -82,9 +78,12 @@ CLONE_CMD=$(cat <<EOF
|
||||
$SUDO $LVCREATE -L${SIZE}M ${VG_NAME} -n ${LV_NAME}
|
||||
$SUDO $DD if=$DEV_SRC of=$DEV bs=64k
|
||||
|
||||
$SUDO $(tgtadm_target_new "$TID" "$IQN")
|
||||
$SUDO $(tgtadm_target_bind_all "$TID")
|
||||
$SUDO $(tgtadm_logicalunit_new "$TID" "$DEV")
|
||||
TID=\$($SUDO $(tgtadm_next_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
|
||||
)
|
||||
|
||||
|
@ -55,7 +55,6 @@ done < <($XPATH /DS_DRIVER_ACTION_DATA/DATASTORE/BASE_PATH \
|
||||
/DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/HOST \
|
||||
/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/IMAGE/PATH \
|
||||
/DS_DRIVER_ACTION_DATA/IMAGE/SIZE \
|
||||
/DS_DRIVER_ACTION_DATA/IMAGE/TEMPLATE/MD5 \
|
||||
@ -68,11 +67,10 @@ UMASK="${XPATH_ELEMENTS[3]}"
|
||||
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]}"
|
||||
SRC="${XPATH_ELEMENTS[7]}"
|
||||
SIZE="${XPATH_ELEMENTS[8]}"
|
||||
MD5="${XPATH_ELEMENTS[9]}"
|
||||
SHA1="${XPATH_ELEMENTS[10]}"
|
||||
|
||||
set_up_datastore "$BASE_PATH" "$RESTRICTED_DIRS" "$SAFE_DIRS" "$UMASK"
|
||||
|
||||
@ -80,14 +78,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=1
|
||||
|
||||
$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
|
||||
)
|
||||
|
||||
|
@ -23,9 +23,10 @@ BASE_IQN=iqn.2012-02.org.opennebula
|
||||
# Default volume group
|
||||
VG_NAME=vg-one
|
||||
|
||||
# Starting TID for iSCSI targets
|
||||
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
|
||||
|
@ -53,11 +53,9 @@ done < <($XPATH /DS_DRIVER_ACTION_DATA/DATASTORE/BASE_PATH \
|
||||
/DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/HOST \
|
||||
/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/IMAGE/FSTYPE \
|
||||
/DS_DRIVER_ACTION_DATA/IMAGE/SIZE)
|
||||
|
||||
|
||||
BASE_PATH="${XPATH_ELEMENTS[0]}"
|
||||
RESTRICTED_DIRS="${XPATH_ELEMENTS[1]}"
|
||||
SAFE_DIRS="${XPATH_ELEMENTS[2]}"
|
||||
@ -65,9 +63,8 @@ UMASK="${XPATH_ELEMENTS[3]}"
|
||||
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}"
|
||||
FSTYPE="${XPATH_ELEMENTS[7]}"
|
||||
SIZE="${XPATH_ELEMENTS[8]:-0}"
|
||||
|
||||
set_up_datastore "$BASE_PATH" "$RESTRICTED_DIRS" "$SAFE_DIRS" "$UMASK"
|
||||
|
||||
@ -75,28 +72,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
|
||||
|
||||
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=1
|
||||
|
||||
$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")
|
||||
|
||||
if [ "$FSTYPE" != "save_as" ]; then
|
||||
$SUDO $(mkfs_command "$DEV" "$FSTYPE")
|
||||
fi
|
||||
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"
|
||||
|
@ -45,12 +45,10 @@ unset i XPATH_ELEMENTS
|
||||
while IFS= read -r -d '' element; do
|
||||
XPATH_ELEMENTS[i++]="$element"
|
||||
done < <($XPATH /DS_DRIVER_ACTION_DATA/IMAGE/SOURCE \
|
||||
/DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/HOST \
|
||||
/DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/BASE_TID)
|
||||
/DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/HOST)
|
||||
|
||||
SRC="${XPATH_ELEMENTS[0]}"
|
||||
DST_HOST="${XPATH_ELEMENTS[1]:-$HOST}"
|
||||
BASE_TID="${XPATH_ELEMENTS[2]:-$BASE_TID}"
|
||||
|
||||
BASE_IQN=`echo $SRC|$CUT -d: -f1`
|
||||
TARGET=`echo $SRC|$CUT -d: -f2`
|
||||
@ -58,12 +56,15 @@ 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
|
||||
$SUDO $(tgt_admin_dump_config "$TARGET_CONF")
|
||||
EOF
|
||||
)
|
||||
|
||||
|
@ -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 {
|
||||
|
@ -36,8 +36,78 @@ else
|
||||
TMCOMMON=$ONE_LOCATION/var/remotes/tm/tm_common.sh
|
||||
fi
|
||||
|
||||
. $TMCOMMON
|
||||
DRIVER_PATH=$(dirname $0)
|
||||
|
||||
log_error "CLONE not supported for TM_ISCSI. Use persistent images"
|
||||
. $TMCOMMON
|
||||
|
||||
exit 1
|
||||
source ${DRIVER_PATH}/../../datastore/iscsi/iscsi.conf
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Set src, dst path and dir
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
TARGET=`arg_path $SRC`
|
||||
|
||||
DST_PATH=`arg_path $DST`
|
||||
DST_HOST=`arg_host $DST`
|
||||
DST_DIR=`dirname $DST_PATH`
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# IQN and TARGETs
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
IQN=$SRC
|
||||
NEW_IQN=$IQN-$VMID
|
||||
|
||||
VG_NAME=`echo $TARGET|$AWK -F. '{print $(NF-1)}'`
|
||||
LV_NAME=`echo $TARGET|$AWK -F. '{print $(NF)}'`
|
||||
SOURCE_DEV="/dev/$VG_NAME/$LV_NAME"
|
||||
|
||||
TARGET_LV_NAME=`echo $LV_NAME-$VMID`
|
||||
TARGET_DEV="/dev/${VG_NAME}/${TARGET_LV_NAME}"
|
||||
TARGET_HOST="${TARGET%.$VG_NAME.$LV_NAME}"
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Clone script
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
CLONE_CMD=$(cat <<EOF
|
||||
set -e
|
||||
|
||||
# get size
|
||||
SIZE=\$($SUDO $LVS --noheadings -o lv_size "$SOURCE_DEV")
|
||||
|
||||
# create lv
|
||||
$SUDO $LVCREATE -L\${SIZE} ${VG_NAME} -n ${TARGET_LV_NAME}
|
||||
|
||||
# clone lv with dd
|
||||
$SUDO $DD if=$SOURCE_DEV of=$TARGET_DEV bs=64k
|
||||
|
||||
# new iscsi target
|
||||
TID=\$($SUDO $(tgtadm_next_tid))
|
||||
|
||||
$SUDO $(tgtadm_target_new "\$TID" "$NEW_IQN")
|
||||
$SUDO $(tgtadm_target_bind_all "\$TID")
|
||||
$SUDO $(tgtadm_logicalunit_new "\$TID" "$TARGET_DEV")
|
||||
$SUDO $(tgt_admin_dump_config "$TARGET_CONF")
|
||||
EOF
|
||||
)
|
||||
|
||||
ssh_exec_and_log "$TARGET_HOST" "$CLONE_CMD" \
|
||||
"Error cloning $DST_HOST:$TARGET_DEV"
|
||||
|
||||
DISCOVERY_CMD=$(cat <<EOF
|
||||
set -e
|
||||
mkdir -p $DST_DIR
|
||||
$SUDO $(iscsiadm_discovery "$TARGET_HOST")
|
||||
$SUDO $(iscsiadm_login "$NEW_IQN" "$TARGET_HOST")
|
||||
sleep 2
|
||||
DISK_BY_PATH=\$(ls /dev/disk/by-path/*$NEW_IQN-lun-1)
|
||||
ln -s "\$DISK_BY_PATH" "$DST_PATH"
|
||||
EOF
|
||||
)
|
||||
|
||||
ssh_exec_and_log "$DST_HOST" "$DISCOVERY_CMD" \
|
||||
"Error discovering $NEW_IQN in $DST_HOST"
|
||||
|
||||
exit 0
|
||||
|
@ -35,6 +35,10 @@ fi
|
||||
|
||||
. $TMCOMMON
|
||||
|
||||
DRIVER_PATH=$(dirname $0)
|
||||
|
||||
source ${DRIVER_PATH}/../../datastore/iscsi/iscsi.conf
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Return if deleting a disk, we will delete them when removing the
|
||||
# remote_system_ds directory for the VM (remotely)
|
||||
@ -42,21 +46,88 @@ fi
|
||||
DST_PATH=`arg_path $DST`
|
||||
DST_HOST=`arg_host $DST`
|
||||
|
||||
if [ `is_disk $DST_PATH` -eq 1 ]; then
|
||||
# Disk
|
||||
LOGOUT_CMD=$(cat <<EOF
|
||||
set -e
|
||||
IQN=\$(readlink $DST_PATH |grep -o 'iqn.*$')
|
||||
IQN=\${IQN%-lun-1}
|
||||
$SUDO $(iscsiadm_logout "\$IQN")
|
||||
EOF
|
||||
)
|
||||
ssh_exec_and_log "$DST_HOST" "$LOGOUT_CMD" \
|
||||
"Error logging out $IQN"
|
||||
#-------------------------------------------------------------------------------
|
||||
# Get IQN information
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
DISK_ID=$(echo "$DST_PATH" | $AWK -F. '{print $NF}')
|
||||
|
||||
XPATH="${DRIVER_PATH}/../../datastore/xpath.rb --stdin"
|
||||
|
||||
unset i XPATH_ELEMENTS
|
||||
|
||||
while IFS= read -r -d '' element; do
|
||||
XPATH_ELEMENTS[i++]="$element"
|
||||
done < <(onevm show -x $VMID| $XPATH \
|
||||
/VM/TEMPLATE/DISK[DISK_ID=$DISK_ID]/SOURCE \
|
||||
/VM/TEMPLATE/DISK[DISK_ID=$DISK_ID]/PERSISTENT)
|
||||
|
||||
IQN="${XPATH_ELEMENTS[0]}"
|
||||
PERSISTENT="${XPATH_ELEMENTS[1]}"
|
||||
|
||||
if [ -z "$PERSISTENT" ]; then
|
||||
NEW_IQN=$IQN-$VMID
|
||||
else
|
||||
NEW_IQN=$IQN
|
||||
fi
|
||||
|
||||
TARGET=`arg_path $IQN`
|
||||
VG_NAME=`echo $TARGET|$AWK -F. '{print $(NF-1)}'`
|
||||
LV_NAME=`echo $TARGET|$AWK -F. '{print $(NF)}'`
|
||||
DEV="/dev/$VG_NAME/$LV_NAME"
|
||||
TARGET_HOST="${TARGET%.$VG_NAME.$LV_NAME}"
|
||||
|
||||
TARGET_LV_NAME=`echo $NEW_IQN|$AWK -F. '{print $(NF)}'`
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Remove directory if dst_path is a directory
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
if [ `is_disk $DST_PATH` -eq 0 ]; then
|
||||
# Directory
|
||||
log "Deleting $DST_PATH"
|
||||
ssh_exec_and_log "$DST_HOST" "rm -rf $DST_PATH" "Error deleting $DST_PATH"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Logout from the iSCSI target in the hypervisor
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
LOGOUT_CMD=$(cat <<EOF
|
||||
set -e
|
||||
$SUDO $(iscsiadm_logout $NEW_IQN)
|
||||
EOF
|
||||
)
|
||||
|
||||
ssh_exec_and_log "$DST_HOST" "$LOGOUT_CMD" \
|
||||
"Error logging out $NEW_IQN"
|
||||
|
||||
if [ "$PERSISTENT" = "YES" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Remove target and LV in the iSCSI server
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
DELETE_CMD=$(cat <<EOF
|
||||
set -e
|
||||
# get tid for IQN
|
||||
TID=\$($SUDO $(tgtadm_get_tid_for_iqn "$NEW_IQN"))
|
||||
|
||||
# remove iscsi target
|
||||
$SUDO $(tgtadm_target_delete "\$TID")
|
||||
|
||||
# dump configuration
|
||||
$SUDO $(tgt_admin_dump_config "$TARGET_CONF")
|
||||
|
||||
# remove lv
|
||||
$SUDO $LVREMOVE -f $VG_NAME/$TARGET_LV_NAME
|
||||
EOF
|
||||
)
|
||||
|
||||
ssh_exec_and_log "$TARGET_HOST" "$DELETE_CMD" \
|
||||
"Error logging out $IQN"
|
||||
|
||||
exit 0
|
||||
|
@ -38,6 +38,9 @@ fi
|
||||
|
||||
. $TMCOMMON
|
||||
|
||||
DRIVER_PATH=$(dirname $0)
|
||||
|
||||
source ${DRIVER_PATH}/../../datastore/iscsi/iscsi.conf
|
||||
#-------------------------------------------------------------------------------
|
||||
# Set dst path and dir
|
||||
#-------------------------------------------------------------------------------
|
||||
@ -60,7 +63,7 @@ DISCOVER_CMD=$(cat <<EOF
|
||||
mkdir -p $DST_DIR
|
||||
$SUDO $(iscsiadm_discovery "$TARGET_HOST")
|
||||
$SUDO $(iscsiadm_login "$IQN" "$TARGET_HOST")
|
||||
sleep 1
|
||||
sleep 2
|
||||
DISK_BY_PATH=\$(ls /dev/disk/by-path/*$IQN-lun-1)
|
||||
ln -s "\$DISK_BY_PATH" "$DST_PATH"
|
||||
EOF
|
||||
@ -68,4 +71,5 @@ EOF
|
||||
|
||||
ssh_exec_and_log "$DST_HOST" "$DISCOVER_CMD" \
|
||||
"Error registering $DST_HOST:$DEV"
|
||||
|
||||
exit 0
|
||||
|
@ -70,33 +70,47 @@ if [ "$SRC" == "$DST" ]; then
|
||||
log "Not moving $SRC to $DST, they are the same path"
|
||||
exit 0
|
||||
fi
|
||||
#-------------------------------------------------------------------------------
|
||||
# Get image information
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
XPATH="${DRIVER_PATH}/../../datastore/xpath.rb --stdin"
|
||||
|
||||
unset i XPATH_ELEMENTS
|
||||
|
||||
DISK_ID=$(echo "$SRC_PATH" | $AWK -F. '{print $NF}')
|
||||
|
||||
while IFS= read -r -d '' element; do
|
||||
XPATH_ELEMENTS[i++]="$element"
|
||||
done < <(onevm show -x $VMID| $XPATH \
|
||||
/VM/TEMPLATE/DISK[DISK_ID=$DISK_ID]/SOURCE \
|
||||
/VM/TEMPLATE/DISK[DISK_ID=$DISK_ID]/PERSISTENT)
|
||||
|
||||
IQN="${XPATH_ELEMENTS[0]}"
|
||||
PERSISTENT="${XPATH_ELEMENTS[1]}"
|
||||
|
||||
if [ -z "$PERSISTENT" ]; then
|
||||
IQN=$IQN-$VMID
|
||||
fi
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Start actions
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
if is_iscsi "$SRC_HOST"; then
|
||||
log "Logging out of $IQN in $SRC_HOST"
|
||||
|
||||
LOGOUT_CMD=$(cat <<EOF
|
||||
set -e
|
||||
IQN=\$(readlink $SRC_PATH |grep -o 'iqn.*$')
|
||||
IQN=\${IQN%-lun-1}
|
||||
$SUDO $(iscsiadm_logout "\$IQN")
|
||||
$SUDO $(iscsiadm_logout "$IQN")
|
||||
EOF
|
||||
)
|
||||
ssh_exec_and_log "$SRC_HOST" "$LOGOUT_CMD" \
|
||||
"Error logging out $SRC_HOST:$SRC_PATH (IQN)"
|
||||
"Error logging out $SRC_HOST:$SRC_PATH ($IQN)"
|
||||
fi
|
||||
|
||||
if is_iscsi "$DST_HOST"; then
|
||||
log "Logging in to IQN in $SRC_HOST"
|
||||
|
||||
log "Getting IQN from $SRC_HOST:$SRC_PATH"
|
||||
|
||||
IQN=$($SSH "$SRC_HOST" "readlink $SRC_PATH |grep -o 'iqn.*$'" )
|
||||
IQN=${IQN%-lun-1}
|
||||
|
||||
if [ -z "$IQN" ]; then
|
||||
log_error "Error getting IQN"
|
||||
exit 1
|
||||
fi
|
||||
log "Logging in to $IQN in $SRC_HOST"
|
||||
|
||||
TARGET_HOST=$(iqn_get_host "$IQN")
|
||||
|
||||
@ -111,9 +125,8 @@ if is_iscsi "$DST_HOST"; then
|
||||
EOF
|
||||
)
|
||||
|
||||
ssh_exec_and_log "$DST_HOST" "$LOGIN_CMD" \
|
||||
"Error logging in $IQN"
|
||||
ssh_exec_and_log "$DST_HOST" "$LOGIN_CMD" \
|
||||
"Error logging in $IQN"
|
||||
fi
|
||||
|
||||
|
||||
exit 0
|
||||
|
@ -36,10 +36,39 @@ else
|
||||
TMCOMMON=$ONE_LOCATION/var/remotes/tm/tm_common.sh
|
||||
fi
|
||||
|
||||
DRIVER_PATH=$(dirname $0)
|
||||
|
||||
. $TMCOMMON
|
||||
|
||||
source ${DRIVER_PATH}/../../datastore/iscsi/iscsi.conf
|
||||
|
||||
SRC_HOST=`arg_host $SRC`
|
||||
IQN=$DST
|
||||
NEW_IQN="$DST"
|
||||
|
||||
DISK_ID=$(echo $SRC|awk -F. '{print $NF}')
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Get image information
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
XPATH="${DRIVER_PATH}/../../datastore/xpath.rb --stdin"
|
||||
|
||||
unset i XPATH_ELEMENTS
|
||||
|
||||
while IFS= read -r -d '' element; do
|
||||
XPATH_ELEMENTS[i++]="$element"
|
||||
done < <(onevm show -x $VMID| $XPATH \
|
||||
/VM/TEMPLATE/DISK[DISK_ID=$DISK_ID]/SOURCE \
|
||||
/VM/TEMPLATE/DISK[DISK_ID=$DISK_ID]/SAVE_AS \
|
||||
/VM/TEMPLATE/DISK[DISK_ID=$DISK_ID]/PERSISTENT)
|
||||
|
||||
IQN="${XPATH_ELEMENTS[0]}"
|
||||
SAVE_AS="${XPATH_ELEMENTS[1]}"
|
||||
PERSISTENT="${XPATH_ELEMENTS[2]}"
|
||||
|
||||
if [ -z "$PERSISTENT" ]; then
|
||||
IQN=$IQN-$VMID
|
||||
fi
|
||||
|
||||
log "Logging out $IQN"
|
||||
|
||||
@ -52,4 +81,39 @@ EOF
|
||||
ssh_exec_and_log "$SRC_HOST" "$LOGOUT_CMD" \
|
||||
"Error logging out $IQN"
|
||||
|
||||
exit 0
|
||||
# Exit if not save_as. We are finished if this was a persistent image.
|
||||
[ -z "$SAVE_AS" ] && exit 0
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# IQN and TARGETs
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
LV_NAME=`echo $IQN|$AWK -F. '{print $(NF)}'`
|
||||
VG_NAME=`echo $IQN|$AWK -F. '{print $(NF-1)}'`
|
||||
SOURCE_DEV="/dev/$VG_NAME/$LV_NAME"
|
||||
|
||||
TARGET=`arg_path $IQN`
|
||||
TARGET_LV_NAME=`echo $NEW_IQN|$AWK -F. '{print $(NF)}'`
|
||||
TARGET_DEV="/dev/$VG_NAME/$TARGET_LV_NAME"
|
||||
TARGET_HOST="${TARGET%.$VG_NAME.$LV_NAME}"
|
||||
|
||||
CLONE_CMD=$(cat <<EOF
|
||||
set -e
|
||||
|
||||
# clone lv with dd
|
||||
$SUDO $DD if=$SOURCE_DEV of=$TARGET_DEV bs=64k
|
||||
|
||||
# remove if source_dev is not persistent
|
||||
if [ -z "$PERSISTENT" ]; then
|
||||
TID=\$($SUDO $(tgtadm_get_tid_for_iqn "$IQN"))
|
||||
|
||||
$SUDO $(tgtadm_target_delete "\$TID")
|
||||
$SUDO $SYNC
|
||||
$SUDO $LVREMOVE -f $VG_NAME/$LV_NAME
|
||||
$SUDO $(tgt_admin_dump_config "$TARGET_CONF")
|
||||
fi
|
||||
EOF
|
||||
)
|
||||
|
||||
ssh_exec_and_log "$TARGET_HOST" "$CLONE_CMD" \
|
||||
"Error cloning $DST_HOST:$TARGET_DEV or removing nonpersistent $IQN"
|
||||
|
Loading…
x
Reference in New Issue
Block a user