|  | #!/bin/bash | 
|  |  | 
|  | set -eux | 
|  |  | 
|  | action="$1" | 
|  | vm="$2" | 
|  | device="${3-0}" | 
|  | part="${4-}" | 
|  |  | 
|  | xe_min() | 
|  | { | 
|  | local cmd="$1" | 
|  | shift | 
|  | xe "$cmd" --minimal "$@" | 
|  | } | 
|  |  | 
|  | vm_uuid=$(xe_min vm-list name-label="$vm") | 
|  | vdi_uuid=$(xe_min vbd-list params=vdi-uuid vm-uuid="$vm_uuid" \ | 
|  | userdevice="$device") | 
|  |  | 
|  | dom0_uuid=$(xe_min vm-list is-control-domain=true) | 
|  |  | 
|  | open_vdi() | 
|  | { | 
|  | vbd_uuid=$(xe vbd-create vm-uuid="$dom0_uuid" vdi-uuid="$vdi_uuid" \ | 
|  | device=autodetect) | 
|  | mp=$(mktemp -d) | 
|  | xe vbd-plug uuid="$vbd_uuid" | 
|  |  | 
|  | udevsettle | 
|  | dev=$(xe_min vbd-list params=device uuid="$vbd_uuid") | 
|  | mount "/dev/$dev$part" "$mp" | 
|  | echo "Your vdi is mounted at $mp" | 
|  | } | 
|  |  | 
|  | close_vdi() | 
|  | { | 
|  | vbd_uuid=$(xe_min vbd-list vm-uuid="$dom0_uuid" vdi-uuid="$vdi_uuid") | 
|  | dev=$(xe_min vbd-list params=device uuid="$vbd_uuid") | 
|  | umount "/dev/$dev$part" | 
|  |  | 
|  | xe vbd-unplug uuid=$vbd_uuid | 
|  | xe vbd-destroy uuid=$vbd_uuid | 
|  | } | 
|  |  | 
|  | if [ "$action" == "open" ] | 
|  | then | 
|  | open_vdi | 
|  | elif [ "$action" == "close" ] | 
|  | then | 
|  | close_vdi | 
|  | fi |