| Renuka Apte | 83f8b1a | 2012-04-02 15:45:27 -0700 | [diff] [blame] | 1 | #!/bin/bash | 
|  | 2 |  | 
|  | 3 | set -eux | 
|  | 4 |  | 
|  | 5 | action="$1" | 
|  | 6 | vm="$2" | 
|  | 7 | device="${3-0}" | 
|  | 8 | part="${4-}" | 
|  | 9 |  | 
|  | 10 | xe_min() | 
|  | 11 | { | 
|  | 12 | local cmd="$1" | 
|  | 13 | shift | 
|  | 14 | xe "$cmd" --minimal "$@" | 
|  | 15 | } | 
|  | 16 |  | 
|  | 17 | vm_uuid=$(xe_min vm-list name-label="$vm") | 
|  | 18 | vdi_uuid=$(xe_min vbd-list params=vdi-uuid vm-uuid="$vm_uuid" \ | 
|  | 19 | userdevice="$device") | 
|  | 20 |  | 
|  | 21 | dom0_uuid=$(xe_min vm-list is-control-domain=true) | 
|  | 22 |  | 
|  | 23 | open_vdi() | 
|  | 24 | { | 
|  | 25 | vbd_uuid=$(xe vbd-create vm-uuid="$dom0_uuid" vdi-uuid="$vdi_uuid" \ | 
|  | 26 | device=autodetect) | 
|  | 27 | mp=$(mktemp -d) | 
|  | 28 | xe vbd-plug uuid="$vbd_uuid" | 
|  | 29 |  | 
|  | 30 | udevsettle | 
|  | 31 | dev=$(xe_min vbd-list params=device uuid="$vbd_uuid") | 
|  | 32 | mount "/dev/$dev$part" "$mp" | 
|  | 33 | echo "Your vdi is mounted at $mp" | 
|  | 34 | } | 
|  | 35 |  | 
|  | 36 | close_vdi() | 
|  | 37 | { | 
|  | 38 | vbd_uuid=$(xe_min vbd-list vm-uuid="$dom0_uuid" vdi-uuid="$vdi_uuid") | 
|  | 39 | dev=$(xe_min vbd-list params=device uuid="$vbd_uuid") | 
|  | 40 | umount "/dev/$dev$part" | 
|  | 41 |  | 
|  | 42 | xe vbd-unplug uuid=$vbd_uuid | 
|  | 43 | xe vbd-destroy uuid=$vbd_uuid | 
|  | 44 | } | 
|  | 45 |  | 
|  | 46 | if [ "$action" == "open" ] | 
|  | 47 | then | 
|  | 48 | open_vdi | 
|  | 49 | elif [ "$action" == "close" ] | 
|  | 50 | then | 
|  | 51 | close_vdi | 
|  | 52 | fi |