diff --git a/src/vmm_mad/remotes/kvm/attach_disk b/src/vmm_mad/remotes/kvm/attach_disk index 366110598d..3df84d8927 100755 --- a/src/vmm_mad/remotes/kvm/attach_disk +++ b/src/vmm_mad/remotes/kvm/attach_disk @@ -29,6 +29,8 @@ TARGET="$3" TARGET_INDEX="$4" DRV_ACTION="$5" +ATTACH_FILE="$SOURCE.attach" + XPATH="${DRIVER_PATH}/../../datastore/xpath.rb -b $DRV_ACTION" unset i j XPATH_ELEMENTS @@ -37,20 +39,26 @@ DISK_XPATH="/VMM_DRIVER_ACTION_DATA/VM/TEMPLATE/DISK[ATTACH='YES']" while IFS= read -r -d '' element; do XPATH_ELEMENTS[i++]="$element" -done < <($XPATH $DISK_XPATH/DRIVER \ +done < <($XPATH /VMM_DRIVER_ACTION_DATA/VM/ID \ + $DISK_XPATH/DRIVER \ $DISK_XPATH/TYPE \ $DISK_XPATH/READONLY \ $DISK_XPATH/CACHE \ $DISK_XPATH/SOURCE \ + $DISK_XPATH/DISK_ID \ + $DISK_XPATH/CLONE \ $DISK_XPATH/CEPH_HOST \ $DISK_XPATH/CEPH_SECRET \ $DISK_XPATH/CEPH_USER) +VMID="${XPATH_ELEMENTS[j++]}" DRIVER="${XPATH_ELEMENTS[j++]:-$DEFAULT_TYPE}" TYPE="${XPATH_ELEMENTS[j++]}" READONLY="${XPATH_ELEMENTS[j++]}" CACHE="${XPATH_ELEMENTS[j++]}" IMG_SRC="${XPATH_ELEMENTS[j++]}" +DISK_ID="${XPATH_ELEMENTS[j++]}" +CLONE="${XPATH_ELEMENTS[j++]}" CEPH_HOST="${XPATH_ELEMENTS[j++]}" CEPH_SECRET="${XPATH_ELEMENTS[j++]}" CEPH_USER="${XPATH_ELEMENTS[j++]}" @@ -72,9 +80,14 @@ rbd) TYPE_SOURCE="protocol" TYPE_XML="network" SOURCE="rbd" - SOURCE_ARGS="name='$IMG_SRC'" DEVICE="disk" + if [ "$CLONE" = "YES" ]; then + SOURCE_ARGS="name='${IMG_SRC}-${VMID}-${DISK_ID}'" + else + SOURCE_ARGS="name='${IMG_SRC}'" + fi + for host in $CEPH_HOST ; do BCK_IFS=$IFS IFS=':' @@ -120,8 +133,6 @@ else READONLY="" fi -ATTACH_FILE="$SOURCE.attach" - cat <<EOF > $ATTACH_FILE <disk type='$TYPE_XML' device='$DEVICE'> <driver name='qemu' type='$DRIVER' $CACHE/>