Merge branch 'hvm' of 10.141.1.101:/var/lib/qubes/git/marmarek/core into hvm

This commit is contained in:
Joanna Rutkowska 2012-03-31 19:54:11 +02:00
commit 48ee9ea5c5
2 changed files with 20 additions and 14 deletions

View File

@ -219,6 +219,9 @@ def block_list(vm = None, system_disks = False):
device_desc = xs.read('', '/local/domain/%s/qubes-block-devices/%s/desc' % (xid, device))
device_mode = xs.read('', '/local/domain/%s/qubes-block-devices/%s/mode' % (xid, device))
if device_size is None or device_desc is None or device_mode is None:
print >> sys.stderr, "Missing field in %s device parameters" % device
continue
if not device_size.isdigit():
print >> sys.stderr, "Invalid %s device size in VM '%s'" % (device, vm_name)
continue
@ -303,7 +306,7 @@ def block_attach(vm, backend_vm, device, frontend=None, mode="w", auto_detach=Fa
attached_vm = block_check_attached(backend_vm, device)
if attached_vm:
if auto_detach:
block_detach(None, attached_vm['devid'], vm_xid=attached_vm['vm_xid'])
block_detach(None, attached_vm['devid'], vm_xid=attached_vm['xid'])
else:
raise QubesException("Device %s from %s already connected to VM %s as %s" % (device, backend_vm.name, attached_vm['vm'], attached_vm['frontend']))

View File

@ -30,15 +30,16 @@ import os
def main():
usage = "usage: %prog -l [options]\n"\
"usage: %prog -a [options] <device> <vm-name>\n"\
"usage: %prog -d [options] <device>\n"\
"usage: %prog -a [options] <vm-name> <device-vm-name>:<device>\n"\
"usage: %prog -A [options] <vm-name> <file-vm-name>:<file>\n"\
"usage: %prog -d [options] <device-vm-name>:<device>\n"\
"usage: %prog -d [options] <vm-name>\n"\
"List/set VM PCI devices."
parser = OptionParser (usage)
parser.add_option ("-l", "--list", action="store_true", dest="do_list", default=False)
parser.add_option ("-A", "--attach-file", action="store", dest="file_path", default=None,
help="Attach specified file instead of physical device (syntax: qvm-block -A file backend-VM frontend-VM)")
parser.add_option ("-A", "--attach-file", action="store_true", dest="do_file_attach", default=False,
help="Attach specified file instead of physical device")
parser.add_option ("-a", "--attach", action="store_true", dest="do_attach", default=False)
parser.add_option ("-d", "--detach", action="store_true", dest="do_detach", default=False)
parser.add_option ("-f", "--frontend", dest="frontend",
@ -52,7 +53,7 @@ def main():
(options, args) = parser.parse_args ()
if options.file_path:
if options.do_file_attach:
options.do_attach = True
if options.do_list + options.do_attach + options.do_detach > 1:
@ -68,19 +69,21 @@ def main():
if options.do_attach:
if (len (args) < 2):
parser.error ("You must provide device and vm name!")
vm = qvm_collection.get_vm_by_name(args[1])
vm = qvm_collection.get_vm_by_name(args[0])
if vm is None:
parser.error ("Invalid VM name: %s" % args[1])
if options.file_path:
parser.error ("Invalid VM name: %s" % args[0])
# FIXME: here we assume that device is always in form "domain:dev", which can be changed in the future
if args[1].find(":") < 0:
parser.error ("Invalid device syntax" % args[1])
if options.do_file_attach:
dev = {}
dev['vm'] = args[0]
dev['device'] = options.file_path
(dev['vm'], dev['device']) = args[1].split(":")
dev['mode'] = 'w'
else:
dev_list = block_list()
if not args[0] in dev_list.keys():
parser.error ("Invalid device name: %s" % args[0])
dev = dev_list[args[0]]
if not args[1] in dev_list.keys():
parser.error ("Invalid device name: %s" % args[1])
dev = dev_list[args[1]]
backend_vm = qvm_collection.get_vm_by_name(dev['vm'])
assert backend_vm is not None
kwargs = {}