diff --git a/src/datastore_mad/remotes/ceph/clone b/src/datastore_mad/remotes/ceph/clone index 8107813bab..fa09222003 100755 --- a/src/datastore_mad/remotes/ceph/clone +++ b/src/datastore_mad/remotes/ceph/clone @@ -52,7 +52,8 @@ done < <($XPATH /DS_DRIVER_ACTION_DATA/DATASTORE/BASE_PATH \ /DS_DRIVER_ACTION_DATA/IMAGE/SIZE \ /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/CEPH_USER \ /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/CEPH_KEY \ - /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/CEPH_CONF) + /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/CEPH_CONF \ + /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/EC_POOL_NAME) unset i @@ -65,6 +66,7 @@ SIZE="${XPATH_ELEMENTS[i++]}" CEPH_USER="${XPATH_ELEMENTS[i++]}" CEPH_KEY="${XPATH_ELEMENTS[i++]}" CEPH_CONF="${XPATH_ELEMENTS[i++]}" +EC_POOL_NAME="${XPATH_ELEMENTS[i++]}" DST_HOST=`get_destination_host $ID` @@ -85,6 +87,10 @@ if [ -n "$CEPH_USER" ]; then RBD="$RBD --id ${CEPH_USER}" fi +if [ -n "$EC_POOL_NAME" ]; then + RBD="$RBD --data-pool ${EC_POOL_NAME}" +fi + SAFE_DIRS="" IMAGE_NAME="one-${ID}" diff --git a/src/datastore_mad/remotes/ceph/cp b/src/datastore_mad/remotes/ceph/cp index acd94d9cbd..3287a823fd 100755 --- a/src/datastore_mad/remotes/ceph/cp +++ b/src/datastore_mad/remotes/ceph/cp @@ -65,7 +65,8 @@ done < <($XPATH /DS_DRIVER_ACTION_DATA/DATASTORE/BASE_PATH \ /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/LIMIT_TRANSFER_BW \ /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/CEPH_USER \ /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/CEPH_KEY \ - /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/CEPH_CONF) + /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/CEPH_CONF \ + /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/EC_POOL_NAME) unset i @@ -85,6 +86,7 @@ LIMIT_TRANSFER_BW="${XPATH_ELEMENTS[i++]}" CEPH_USER="${XPATH_ELEMENTS[i++]}" CEPH_KEY="${XPATH_ELEMENTS[i++]}" CEPH_CONF="${XPATH_ELEMENTS[i++]}" +EC_POOL_NAME="${XPATH_ELEMENTS[i++]}" DST_HOST=`get_destination_host $ID` @@ -105,6 +107,10 @@ if [ -n "$CEPH_CONF" ]; then RBD="$RBD --conf ${CEPH_CONF}" fi +if [ -n "$EC_POOL_NAME" ]; then + RBD="$RBD --data-pool ${EC_POOL_NAME}" +fi + set_up_datastore "$BASE_PATH" "$RESTRICTED_DIRS" "$SAFE_DIRS" IMAGE_HASH=`generate_image_hash` diff --git a/src/datastore_mad/remotes/ceph/mkfs b/src/datastore_mad/remotes/ceph/mkfs index 74cf39cfcb..90a141578a 100755 --- a/src/datastore_mad/remotes/ceph/mkfs +++ b/src/datastore_mad/remotes/ceph/mkfs @@ -57,7 +57,8 @@ done < <($XPATH /DS_DRIVER_ACTION_DATA/DATASTORE/BASE_PATH \ /DS_DRIVER_ACTION_DATA/IMAGE/SIZE \ /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/CEPH_USER \ /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/CEPH_KEY \ - /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/CEPH_CONF) + /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/CEPH_CONF \ + /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/EC_POOL_NAME) unset i @@ -73,6 +74,7 @@ SIZE="${XPATH_ELEMENTS[i++]}" CEPH_USER="${XPATH_ELEMENTS[i++]}" CEPH_KEY="${XPATH_ELEMENTS[i++]}" CEPH_CONF="${XPATH_ELEMENTS[i++]}" +EC_POOL_NAME="${XPATH_ELEMENTS[i++]}" DST_HOST=`get_destination_host $ID` @@ -93,6 +95,10 @@ if [ -n "$CEPH_CONF" ]; then RBD="$RBD --conf ${CEPH_CONF}" fi +if [ -n "$EC_POOL_NAME" ]; then + RBD="$RBD --data-pool ${EC_POOL_NAME}" +fi + set_up_datastore "$BASE_PATH" "$RESTRICTED_DIRS" "$SAFE_DIRS" IMAGE_NAME="one-${ID}" diff --git a/src/tm_mad/ceph/clone b/src/tm_mad/ceph/clone index 741e903324..09304b0af1 100755 --- a/src/tm_mad/ceph/clone +++ b/src/tm_mad/ceph/clone @@ -57,6 +57,7 @@ DST_DIR=`dirname $DST_PATH` DISK_ID=$(echo $DST|awk -F. '{print $NF}') RBD_DST="${SRC_PATH}-${VM_ID}-${DISK_ID}" +DST_DS_ID=$(echo $DST | sed s#//*#/#g | awk -F/ '{print $(NF-2)}') #------------------------------------------------------------------------------- # Get Image information @@ -83,6 +84,19 @@ SIZE="${XPATH_ELEMENTS[j++]}" ORIGINAL_SIZE="${XPATH_ELEMENTS[j++]}" TYPE="${XPATH_ELEMENTS[j++]}" +#------------------------------------------------------------------------------- +# Get Datastore information +#------------------------------------------------------------------------------- + +unset i j XPATH_ELEMENTS + +while IFS= read -r -d '' element; do + XPATH_ELEMENTS[i++]="$element" +done < <(onedatastore show -x $DST_DS_ID | $XPATH \ + /DATASTORE/TEMPLATE/EC_POOL_NAME) + +EC_POOL_NAME="${XPATH_ELEMENTS[j++]}" + #------------------------------------------------------------------------------- # Clone the image and create @snap if it does not exists #------------------------------------------------------------------------------- @@ -99,6 +113,10 @@ if [ -n "$CEPH_CONF" ]; then RBD="$RBD --conf ${CEPH_CONF}" fi +if [ -n "$EC_POOL_NAME" ]; then + EC_POOL_OPT="--data-pool ${EC_POOL_NAME}" +fi + if [ "${TYPE}" = 'FILE' ]; then ssh_make_path $DST_HOST $DST_DIR @@ -131,7 +149,7 @@ else set -e -o pipefail if [ "\$(rbd_format $SRC_PATH)" = "2" ]; then - $RBD clone "$SRC_PATH@snap" $RBD_DST + $RBD ${EC_POOL_OPT} clone "$SRC_PATH@snap" $RBD_DST else $RBD copy $SRC_PATH $RBD_DST fi diff --git a/src/tm_mad/ceph/cpds b/src/tm_mad/ceph/cpds index 1042282177..6ef2169709 100755 --- a/src/tm_mad/ceph/cpds +++ b/src/tm_mad/ceph/cpds @@ -84,6 +84,19 @@ CEPH_KEY="${XPATH_ELEMENTS[j++]}" CEPH_CONF="${XPATH_ELEMENTS[j++]}" TYPE="${XPATH_ELEMENTS[j++]}" +#------------------------------------------------------------------------------- +# Get Datastore information +#------------------------------------------------------------------------------- + +unset i j XPATH_ELEMENTS + +while IFS= read -r -d '' element; do + XPATH_ELEMENTS[i++]="$element" +done < <(onedatastore show -x $DS_ID | $XPATH \ + /DATASTORE/TEMPLATE/EC_POOL_NAME) + +EC_POOL_NAME="${XPATH_ELEMENTS[j++]}" + #------------------------------------------------------------------------------- # Copy Image back to the datastore #------------------------------------------------------------------------------- @@ -110,6 +123,10 @@ if [ "$RBD_FORMAT" = "2" ]; then FORMAT_OPT="--image-format 2" fi +if [ -n "$EC_POOL_NAME" ]; then + EC_POOL_OPT="--data-pool ${EC_POOL_NAME}" +fi + if [ "${TYPE}" = 'FILE' ]; then if [ "$SNAP_ID" != "-1" ]; then error_message "$script_name: Operation not supported on disk type ${TYPE} with snapshots" @@ -146,7 +163,7 @@ else RBD_DST=\$RBD_DST@$SNAP_ID fi - $RBD copy $RBD_DST $DST + $RBD ${EC_POOL_OPT} copy $RBD_DST $DST EOF ) fi diff --git a/src/tm_mad/ceph/mkimage b/src/tm_mad/ceph/mkimage index 8d87eba7e4..673b33c431 100755 --- a/src/tm_mad/ceph/mkimage +++ b/src/tm_mad/ceph/mkimage @@ -61,7 +61,7 @@ DST_DIR=`dirname $DST_PATH` DISK_ID=$(echo $DST|awk -F. '{print $NF}') #------------------------------------------------------------------------------- -# Make the new image (file-based) +# Get Image information #------------------------------------------------------------------------------- XPATH="${DRIVER_PATH}/../../datastore/xpath.rb --stdin" @@ -70,7 +70,7 @@ unset i j XPATH_ELEMENTS while IFS= read -r -d '' element; do XPATH_ELEMENTS[i++]="$element" - done < <(onevm show -x $VMID | $XPATH \ +done < <(onevm show -x $VMID | $XPATH \ /VM/TEMPLATE/DISK[DISK_ID=$DISK_ID]/CEPH_USER \ /VM/TEMPLATE/DISK[DISK_ID=$DISK_ID]/CEPH_KEY \ /VM/TEMPLATE/DISK[DISK_ID=$DISK_ID]/CEPH_CONF \ @@ -83,6 +83,19 @@ CEPH_CONF="${XPATH_ELEMENTS[j++]}" POOL_NAME="${XPATH_ELEMENTS[j++]:-$POOL_NAME}" RBD_FORMAT="${XPATH_ELEMENTS[j++]:-$RBD_FORMAT}" +#------------------------------------------------------------------------------- +# Get Datastore information +#------------------------------------------------------------------------------- + +unset i j XPATH_ELEMENTS + +while IFS= read -r -d '' element; do + XPATH_ELEMENTS[i++]="$element" +done < <(onedatastore show -x $DSID | $XPATH \ + /DATASTORE/TEMPLATE/EC_POOL_NAME) + +EC_POOL_NAME="${XPATH_ELEMENTS[j++]}" + QEMU_OPTS='' if [ -n "$CEPH_USER" ]; then @@ -104,6 +117,10 @@ if [ "$RBD_FORMAT" = "2" ]; then FORMAT_OPT="--image-format 2" fi +if [ -n "$EC_POOL_NAME" ]; then + EC_POOL_OPT="--data-pool ${EC_POOL_NAME}" +fi + RBD_SOURCE="${POOL_NAME}/one-sys-${VMID}-${DISK_ID}" ssh_make_path $DST_HOST $DST_DIR @@ -117,7 +134,7 @@ MKIMAGE_CMD=$(cat <