diff --git a/src/datastore_mad/remotes/ceph/clone b/src/datastore_mad/remotes/ceph/clone index 112f32cd24..884d4b06b1 100755 --- a/src/datastore_mad/remotes/ceph/clone +++ b/src/datastore_mad/remotes/ceph/clone @@ -45,7 +45,7 @@ unset i XPATH_ELEMENTS while IFS= read -r -d '' element; do XPATH_ELEMENTS[i++]="$element" done < <($XPATH /DS_DRIVER_ACTION_DATA/DATASTORE/BASE_PATH \ - /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/HOST \ + /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/BRIDGE_LIST \ /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/POOL_NAME \ /DS_DRIVER_ACTION_DATA/IMAGE/PATH \ /DS_DRIVER_ACTION_DATA/IMAGE/SIZE) @@ -53,13 +53,15 @@ done < <($XPATH /DS_DRIVER_ACTION_DATA/DATASTORE/BASE_PATH \ unset i BASE_PATH="${XPATH_ELEMENTS[i++]}" -DST_HOST="${XPATH_ELEMENTS[i++]}" +BRIDGE_LIST="${XPATH_ELEMENTS[i++]}" POOL_NAME="${XPATH_ELEMENTS[i++]:-$POOL_NAME}" SRC="${XPATH_ELEMENTS[i++]}" SIZE="${XPATH_ELEMENTS[i++]}" +DST_HOST=`get_destination_host $ID` + if [ -z "$DST_HOST" ]; then - error_message "Datastore template missing 'HOST' attribute." + error_message "Datastore template missing 'BRIDGE_LIST' attribute." exit -1 fi diff --git a/src/datastore_mad/remotes/ceph/cp b/src/datastore_mad/remotes/ceph/cp index 5d81aa186a..158d1422fe 100755 --- a/src/datastore_mad/remotes/ceph/cp +++ b/src/datastore_mad/remotes/ceph/cp @@ -76,7 +76,7 @@ SHA1="${XPATH_ELEMENTS[i++]}" NO_DECOMPRESS="${XPATH_ELEMENTS[i++]}" LIMIT_TRANSFER_BW="${XPATH_ELEMENTS[i++]}" -DST_HOST=`get_destination_host $IMAGE_ID` +DST_HOST=`get_destination_host $ID` if [ -z "$DST_HOST" ]; then error_message "Datastore template missing 'BRIDGE_LIST' attribute." diff --git a/src/datastore_mad/remotes/ceph/mkfs b/src/datastore_mad/remotes/ceph/mkfs index 35762cd347..84efb3e305 100755 --- a/src/datastore_mad/remotes/ceph/mkfs +++ b/src/datastore_mad/remotes/ceph/mkfs @@ -49,7 +49,7 @@ while IFS= read -r -d '' element; do done < <($XPATH /DS_DRIVER_ACTION_DATA/DATASTORE/BASE_PATH \ /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/RESTRICTED_DIRS \ /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/SAFE_DIRS \ - /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/HOST \ + /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/BRIDGE_LIST \ /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/POOL_NAME \ /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/STAGING_DIR \ /DS_DRIVER_ACTION_DATA/IMAGE/FSTYPE \ @@ -60,14 +60,16 @@ unset i BASE_PATH="${XPATH_ELEMENTS[i++]}" RESTRICTED_DIRS="${XPATH_ELEMENTS[i++]}" SAFE_DIRS="${XPATH_ELEMENTS[i++]}" -DST_HOST="${XPATH_ELEMENTS[i++]}" +BRIDGE_LIST="${XPATH_ELEMENTS[i++]}" POOL_NAME="${XPATH_ELEMENTS[i++]:-$POOL_NAME}" STAGING_DIR="${XPATH_ELEMENTS[i++]:-$STAGING_DIR}" FSTYPE="${XPATH_ELEMENTS[i++]}" SIZE="${XPATH_ELEMENTS[i++]}" +DST_HOST=`get_destination_host $ID` + if [ -z "$DST_HOST" ]; then - error_message "Datastore template missing 'HOST' attribute." + error_message "Datastore template missing 'BRIDGE_LIST' attribute." exit -1 fi diff --git a/src/datastore_mad/remotes/ceph/monitor b/src/datastore_mad/remotes/ceph/monitor index fb988d1f60..406cc1c4ab 100755 --- a/src/datastore_mad/remotes/ceph/monitor +++ b/src/datastore_mad/remotes/ceph/monitor @@ -45,14 +45,16 @@ unset i j XPATH_ELEMENTS while IFS= read -r -d '' element; do XPATH_ELEMENTS[i++]="$element" -done < <($XPATH /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/HOST \ +done < <($XPATH /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/BRIDGE_LIST \ /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/POOL_NAME) -HOST="${XPATH_ELEMENTS[j++]}" +BRIDGE_LIST="${XPATH_ELEMENTS[j++]}" POOL_NAME="${XPATH_ELEMENTS[j++]:-$POOL_NAME}" +HOST=`get_destination_host` + if [ -z "$HOST" ]; then - error_message "Datastore template missing 'HOST' attribute." + error_message "Datastore template missing 'BRIDGE_LIST' attribute." exit -1 fi diff --git a/src/datastore_mad/remotes/ceph/rm b/src/datastore_mad/remotes/ceph/rm index f52c06868b..6d243633fb 100755 --- a/src/datastore_mad/remotes/ceph/rm +++ b/src/datastore_mad/remotes/ceph/rm @@ -40,20 +40,20 @@ ID=$2 XPATH="${DRIVER_PATH}/../xpath.rb -b $DRV_ACTION" -unset i XPATH_ELEMENTS +unset i j 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/BRIDGE_LIST) -unset i +SRC="${XPATH_ELEMENTS[j++]}" +BRIDGE_LIST="${XPATH_ELEMENTS[j++]}" -SRC="${XPATH_ELEMENTS[i++]}" -DST_HOST="${XPATH_ELEMENTS[i++]}" +DST_HOST=`get_destination_host $ID` if [ -z "$DST_HOST" ]; then - error_message "Datastore template missing 'HOST' attribute." + error_message "Datastore template missing 'BRIDGE_LIST' attribute." exit -1 fi diff --git a/src/datastore_mad/remotes/iscsi/clone b/src/datastore_mad/remotes/iscsi/clone index d1fc5b8a88..f0bbabf70b 100755 --- a/src/datastore_mad/remotes/iscsi/clone +++ b/src/datastore_mad/remotes/iscsi/clone @@ -47,7 +47,7 @@ while IFS= read -r -d '' element; do done < <($XPATH /DS_DRIVER_ACTION_DATA/DATASTORE/BASE_PATH \ /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/RESTRICTED_DIRS \ /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/SAFE_DIRS \ - /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/HOST \ + /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/BRIDGE_LIST \ /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/VG_NAME \ /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/BASE_IQN \ /DS_DRIVER_ACTION_DATA/IMAGE/PATH \ @@ -56,14 +56,16 @@ done < <($XPATH /DS_DRIVER_ACTION_DATA/DATASTORE/BASE_PATH \ BASE_PATH="${XPATH_ELEMENTS[j++]}" RESTRICTED_DIRS="${XPATH_ELEMENTS[j++]}" SAFE_DIRS="${XPATH_ELEMENTS[j++]}" -DST_HOST="${XPATH_ELEMENTS[j++]}" +BRIDGE_LIST="${XPATH_ELEMENTS[j++]}" VG_NAME="${XPATH_ELEMENTS[j++]:-$VG_NAME}" BASE_IQN="${XPATH_ELEMENTS[j++]:-$BASE_IQN}" SRC="${XPATH_ELEMENTS[j++]}" SIZE="${XPATH_ELEMENTS[j++]}" +DST_HOST=`get_destination_host $ID` + if [ -z "$DST_HOST" ]; then - error_message "Datastore template missing 'HOST' attribute." + error_message "Datastore template missing 'BRIDGE_LIST' attribute." exit -1 fi diff --git a/src/datastore_mad/remotes/iscsi/cp b/src/datastore_mad/remotes/iscsi/cp index 9f8587abc6..f7e9344738 100755 --- a/src/datastore_mad/remotes/iscsi/cp +++ b/src/datastore_mad/remotes/iscsi/cp @@ -74,7 +74,7 @@ SHA1="${XPATH_ELEMENTS[j++]}" NO_DECOMPRESS="${XPATH_ELEMENTS[j++]}" LIMIT_TRANSFER_BW="${XPATH_ELEMENTS[j++]}" -DST_HOST=`get_destination_host $IMAGE_ID` +DST_HOST=`get_destination_host $ID` if [ -z "$DST_HOST" ]; then error_message "Datastore template missing 'BRIDGE_LIST' attribute." diff --git a/src/datastore_mad/remotes/iscsi/mkfs b/src/datastore_mad/remotes/iscsi/mkfs index 3672a7df6a..a004a9b0bd 100755 --- a/src/datastore_mad/remotes/iscsi/mkfs +++ b/src/datastore_mad/remotes/iscsi/mkfs @@ -49,7 +49,7 @@ while IFS= read -r -d '' element; do done < <($XPATH /DS_DRIVER_ACTION_DATA/DATASTORE/BASE_PATH \ /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/RESTRICTED_DIRS \ /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/SAFE_DIRS \ - /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/HOST \ + /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/BRIDGE_LIST \ /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/VG_NAME \ /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/BASE_IQN \ /DS_DRIVER_ACTION_DATA/IMAGE/FSTYPE \ @@ -58,14 +58,16 @@ done < <($XPATH /DS_DRIVER_ACTION_DATA/DATASTORE/BASE_PATH \ BASE_PATH="${XPATH_ELEMENTS[j++]}" RESTRICTED_DIRS="${XPATH_ELEMENTS[j++]}" SAFE_DIRS="${XPATH_ELEMENTS[j++]}" -DST_HOST="${XPATH_ELEMENTS[j++]}" +BRIDGE_LIST="${XPATH_ELEMENTS[j++]}" VG_NAME="${XPATH_ELEMENTS[j++]:-$VG_NAME}" BASE_IQN="${XPATH_ELEMENTS[j++]:-$BASE_IQN}" FSTYPE="${XPATH_ELEMENTS[j++]}" SIZE="${XPATH_ELEMENTS[j++]:-0}" +DST_HOST=`get_destination_host $ID` + if [ -z "$DST_HOST" ]; then - error_message "Datastore template missing 'HOST' attribute." + error_message "Datastore template missing 'BRIDGE_LIST' attribute." exit -1 fi diff --git a/src/datastore_mad/remotes/iscsi/monitor b/src/datastore_mad/remotes/iscsi/monitor index 11b4d882b6..45fc9c5b60 100755 --- a/src/datastore_mad/remotes/iscsi/monitor +++ b/src/datastore_mad/remotes/iscsi/monitor @@ -45,14 +45,16 @@ unset i j XPATH_ELEMENTS while IFS= read -r -d '' element; do XPATH_ELEMENTS[i++]="$element" -done < <($XPATH /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/HOST \ +done < <($XPATH /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/BRIDGE_LIST \ /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/VG_NAME) -HOST="${XPATH_ELEMENTS[j++]}" +BRIDGE_LIST="${XPATH_ELEMENTS[j++]}" VG_NAME="${XPATH_ELEMENTS[j++]:-$VG_NAME}" +HOST=`get_destination_host` + if [ -z "$HOST" ]; then - error_message "Datastore template missing 'HOST' attribute." + error_message "Datastore template missing 'BRIDGE_LIST' attribute." exit -1 fi diff --git a/src/datastore_mad/remotes/iscsi/rm b/src/datastore_mad/remotes/iscsi/rm index a200b6bfc0..ff244fa94c 100755 --- a/src/datastore_mad/remotes/iscsi/rm +++ b/src/datastore_mad/remotes/iscsi/rm @@ -45,13 +45,15 @@ unset i j 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/BRIDGE_LIST) SRC="${XPATH_ELEMENTS[j++]}" -DST_HOST="${XPATH_ELEMENTS[j++]}" +BRIDGE_LIST="${XPATH_ELEMENTS[j++]}" + +DST_HOST=`get_destination_host $ID` if [ -z "$DST_HOST" ]; then - error_message "Datastore template missing 'HOST' attribute." + error_message "Datastore template missing 'BRIDGE_LIST' attribute." exit -1 fi diff --git a/src/datastore_mad/remotes/libfs.sh b/src/datastore_mad/remotes/libfs.sh index 5b35d2bfaf..6320b6c555 100644 --- a/src/datastore_mad/remotes/libfs.sh +++ b/src/datastore_mad/remotes/libfs.sh @@ -211,7 +211,14 @@ function check_restricted { # @return host to be used as bridge #------------------------------------------------------------------------------- function get_destination_host { - HOSTS_ARRAY=($BRIDGE_LIST) - ARRAY_INDEX=`expr $1 % ${#HOSTS_ARRAY[@]}` - echo ${HOSTS_ARRAY[$ARRAY_INDEX]} + HOSTS_ARRAY=($BRIDGE_LIST) + N_HOSTS=${#HOSTS_ARRAY[@]} + + if [ -n "$1" ]; then + ARRAY_INDEX=$(($1 % ${N_HOSTS})) + else + ARRAY_INDEX=$((RANDOM % ${N_HOSTS})) + fi + + echo ${HOSTS_ARRAY[$ARRAY_INDEX]} } diff --git a/src/datastore_mad/remotes/lvm/clone b/src/datastore_mad/remotes/lvm/clone index 7c99033e47..545b74eb6e 100755 --- a/src/datastore_mad/remotes/lvm/clone +++ b/src/datastore_mad/remotes/lvm/clone @@ -45,19 +45,21 @@ unset i j XPATH_ELEMENTS while IFS= read -r -d '' element; do XPATH_ELEMENTS[i++]="$element" done < <($XPATH /DS_DRIVER_ACTION_DATA/DATASTORE/BASE_PATH \ - /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/HOST \ + /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/BRIDGE_LIST \ /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/VG_NAME \ /DS_DRIVER_ACTION_DATA/IMAGE/PATH \ /DS_DRIVER_ACTION_DATA/IMAGE/SIZE) BASE_PATH="${XPATH_ELEMENTS[j++]}" -DST_HOST="${XPATH_ELEMENTS[j++]}" +BRIDGE_LIST="${XPATH_ELEMENTS[j++]}" VG_NAME="${XPATH_ELEMENTS[j++]:-$VG_NAME}" SRC="${XPATH_ELEMENTS[j++]}" SIZE="${XPATH_ELEMENTS[j++]}" +DST_HOST=`get_destination_host $ID` + if [ -z "$DST_HOST" ]; then - error_message "Datastore template missing 'HOST' attribute." + error_message "Datastore template missing 'BRIDGE_LIST' attribute." exit -1 fi diff --git a/src/datastore_mad/remotes/lvm/cp b/src/datastore_mad/remotes/lvm/cp index 5ed8ab9561..3e4b5ed059 100755 --- a/src/datastore_mad/remotes/lvm/cp +++ b/src/datastore_mad/remotes/lvm/cp @@ -72,7 +72,7 @@ SHA1="${XPATH_ELEMENTS[j++]}" NO_DECOMPRESS="${XPATH_ELEMENTS[j++]}" LIMIT_TRANSFER_BW="${XPATH_ELEMENTS[j++]}" -DST_HOST=`get_destination_host $IMAGE_ID` +DST_HOST=`get_destination_host $ID` if [ -z "$DST_HOST" ]; then error_message "Datastore template missing 'BRIDGE_LIST' attribute." diff --git a/src/datastore_mad/remotes/lvm/mkfs b/src/datastore_mad/remotes/lvm/mkfs index 3f28dcef97..b73db0ba2b 100755 --- a/src/datastore_mad/remotes/lvm/mkfs +++ b/src/datastore_mad/remotes/lvm/mkfs @@ -49,7 +49,7 @@ while IFS= read -r -d '' element; do done < <($XPATH /DS_DRIVER_ACTION_DATA/DATASTORE/BASE_PATH \ /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/RESTRICTED_DIRS \ /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/SAFE_DIRS \ - /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/HOST \ + /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/BRIDGE_LIST \ /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/VG_NAME \ /DS_DRIVER_ACTION_DATA/IMAGE/FSTYPE \ /DS_DRIVER_ACTION_DATA/IMAGE/SIZE) @@ -57,13 +57,15 @@ done < <($XPATH /DS_DRIVER_ACTION_DATA/DATASTORE/BASE_PATH \ BASE_PATH="${XPATH_ELEMENTS[j++]}" RESTRICTED_DIRS="${XPATH_ELEMENTS[j++]}" SAFE_DIRS="${XPATH_ELEMENTS[j++]}" -DST_HOST="${XPATH_ELEMENTS[j++]}" +BRIDGE_LIST="${XPATH_ELEMENTS[j++]}" VG_NAME="${XPATH_ELEMENTS[j++]:-$VG_NAME}" FSTYPE="${XPATH_ELEMENTS[j++]}" SIZE="${XPATH_ELEMENTS[j++]}" +DST_HOST=`get_destination_host $ID` + if [ -z "$DST_HOST" ]; then - error_message "Datastore template missing 'HOST' attribute." + error_message "Datastore template missing 'BRIDGE_LIST' attribute." exit -1 fi diff --git a/src/datastore_mad/remotes/lvm/monitor b/src/datastore_mad/remotes/lvm/monitor index f67557ae3b..f431e09690 100755 --- a/src/datastore_mad/remotes/lvm/monitor +++ b/src/datastore_mad/remotes/lvm/monitor @@ -45,14 +45,16 @@ unset i j XPATH_ELEMENTS while IFS= read -r -d '' element; do XPATH_ELEMENTS[i++]="$element" -done < <($XPATH /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/HOST \ +done < <($XPATH /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/BRIDGE_LIST \ /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/VG_NAME) -HOST="${XPATH_ELEMENTS[j++]}" +BRIDGE_LIST="${XPATH_ELEMENTS[j++]}" VG_NAME="${XPATH_ELEMENTS[j++]:-$VG_NAME}" +HOST=`get_destination_host` + if [ -z "$HOST" ]; then - error_message "Datastore template missing 'HOST' attribute." + error_message "Datastore template missing 'BRIDGE_LIST' attribute." exit -1 fi # ------------ Compute datastore usage ------------- diff --git a/src/datastore_mad/remotes/lvm/rm b/src/datastore_mad/remotes/lvm/rm index 7543df6e5d..95d3ed0798 100755 --- a/src/datastore_mad/remotes/lvm/rm +++ b/src/datastore_mad/remotes/lvm/rm @@ -45,13 +45,15 @@ unset i j 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/BRIDGE_LIST) SRC="${XPATH_ELEMENTS[j++]}" -DST_HOST="${XPATH_ELEMENTS[j++]}" +BRIDGE_LIST="${XPATH_ELEMENTS[j++]}" + +DST_HOST=`get_destination_host $ID` if [ -z "$DST_HOST" ]; then - error_message "Datastore template missing 'HOST' attribute." + error_message "Datastore template missing 'BRIDGE_LIST' attribute." exit -1 fi diff --git a/src/datastore_mad/remotes/vmfs/clone b/src/datastore_mad/remotes/vmfs/clone index 030db731b9..33ce380dbd 100755 --- a/src/datastore_mad/remotes/vmfs/clone +++ b/src/datastore_mad/remotes/vmfs/clone @@ -50,7 +50,7 @@ ID=$2 XPATH="${DRIVER_PATH}/../xpath.rb -b $DRV_ACTION" -unset i XPATH_ELEMENTS +unset i j XPATH_ELEMENTS while IFS= read -r -d '' element; do XPATH_ELEMENTS[i++]="$element" @@ -58,15 +58,13 @@ done < <($XPATH /DS_DRIVER_ACTION_DATA/DATASTORE/BASE_PATH \ /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/BRIDGE_LIST \ /DS_DRIVER_ACTION_DATA/DATASTORE/ID \ /DS_DRIVER_ACTION_DATA/IMAGE/PATH \ - /DS_DRIVER_ACTION_DATA/IMAGE/ID \ /DS_DRIVER_ACTION_DATA/IMAGE/TYPE) -BASE_PATH="${XPATH_ELEMENTS[0]}" -BRIDGE_LIST="${XPATH_ELEMENTS[1]}" -DS_ID="${XPATH_ELEMENTS[2]}" -SRC="${XPATH_ELEMENTS[3]}" -IMAGE_ID="${XPATH_ELEMENTS[4]}" -IMAGE_TYPE="${XPATH_ELEMENTS[5]}" +BASE_PATH="${XPATH_ELEMENTS[j++]}" +BRIDGE_LIST="${XPATH_ELEMENTS[j++]}" +DS_ID="${XPATH_ELEMENTS[j++]}" +SRC="${XPATH_ELEMENTS[j++]}" +IMAGE_TYPE="${XPATH_ELEMENTS[j++]}" # ------------------------------------------------------------------------------ @@ -83,7 +81,12 @@ DST=`generate_image_path` SRC_FOLDER=`basename $SRC` DST_FOLDER=`basename $DST` -DST_HOST=`get_destination_host $IMAGE_ID` +DST_HOST=`get_destination_host $ID` + +if [ -z "$DST_HOST" ]; then + error_message "Datastore template missing 'BRIDGE_LIST' attribute." + exit -1 +fi set_up_datastore "$BASE_PATH" "$RESTRICTED_DIRS" "$SAFE_DIRS" diff --git a/src/datastore_mad/remotes/vmfs/cp b/src/datastore_mad/remotes/vmfs/cp index 6bfd79ccaa..59209e1adc 100755 --- a/src/datastore_mad/remotes/vmfs/cp +++ b/src/datastore_mad/remotes/vmfs/cp @@ -47,7 +47,7 @@ UTILS_PATH="${DRIVER_PATH}/.." XPATH="$UTILS_PATH/xpath.rb -b $DRV_ACTION" -unset i XPATH_ELEMENTS +unset i j XPATH_ELEMENTS while IFS= read -r -d '' element; do XPATH_ELEMENTS[i++]="$element" @@ -60,24 +60,22 @@ done < <($XPATH /DS_DRIVER_ACTION_DATA/DATASTORE/BASE_PATH \ /DS_DRIVER_ACTION_DATA/IMAGE/PATH \ /DS_DRIVER_ACTION_DATA/IMAGE/TEMPLATE/MD5 \ /DS_DRIVER_ACTION_DATA/IMAGE/TEMPLATE/SHA1 \ - /DS_DRIVER_ACTION_DATA/IMAGE/ID \ /DS_DRIVER_ACTION_DATA/IMAGE/TYPE \ /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/NO_DECOMPRESS \ /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/LIMIT_TRANSFER_BW) -BASE_PATH="${XPATH_ELEMENTS[0]}" -DS_ID="${XPATH_ELEMENTS[1]}" -RESTRICTED_DIRS="${XPATH_ELEMENTS[2]}" -SAFE_DIRS="${XPATH_ELEMENTS[3]}" -BRIDGE_LIST="${XPATH_ELEMENTS[4]}" -TMP_DIR="${XPATH_ELEMENTS[5]:-$DS_TMP_DIR}" -SRC="${XPATH_ELEMENTS[6]}" -MD5="${XPATH_ELEMENTS[7]}" -SHA1="${XPATH_ELEMENTS[8]}" -IMAGE_ID="${XPATH_ELEMENTS[9]}" -IMAGE_TYPE="${XPATH_ELEMENTS[10]}" -NO_DECOMPRESS="${XPATH_ELEMENTS[11]}" -LIMIT_TRANSFER_BW="${XPATH_ELEMENTS[12]}" +BASE_PATH="${XPATH_ELEMENTS[j++]}" +DS_ID="${XPATH_ELEMENTS[j++]}" +RESTRICTED_DIRS="${XPATH_ELEMENTS[j++]}" +SAFE_DIRS="${XPATH_ELEMENTS[j++]}" +BRIDGE_LIST="${XPATH_ELEMENTS[j++]}" +TMP_DIR="${XPATH_ELEMENTS[j++]:-$DS_TMP_DIR}" +SRC="${XPATH_ELEMENTS[j++]}" +MD5="${XPATH_ELEMENTS[j++]}" +SHA1="${XPATH_ELEMENTS[j++]}" +IMAGE_TYPE="${XPATH_ELEMENTS[j++]}" +NO_DECOMPRESS="${XPATH_ELEMENTS[j++]}" +LIMIT_TRANSFER_BW="${XPATH_ELEMENTS[j++]}" # ------------------------------------------------------------------------------ # Set up datastore & transfer folder @@ -92,7 +90,12 @@ LIMIT_TRANSFER_BW="${XPATH_ELEMENTS[12]}" DST=`generate_image_path` DST_FOLDER=`basename $DST` -DST_HOST=`get_destination_host $IMAGE_ID` +DST_HOST=`get_destination_host $ID` + +if [ -z "$DST_HOST" ]; then + error_message "Datastore template missing 'BRIDGE_LIST' attribute." + exit -1 +fi set_up_datastore "$BASE_PATH" "$RESTRICTED_DIRS" "$SAFE_DIRS" diff --git a/src/datastore_mad/remotes/vmfs/mkfs b/src/datastore_mad/remotes/vmfs/mkfs index 5697461183..054c203d8d 100755 --- a/src/datastore_mad/remotes/vmfs/mkfs +++ b/src/datastore_mad/remotes/vmfs/mkfs @@ -45,7 +45,7 @@ ID=$2 XPATH="${DRIVER_PATH}/../xpath.rb -b $DRV_ACTION" -unset i XPATH_ELEMENTS +unset i j XPATH_ELEMENTS while IFS= read -r -d '' element; do XPATH_ELEMENTS[i++]="$element" @@ -55,17 +55,15 @@ done < <($XPATH /DS_DRIVER_ACTION_DATA/DATASTORE/BASE_PATH \ /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/BRIDGE_LIST \ /DS_DRIVER_ACTION_DATA/DATASTORE/ID \ /DS_DRIVER_ACTION_DATA/IMAGE/FSTYPE \ - /DS_DRIVER_ACTION_DATA/IMAGE/SIZE \ - /DS_DRIVER_ACTION_DATA/IMAGE/ID) + /DS_DRIVER_ACTION_DATA/IMAGE/SIZE) -BASE_PATH="${XPATH_ELEMENTS[0]}" -RESTRICTED_DIRS="${XPATH_ELEMENTS[1]}" -SAFE_DIRS="${XPATH_ELEMENTS[2]}" -BRIDGE_LIST="${XPATH_ELEMENTS[3]}" -DS_ID="${XPATH_ELEMENTS[4]}" -FSTYPE="${XPATH_ELEMENTS[5]}" -SIZE="${XPATH_ELEMENTS[6]}" -IMAGE_ID="${XPATH_ELEMENTS[7]}" +BASE_PATH="${XPATH_ELEMENTS[j++]}" +RESTRICTED_DIRS="${XPATH_ELEMENTS[j++]}" +SAFE_DIRS="${XPATH_ELEMENTS[j++]}" +BRIDGE_LIST="${XPATH_ELEMENTS[j++]}" +DS_ID="${XPATH_ELEMENTS[j++]}" +FSTYPE="${XPATH_ELEMENTS[j++]}" +SIZE="${XPATH_ELEMENTS[j++]}" # ------------------------------------------------------------------------------ # Set up datastore @@ -78,7 +76,12 @@ IMAGE_ID="${XPATH_ELEMENTS[7]}" DST=`generate_image_path` DST_FOLDER=`basename $DST` -DST_HOST=`get_destination_host $IMAGE_ID` +DST_HOST=`get_destination_host $ID` + +if [ -z "$DST_HOST" ]; then + error_message "Datastore template missing 'BRIDGE_LIST' attribute." + exit -1 +fi set_up_datastore "$BASE_PATH" "$RESTRICTED_DIRS" "$SAFE_DIRS" diff --git a/src/datastore_mad/remotes/vmfs/monitor b/src/datastore_mad/remotes/vmfs/monitor index 9b48554127..c335f3fadd 100755 --- a/src/datastore_mad/remotes/vmfs/monitor +++ b/src/datastore_mad/remotes/vmfs/monitor @@ -50,7 +50,12 @@ done < <($XPATH /DS_DRIVER_ACTION_DATA/DATASTORE/BASE_PATH \ BASE_PATH="${XPATH_ELEMENTS[0]}" BRIDGE_LIST="${XPATH_ELEMENTS[1]}" -HOST=`get_destination_host $ID` +HOST=`get_destination_host` + +if [ -z "$HOST" ]; then + error_message "Datastore template missing 'BRIDGE_LIST' attribute." + exit -1 +fi # ------------ Compute datastore usage ------------- diff --git a/src/datastore_mad/remotes/vmfs/rm b/src/datastore_mad/remotes/vmfs/rm index 2749f73bfd..c353211ab6 100755 --- a/src/datastore_mad/remotes/vmfs/rm +++ b/src/datastore_mad/remotes/vmfs/rm @@ -44,19 +44,17 @@ ID=$2 XPATH="${DRIVER_PATH}/../xpath.rb -b $DRV_ACTION" -unset i XPATH_ELEMENTS +unset i j 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/ID \ - /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/BRIDGE_LIST \ - /DS_DRIVER_ACTION_DATA/IMAGE/ID) + /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/BRIDGE_LIST) -SRC="${XPATH_ELEMENTS[0]}" -DS_ID="${XPATH_ELEMENTS[1]}" -BRIDGE_LIST="${XPATH_ELEMENTS[2]}" -IMAGE_ID="${XPATH_ELEMENTS[3]}" +SRC="${XPATH_ELEMENTS[j++]}" +DS_ID="${XPATH_ELEMENTS[j++]}" +BRIDGE_LIST="${XPATH_ELEMENTS[j++]}" # ------------------------------------------------------------------------------ # Set up datastore @@ -67,7 +65,13 @@ IMAGE_ID="${XPATH_ELEMENTS[3]}" # DST_HOST is the host to make the transfers (from BRIDGE_LIST) # ------------------------------------------------------------------------------ -DST_HOST=`get_destination_host $IMAGE_ID` +DST_HOST=`get_destination_host $ID` + +if [ -z "$DST_HOST" ]; then + error_message "Datastore template missing 'BRIDGE_LIST' attribute." + exit -1 +fi + SRC_FOLDER=`basename $SRC` # ------------------------------------------------------------------------------ diff --git a/src/tm_mad/ceph/clone b/src/tm_mad/ceph/clone index 995f541744..df419ff8ba 100755 --- a/src/tm_mad/ceph/clone +++ b/src/tm_mad/ceph/clone @@ -36,31 +36,8 @@ fi DRIVER_PATH=$(dirname $0) source $TMCOMMON -source ${DRIVER_PATH}/../../datastore/ceph/ceph.conf -#------------------------------------------------------------------------------- -# Get Image 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 < <(onedatastore show -x $DS_ID | $XPATH \ - /DATASTORE/TEMPLATE/HOST) - -unset i - -CEPH_HOST="${XPATH_ELEMENTS[i++]}" - -if [ -z "$CEPH_HOST" ]; then - error_message "Datastore template missing 'HOST' attribute." - exit -1 -fi +DST_HOST=`arg_host $DST` #------------------------------------------------------------------------------- # Compute the destination image name @@ -75,6 +52,6 @@ RBD_DST="${SRC_PATH}-${VM_ID}-${DISK_ID}" # Clone the image #------------------------------------------------------------------------------- -ssh_exec_and_log "$CEPH_HOST" "$RBD copy $SRC_PATH $RBD_DST" \ - "Error cloning $SRC_PATH to $RBD_DST in $CEPH_HOST" +ssh_exec_and_log "$DST_HOST" "$RBD copy $SRC_PATH $RBD_DST" \ + "Error cloning $SRC_PATH to $RBD_DST in $DST_HOST" exit 0