This of course was working for all the rcs, but broke with 1.0 itself.
In addition:
- split between running kvm --version and parsing its output
- unittest parsing for various known --help outputs
- updated NEWS file
- happy 2012 wishes
- the hope to finish this patch before it's time to say happy easter
:)
Signed-off-by: Guido Trotter <ultrotter@google.com>
Reviewed-by: Iustin Pop <iustin@google.com>
test/data/proc_drbd83.txt \
test/data/proc_drbd83_sync.txt \
test/data/proc_drbd83_sync_krnl2.6.39.txt \
+ test/data/kvm_1.0_help.txt \
+ test/data/kvm_0.15.90_help.txt \
+ test/data/kvm_0.12.5_help.txt \
+ test/data/kvm_0.9.1_help.txt \
test/data/sys_drbd_usermode_helper.txt \
test/import-export_unittest-helper
News
====
+
+Version 2.5.0 rc5
+-----------------
+
+*(unreleased)*
+
+Improvements and bugfixes
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+- Support for kvm version 1.0, that changed the version reporting format
+ (from 3 to 2 digits).
+
+
Version 2.5.0 rc4
-----------------
_MIGRATION_INFO_MAX_BAD_ANSWERS = 5
_MIGRATION_INFO_RETRY_DELAY = 2
- _VERSION_RE = re.compile(r"\b(\d+)\.(\d+)\.(\d+)\b")
+ _VERSION_RE = re.compile(r"\b(\d+)\.(\d+)(\.(\d+))?\b")
ANCILLARY_FILES = [
_KVM_NETWORK_SCRIPT,
return result
@classmethod
+ def _ParseKVMVersion(cls, text):
+ """Parse the KVM version from the --help output.
+
+ @type text: string
+ @param text: output of kvm --help
+ @return: (version, v_maj, v_min, v_rev)
+ @raise L{errors.HypervisorError}: when the KVM version cannot be retrieved
+
+ """
+ match = cls._VERSION_RE.search(text.splitlines()[0])
+ if not match:
+ raise errors.HypervisorError("Unable to get KVM version")
+
+ v_all = match.group(0)
+ v_maj = int(match.group(1))
+ v_min = int(match.group(2))
+ if match.group(4):
+ v_rev = int(match.group(4))
+ else:
+ v_rev = 0
+ return (v_all, v_maj, v_min, v_rev)
+
+ @classmethod
def _GetKVMVersion(cls):
"""Return the installed KVM version.
result = utils.RunCmd([constants.KVM_PATH, "--help"])
if result.failed:
raise errors.HypervisorError("Unable to get KVM version")
- match = cls._VERSION_RE.search(result.output.splitlines()[0])
- if not match:
- raise errors.HypervisorError("Unable to get KVM version")
-
- return (match.group(0), int(match.group(1)), int(match.group(2)),
- int(match.group(3)))
+ return cls._ParseKVMVersion(result.output)
def StopInstance(self, instance, force=False, retry=False, name=None):
"""Stop an instance.
--- /dev/null
+QEMU PC emulator version 0.12.5 (qemu-kvm-0.12.5), Copyright (c) 2003-2008 Fabrice Bellard
+usage: qemu [options] [disk_image]
+
+'disk_image' is a raw hard image image for IDE hard disk 0
+
+Standard options:
+-h or -help display this help and exit
+-version display version information and exit
+-M machine select emulated machine (-M ? for list)
+-cpu cpu select CPU (-cpu ? for list)
+-smp n[,maxcpus=cpus][,cores=cores][,threads=threads][,sockets=sockets]
+ set the number of CPUs to 'n' [default=1]
+ maxcpus= maximum number of total cpus, including
+ offline CPUs for hotplug etc.
+ cores= number of CPU cores on one socket
+ threads= number of threads on one CPU core
+ sockets= number of discrete sockets in the system
+-numa node[,mem=size][,cpus=cpu[-cpu]][,nodeid=node]
+-fda/-fdb file use 'file' as floppy disk 0/1 image
+-hda/-hdb file use 'file' as IDE hard disk 0/1 image
+-hdc/-hdd file use 'file' as IDE hard disk 2/3 image
+-cdrom file use 'file' as IDE cdrom image (cdrom is ide1 master)
+-drive [file=file][,if=type][,bus=n][,unit=m][,media=d][,index=i]
+ [,cyls=c,heads=h,secs=s[,trans=t]][,snapshot=on|off]
+ [,cache=writethrough|writeback|none][,format=f][,serial=s]
+ [,addr=A][,id=name][,aio=threads|native]
+ [,boot=on|off]
+ use 'file' as a drive image
+-set group.id.arg=value
+ set <arg> parameter for item <id> of type <group>
+ i.e. -set drive.$id.file=/path/to/image
+-global driver.property=value
+ set a global default for a driver property
+-mtdblock file use 'file' as on-board Flash memory image
+-sd file use 'file' as SecureDigital card image
+-pflash file use 'file' as a parallel flash image
+-boot [order=drives][,once=drives][,menu=on|off]
+ 'drives': floppy (a), hard disk (c), CD-ROM (d), network (n)
+-snapshot write to temporary files instead of disk image files
+-m megs set virtual RAM size to megs MB [default=128]
+-k language use keyboard layout (for example 'fr' for French)
+-audio-help print list of audio drivers and their options
+-soundhw c1,... enable audio support
+ and only specified sound cards (comma separated list)
+ use -soundhw ? to get the list of supported cards
+ use -soundhw all to enable all of them
+-usb enable the USB driver (will be the default soon)
+-usbdevice name add the host or guest USB device 'name'
+-device driver[,options] add device
+-name string1[,process=string2] set the name of the guest
+ string1 sets the window title and string2 the process name (on Linux)
+-uuid %08x-%04x-%04x-%04x-%012x
+ specify machine UUID
+
+Display options:
+-nographic disable graphical output and redirect serial I/Os to console
+-curses use a curses/ncurses interface instead of SDL
+-no-frame open SDL window without a frame and window decorations
+-alt-grab use Ctrl-Alt-Shift to grab mouse (instead of Ctrl-Alt)
+-ctrl-grab use Right-Ctrl to grab mouse (instead of Ctrl-Alt)
+-no-quit disable SDL window close capability
+-sdl enable SDL
+-portrait rotate graphical output 90 deg left (only PXA LCD)
+-vga [std|cirrus|vmware|xenfb|none]
+ select video card type
+-full-screen start in full screen
+-vnc display start a VNC server on display
+
+i386 target only:
+-win2k-hack use it when installing Windows 2000 to avoid a disk full bug
+-no-fd-bootchk disable boot signature checking for floppy disks
+-no-acpi disable ACPI
+-no-hpet disable HPET
+-balloon none disable balloon device
+-balloon virtio[,addr=str]
+ enable virtio balloon device (default)
+-acpitable [sig=str][,rev=n][,oem_id=str][,oem_table_id=str][,oem_rev=n][,asl_compiler_id=str][,asl_compiler_rev=n][,data=file1[:file2]...]
+ ACPI table description
+-smbios file=binary
+ Load SMBIOS entry from binary file
+-smbios type=0[,vendor=str][,version=str][,date=str][,release=%d.%d]
+ Specify SMBIOS type 0 fields
+-smbios type=1[,manufacturer=str][,product=str][,version=str][,serial=str]
+ [,uuid=uuid][,sku=str][,family=str]
+ Specify SMBIOS type 1 fields
+
+Network options:
+-net nic[,vlan=n][,macaddr=mac][,model=type][,name=str][,addr=str][,vectors=v]
+ create a new Network Interface Card and connect it to VLAN 'n'
+-net user[,vlan=n][,name=str][,net=addr[/mask]][,host=addr][,restrict=y|n]
+ [,hostname=host][,dhcpstart=addr][,dns=addr][,tftp=dir][,bootfile=f]
+ [,hostfwd=rule][,guestfwd=rule][,smb=dir[,smbserver=addr]]
+ connect the user mode network stack to VLAN 'n', configure its
+ DHCP server and enabled optional services
+-net tap[,vlan=n][,name=str][,fd=h][,ifname=name][,script=file][,downscript=dfile][,sndbuf=nbytes][,vnet_hdr=on|off]
+ connect the host TAP network interface to VLAN 'n' and use the
+ network scripts 'file' (default=/etc/kvm/kvm-ifup)
+ and 'dfile' (default=/etc/kvm/kvm-ifdown);
+ use '[down]script=no' to disable script execution;
+ use 'fd=h' to connect to an already opened TAP interface
+ use 'sndbuf=nbytes' to limit the size of the send buffer; the
+ default of 'sndbuf=1048576' can be disabled using 'sndbuf=0'
+ use vnet_hdr=off to avoid enabling the IFF_VNET_HDR tap flag; use
+ vnet_hdr=on to make the lack of IFF_VNET_HDR support an error condition
+-net socket[,vlan=n][,name=str][,fd=h][,listen=[host]:port][,connect=host:port]
+ connect the vlan 'n' to another VLAN using a socket connection
+-net socket[,vlan=n][,name=str][,fd=h][,mcast=maddr:port]
+ connect the vlan 'n' to multicast maddr and port
+-net vde[,vlan=n][,name=str][,sock=socketpath][,port=n][,group=groupname][,mode=octalmode]
+ connect the vlan 'n' to port 'n' of a vde switch running
+ on host and listening for incoming connections on 'socketpath'.
+ Use group 'groupname' and mode 'octalmode' to change default
+ ownership and permissions for communication port.
+-net dump[,vlan=n][,file=f][,len=n]
+ dump traffic on vlan 'n' to file 'f' (max n bytes per packet)
+-net none use it alone to have zero network devices; if no -net option
+ is provided, the default is '-net nic -net user'
+-netdev [user|tap|vde|socket],id=str[,option][,option][,...]
+
+Character device options:
+-chardev null,id=id
+-chardev socket,id=id[,host=host],port=host[,to=to][,ipv4][,ipv6][,nodelay]
+ [,server][,nowait][,telnet] (tcp)
+-chardev socket,id=id,path=path[,server][,nowait][,telnet] (unix)
+-chardev udp,id=id[,host=host],port=port[,localaddr=localaddr]
+ [,localport=localport][,ipv4][,ipv6]
+-chardev msmouse,id=id
+-chardev vc,id=id[[,width=width][,height=height]][[,cols=cols][,rows=rows]]
+-chardev file,id=id,path=path
+-chardev pipe,id=id,path=path
+-chardev pty,id=id
+-chardev stdio,id=id,[,signal=on|off]
+-chardev braille,id=id
+-chardev tty,id=id,path=path
+-chardev parport,id=id,path=path
+
+Bluetooth(R) options:
+-bt hci,null dumb bluetooth HCI - doesn't respond to commands
+-bt hci,host[:id]
+ use host's HCI with the given name
+-bt hci[,vlan=n]
+ emulate a standard HCI in virtual scatternet 'n'
+-bt vhci[,vlan=n]
+ add host computer to virtual scatternet 'n' using VHCI
+-bt device:dev[,vlan=n]
+ emulate a bluetooth device 'dev' in scatternet 'n'
+
+Linux/Multiboot boot specific:
+-kernel bzImage use 'bzImage' as kernel image
+-append cmdline use 'cmdline' as kernel command line
+-initrd file use 'file' as initial ram disk
+
+Debug/Expert options:
+-serial dev redirect the serial port to char device 'dev'
+-parallel dev redirect the parallel port to char device 'dev'
+-monitor dev redirect the monitor to char device 'dev'
+-qmp dev like -monitor but opens in 'control' mode.
+-mon chardev=[name][,mode=readline|control][,default]
+-pidfile file write PID to 'file'
+-singlestep always run in singlestep mode
+-S freeze CPU at startup (use 'c' to start execution)
+-gdb dev wait for gdb connection on 'dev'
+-s shorthand for -gdb tcp::1234
+-d item1,... output log to /tmp/qemu.log (use -d ? for a list of log items)
+-hdachs c,h,s[,t]
+ force hard disk 0 physical geometry and the optional BIOS
+ translation (t=none or lba) (usually qemu can guess them)
+-L path set the directory for the BIOS, VGA BIOS and keymaps
+-bios file set the filename for the BIOS
+-enable-kvm enable KVM full virtualization support
+-no-reboot exit instead of rebooting
+-no-shutdown stop before shutdown
+-loadvm [tag|id]
+ start right away with a saved state (loadvm in monitor)
+-daemonize daemonize QEMU after initializing
+-option-rom rom load a file, rom, into the option ROM space
+-clock force the use of the given methods for timer alarm.
+ To see what timers are available use -clock ?
+-rtc [base=utc|localtime|date][,clock=host|vm][,driftfix=none|slew]
+ set the RTC base and clock, enable drift fix for clock ticks
+-icount [N|auto]
+ enable virtual instruction counter with 2^N clock ticks per
+ instruction
+-watchdog i6300esb|ib700
+ enable virtual hardware watchdog [default=none]
+-watchdog-action reset|shutdown|poweroff|pause|debug|none
+ action when watchdog fires [default=reset]
+-echr chr set terminal escape character instead of ctrl-a
+-virtioconsole c
+ set virtio console
+-show-cursor show cursor
+-tb-size n set TB size
+-incoming uri wait on uri for incoming migration
+-nodefaults don't create default devices.
+-chroot dir Chroot to dir just before starting the VM.
+-runas user Change to user id user just before starting the VM.
+-readconfig <file>
+-writeconfig <file>
+ read/write config file
+-no-kvm disable KVM hardware virtualization
+-no-kvm-irqchip disable KVM kernel mode PIC/IOAPIC/LAPIC
+-no-kvm-pit disable KVM kernel mode PIT
+-no-kvm-pit-reinjection disable KVM kernel mode PIT interrupt reinjection
+-pcidevice host=bus:dev.func[,dma=none][,name=string]
+ expose a PCI device to the guest OS.
+ dma=none: don't perform any dma translations (default is to use an iommu)
+ 'string' is used in log output.
+-enable-nesting enable support for running a VM inside the VM (AMD only)
+-nvram FILE provide ia64 nvram contents
+-tdf enable guest time drift compensation
+-kvm-shadow-memory MEGABYTES
+ allocate MEGABYTES for kvm mmu shadowing
+-mem-path FILE provide backing storage for guest RAM
+-mem-prealloc preallocate guest memory (use with -mempath)
+
+During emulation, the following keys are useful:
+ctrl-alt-f toggle full screen
+ctrl-alt-n switch to virtual console 'n'
+ctrl-alt toggle mouse and keyboard grab
+
+When using -nographic, press 'ctrl-a h' to get some help.
--- /dev/null
+QEMU emulator version 0.15.90, Copyright (c) 2003-2008 Fabrice Bellard
+usage: qemu [options] [disk_image]
+
+'disk_image' is a raw hard disk image for IDE hard disk 0
+
+Standard options:
+-h or -help display this help and exit
+-version display version information and exit
+-machine [type=]name[,prop[=value][,...]]
+ selects emulated machine (-machine ? for list)
+ property accel=accel1[:accel2[:...]] selects accelerator
+ supported accelerators are kvm, xen, tcg (default: tcg)
+-cpu cpu select CPU (-cpu ? for list)
+-smp n[,maxcpus=cpus][,cores=cores][,threads=threads][,sockets=sockets]
+ set the number of CPUs to 'n' [default=1]
+ maxcpus= maximum number of total cpus, including
+ offline CPUs for hotplug, etc
+ cores= number of CPU cores on one socket
+ threads= number of threads on one CPU core
+ sockets= number of discrete sockets in the system
+-numa node[,mem=size][,cpus=cpu[-cpu]][,nodeid=node]
+-fda/-fdb file use 'file' as floppy disk 0/1 image
+-hda/-hdb file use 'file' as IDE hard disk 0/1 image
+-hdc/-hdd file use 'file' as IDE hard disk 2/3 image
+-cdrom file use 'file' as IDE cdrom image (cdrom is ide1 master)
+-drive [file=file][,if=type][,bus=n][,unit=m][,media=d][,index=i]
+ [,cyls=c,heads=h,secs=s[,trans=t]][,snapshot=on|off]
+ [,cache=writethrough|writeback|none|directsync|unsafe][,format=f]
+ [,serial=s][,addr=A][,id=name][,aio=threads|native]
+ [,readonly=on|off]
+ use 'file' as a drive image
+-set group.id.arg=value
+ set <arg> parameter for item <id> of type <group>
+ i.e. -set drive.$id.file=/path/to/image
+-global driver.property=value
+ set a global default for a driver property
+-mtdblock file use 'file' as on-board Flash memory image
+-sd file use 'file' as SecureDigital card image
+-pflash file use 'file' as a parallel flash image
+-boot [order=drives][,once=drives][,menu=on|off]
+ [,splash=sp_name][,splash-time=sp_time]
+ 'drives': floppy (a), hard disk (c), CD-ROM (d), network (n)
+ 'sp_name': the file's name that would be passed to bios as logo picture, if menu=on
+ 'sp_time': the period that splash picture last if menu=on, unit is ms
+-snapshot write to temporary files instead of disk image files
+-m megs set virtual RAM size to megs MB [default=128]
+-mem-path FILE provide backing storage for guest RAM
+-mem-prealloc preallocate guest memory (use with -mem-path)
+-k language use keyboard layout (for example 'fr' for French)
+-audio-help print list of audio drivers and their options
+-soundhw c1,... enable audio support
+ and only specified sound cards (comma separated list)
+ use -soundhw ? to get the list of supported cards
+ use -soundhw all to enable all of them
+-usb enable the USB driver (will be the default soon)
+-usbdevice name add the host or guest USB device 'name'
+-device driver[,prop[=value][,...]]
+ add device (based on driver)
+ prop=value,... sets driver properties
+ use -device ? to print all possible drivers
+ use -device driver,? to print all possible properties
+
+File system options:
+-fsdev fsdriver,id=id,path=path,[security_model={mapped|passthrough|none}]
+ [,writeout=immediate][,readonly]
+
+Virtual File system pass-through options:
+-virtfs local,path=path,mount_tag=tag,security_model=[mapped|passthrough|none]
+ [,writeout=immediate][,readonly]
+-virtfs_synth Create synthetic file system image
+
+-name string1[,process=string2]
+ set the name of the guest
+ string1 sets the window title and string2 the process name (on Linux)
+-uuid %08x-%04x-%04x-%04x-%012x
+ specify machine UUID
+
+Display options:
+-display sdl[,frame=on|off][,alt_grab=on|off][,ctrl_grab=on|off]
+ [,window_close=on|off]|curses|none|
+ vnc=<display>[,<optargs>]
+ select display type
+-nographic disable graphical output and redirect serial I/Os to console
+-curses use a curses/ncurses interface instead of SDL
+-no-frame open SDL window without a frame and window decorations
+-alt-grab use Ctrl-Alt-Shift to grab mouse (instead of Ctrl-Alt)
+-ctrl-grab use Right-Ctrl to grab mouse (instead of Ctrl-Alt)
+-no-quit disable SDL window close capability
+-sdl enable SDL
+-spice <args> enable spice
+-portrait rotate graphical output 90 deg left (only PXA LCD)
+-rotate <deg> rotate graphical output some deg left (only PXA LCD)
+-vga [std|cirrus|vmware|qxl|xenfb|none]
+ select video card type
+-full-screen start in full screen
+-g WxH[xDEPTH] Set the initial graphical resolution and depth
+-vnc display start a VNC server on display
+
+i386 target only:
+-win2k-hack use it when installing Windows 2000 to avoid a disk full bug
+-no-fd-bootchk disable boot signature checking for floppy disks
+-no-acpi disable ACPI
+-no-hpet disable HPET
+-balloon none disable balloon device
+-balloon virtio[,addr=str]
+ enable virtio balloon device (default)
+-acpitable [sig=str][,rev=n][,oem_id=str][,oem_table_id=str][,oem_rev=n][,asl_compiler_id=str][,asl_compiler_rev=n][,{data|file}=file1[:file2]...]
+ ACPI table description
+-smbios file=binary
+ load SMBIOS entry from binary file
+-smbios type=0[,vendor=str][,version=str][,date=str][,release=%d.%d]
+ specify SMBIOS type 0 fields
+-smbios type=1[,manufacturer=str][,product=str][,version=str][,serial=str]
+ [,uuid=uuid][,sku=str][,family=str]
+ specify SMBIOS type 1 fields
+
+Network options:
+-net nic[,vlan=n][,macaddr=mac][,model=type][,name=str][,addr=str][,vectors=v]
+ create a new Network Interface Card and connect it to VLAN 'n'
+-net user[,vlan=n][,name=str][,net=addr[/mask]][,host=addr][,restrict=on|off]
+ [,hostname=host][,dhcpstart=addr][,dns=addr][,tftp=dir][,bootfile=f]
+ [,hostfwd=rule][,guestfwd=rule][,smb=dir[,smbserver=addr]]
+ connect the user mode network stack to VLAN 'n', configure its
+ DHCP server and enabled optional services
+-net tap[,vlan=n][,name=str][,fd=h][,ifname=name][,script=file][,downscript=dfile][,sndbuf=nbytes][,vnet_hdr=on|off][,vhost=on|off][,vhostfd=h][,vhostforce=on|off]
+ connect the host TAP network interface to VLAN 'n' and use the
+ network scripts 'file' (default=/etc/qemu-ifup)
+ and 'dfile' (default=/etc/qemu-ifdown)
+ use '[down]script=no' to disable script execution
+ use 'fd=h' to connect to an already opened TAP interface
+ use 'sndbuf=nbytes' to limit the size of the send buffer (the
+ default is disabled 'sndbuf=0' to enable flow control set 'sndbuf=1048576')
+ use vnet_hdr=off to avoid enabling the IFF_VNET_HDR tap flag
+ use vnet_hdr=on to make the lack of IFF_VNET_HDR support an error condition
+ use vhost=on to enable experimental in kernel accelerator
+ (only has effect for virtio guests which use MSIX)
+ use vhostforce=on to force vhost on for non-MSIX virtio guests
+ use 'vhostfd=h' to connect to an already opened vhost net device
+-net socket[,vlan=n][,name=str][,fd=h][,listen=[host]:port][,connect=host:port]
+ connect the vlan 'n' to another VLAN using a socket connection
+-net socket[,vlan=n][,name=str][,fd=h][,mcast=maddr:port[,localaddr=addr]]
+ connect the vlan 'n' to multicast maddr and port
+ use 'localaddr=addr' to specify the host address to send packets from
+-net vde[,vlan=n][,name=str][,sock=socketpath][,port=n][,group=groupname][,mode=octalmode]
+ connect the vlan 'n' to port 'n' of a vde switch running
+ on host and listening for incoming connections on 'socketpath'.
+ Use group 'groupname' and mode 'octalmode' to change default
+ ownership and permissions for communication port.
+-net dump[,vlan=n][,file=f][,len=n]
+ dump traffic on vlan 'n' to file 'f' (max n bytes per packet)
+-net none use it alone to have zero network devices. If no -net option
+ is provided, the default is '-net nic -net user'
+-netdev [user|tap|vde|socket],id=str[,option][,option][,...]
+
+Character device options:
+-chardev null,id=id[,mux=on|off]
+-chardev socket,id=id[,host=host],port=host[,to=to][,ipv4][,ipv6][,nodelay]
+ [,server][,nowait][,telnet][,mux=on|off] (tcp)
+-chardev socket,id=id,path=path[,server][,nowait][,telnet],[mux=on|off] (unix)
+-chardev udp,id=id[,host=host],port=port[,localaddr=localaddr]
+ [,localport=localport][,ipv4][,ipv6][,mux=on|off]
+-chardev msmouse,id=id[,mux=on|off]
+-chardev vc,id=id[[,width=width][,height=height]][[,cols=cols][,rows=rows]]
+ [,mux=on|off]
+-chardev file,id=id,path=path[,mux=on|off]
+-chardev pipe,id=id,path=path[,mux=on|off]
+-chardev pty,id=id[,mux=on|off]
+-chardev stdio,id=id[,mux=on|off][,signal=on|off]
+-chardev braille,id=id[,mux=on|off]
+-chardev tty,id=id,path=path[,mux=on|off]
+-chardev parport,id=id,path=path[,mux=on|off]
+-chardev spicevmc,id=id,name=name[,debug=debug]
+
+Bluetooth(R) options:
+-bt hci,null dumb bluetooth HCI - doesn't respond to commands
+-bt hci,host[:id]
+ use host's HCI with the given name
+-bt hci[,vlan=n]
+ emulate a standard HCI in virtual scatternet 'n'
+-bt vhci[,vlan=n]
+ add host computer to virtual scatternet 'n' using VHCI
+-bt device:dev[,vlan=n]
+ emulate a bluetooth device 'dev' in scatternet 'n'
+
+Linux/Multiboot boot specific:
+-kernel bzImage use 'bzImage' as kernel image
+-append cmdline use 'cmdline' as kernel command line
+-initrd file use 'file' as initial ram disk
+
+Debug/Expert options:
+-serial dev redirect the serial port to char device 'dev'
+-parallel dev redirect the parallel port to char device 'dev'
+-monitor dev redirect the monitor to char device 'dev'
+-qmp dev like -monitor but opens in 'control' mode
+-mon chardev=[name][,mode=readline|control][,default]
+-debugcon dev redirect the debug console to char device 'dev'
+-pidfile file write PID to 'file'
+-singlestep always run in singlestep mode
+-S freeze CPU at startup (use 'c' to start execution)
+-gdb dev wait for gdb connection on 'dev'
+-s shorthand for -gdb tcp::1234
+-d item1,... output log to /tmp/qemu.log (use -d ? for a list of log items)
+-D logfile output log to logfile (instead of the default /tmp/qemu.log)
+-hdachs c,h,s[,t]
+ force hard disk 0 physical geometry and the optional BIOS
+ translation (t=none or lba) (usually qemu can guess them)
+-L path set the directory for the BIOS, VGA BIOS and keymaps
+-bios file set the filename for the BIOS
+-enable-kvm enable KVM full virtualization support
+-xen-domid id specify xen guest domain id
+-xen-create create domain using xen hypercalls, bypassing xend
+ warning: should not be used when xend is in use
+-xen-attach attach to existing xen domain
+ xend will use this when starting qemu
+-no-reboot exit instead of rebooting
+-no-shutdown stop before shutdown
+-loadvm [tag|id]
+ start right away with a saved state (loadvm in monitor)
+-daemonize daemonize QEMU after initializing
+-option-rom rom load a file, rom, into the option ROM space
+-clock force the use of the given methods for timer alarm.
+ To see what timers are available use -clock ?
+-rtc [base=utc|localtime|date][,clock=host|vm][,driftfix=none|slew]
+ set the RTC base and clock, enable drift fix for clock ticks (x86 only)
+-icount [N|auto]
+ enable virtual instruction counter with 2^N clock ticks per
+ instruction
+-watchdog i6300esb|ib700
+ enable virtual hardware watchdog [default=none]
+-watchdog-action reset|shutdown|poweroff|pause|debug|none
+ action when watchdog fires [default=reset]
+-echr chr set terminal escape character instead of ctrl-a
+-virtioconsole c
+ set virtio console
+-show-cursor show cursor
+-tb-size n set TB size
+-incoming p prepare for incoming migration, listen on port p
+-nodefaults don't create default devices
+-chroot dir chroot to dir just before starting the VM
+-runas user change to user id user just before starting the VM
+-prom-env variable=value
+ set OpenBIOS nvram variables
+-semihosting semihosting mode
+-old-param old param mode
+-readconfig <file>
+-writeconfig <file>
+ read/write config file
+-nodefconfig
+ do not load default config files at startup
+-trace [events=<file>][,file=<file>]
+ specify tracing options
+
+During emulation, the following keys are useful:
+ctrl-alt-f toggle full screen
+ctrl-alt-n switch to virtual console 'n'
+ctrl-alt toggle mouse and keyboard grab
+
+When using -nographic, press 'ctrl-a h' to get some help.
--- /dev/null
+QEMU PC emulator version 0.9.1 (kvm-72), Copyright (c) 2003-2008 Fabrice Bellard
+usage: qemu [options] [disk_image]
+
+'disk_image' is a raw hard image image for IDE hard disk 0
+
+Standard options:
+-M machine select emulated machine (-M ? for list)
+-cpu cpu select CPU (-cpu ? for list)
+-fda/-fdb file use 'file' as floppy disk 0/1 image
+-hda/-hdb file use 'file' as IDE hard disk 0/1 image
+-hdc/-hdd file use 'file' as IDE hard disk 2/3 image
+-cdrom file use 'file' as IDE cdrom image (cdrom is ide1 master)
+-drive [file=file][,if=type][,bus=n][,unit=m][,media=d][,index=i]
+ [,cyls=c,heads=h,secs=s[,trans=t]][,snapshot=on|off]
+ [,cache=on|off][,format=f][,boot=on|off]
+ use 'file' as a drive image
+-mtdblock file use 'file' as on-board Flash memory image
+-sd file use 'file' as SecureDigital card image
+-pflash file use 'file' as a parallel flash image
+-boot [a|c|d|n] boot on floppy (a), hard disk (c), CD-ROM (d), or network (n)
+-snapshot write to temporary files instead of disk image files
+-no-frame open SDL window without a frame and window decorations
+-alt-grab use Ctrl-Alt-Shift to grab mouse (instead of Ctrl-Alt)
+-no-quit disable SDL window close capability
+-no-fd-bootchk disable boot signature checking for floppy disks
+-m megs set virtual RAM size to megs MB [default=128]
+-smp n set the number of CPUs to 'n' [default=1]
+-nographic disable graphical output and redirect serial I/Os to console
+-portrait rotate graphical output 90 deg left (only PXA LCD)
+-k language use keyboard layout (for example "fr" for French)
+-audio-help print list of audio drivers and their options
+-soundhw c1,... enable audio support
+ and only specified sound cards (comma separated list)
+ use -soundhw ? to get the list of supported cards
+ use -soundhw all to enable all of them
+-localtime set the real time clock to local time [default=utc]
+-full-screen start in full screen
+-win2k-hack use it when installing Windows 2000 to avoid a disk full bug
+-usb enable the USB driver (will be the default soon)
+-usbdevice name add the host or guest USB device 'name'
+-name string set the name of the guest
+
+Network options:
+-net nic[,vlan=n][,macaddr=addr][,model=type]
+ create a new Network Interface Card and connect it to VLAN 'n'
+-net user[,vlan=n][,hostname=host]
+ connect the user mode network stack to VLAN 'n' and send
+ hostname 'host' to DHCP clients
+-net tap[,vlan=n][,fd=h][,ifname=name][,script=file][,downscript=dfile]
+ connect the host TAP network interface to VLAN 'n' and use the
+ network scripts 'file' (default=/etc/kvm/kvm-ifup)
+ and 'dfile' (default=/etc/kvm/kvm-ifdown);
+ use '[down]script=no' to disable script execution;
+ use 'fd=h' to connect to an already opened TAP interface
+-net socket[,vlan=n][,fd=h][,listen=[host]:port][,connect=host:port]
+ connect the vlan 'n' to another VLAN using a socket connection
+-net socket[,vlan=n][,fd=h][,mcast=maddr:port]
+ connect the vlan 'n' to multicast maddr and port
+-net none use it alone to have zero network devices; if no -net option
+ is provided, the default is '-net nic -net user'
+
+-tftp dir allow tftp access to files in dir [-net user]
+-bootp file advertise file in BOOTP replies
+-smb dir allow SMB access to files in 'dir' [-net user]
+-redir [tcp|udp]:host-port:[guest-host]:guest-port
+ redirect TCP or UDP connections from host to guest [-net user]
+
+Linux boot specific:
+-kernel bzImage use 'bzImage' as kernel image
+-append cmdline use 'cmdline' as kernel command line
+-initrd file use 'file' as initial ram disk
+
+Debug/Expert options:
+-monitor dev redirect the monitor to char device 'dev'
+-serial dev redirect the serial port to char device 'dev'
+-parallel dev redirect the parallel port to char device 'dev'
+-pidfile file Write PID to 'file'
+-S freeze CPU at startup (use 'c' to start execution)
+-s wait gdb connection to port
+-p port set gdb connection port [default=1234]
+-d item1,... output log to /tmp/qemu.log (use -d ? for a list of log items)
+-hdachs c,h,s[,t] force hard disk 0 physical geometry and the optional BIOS
+ translation (t=none or lba) (usually qemu can guess them)
+-L path set the directory for the BIOS, VGA BIOS and keymaps
+-no-kvm disable KVM hardware virtualization
+-no-kvm-irqchip disable KVM kernel mode PIC/IOAPIC/LAPIC
+-no-kvm-pit disable KVM kernel mode PIT
+-std-vga simulate a standard VGA card with VESA Bochs Extensions
+ (default is CL-GD5446 PCI VGA)
+-no-acpi disable ACPI
+-curses use a curses/ncurses interface instead of SDL
+-no-reboot exit instead of rebooting
+-no-shutdown stop before shutdown
+-loadvm [tag|id] start right away with a saved state (loadvm in monitor)
+-vnc display start a VNC server on display
+-daemonize daemonize QEMU after initializing
+-tdf inject timer interrupts that got lost
+-kvm-shadow-memory megs set the amount of shadow pages to be allocated
+-mem-path set the path to hugetlbfs/tmpfs mounted directory, also enables allocation of guest memory with huge pages
+-option-rom rom load a file, rom, into the option ROM space
+-clock force the use of the given methods for timer alarm.
+ To see what timers are available use -clock ?
+-startdate select initial date of the clock
+-icount [N|auto]
+ Enable virtual instruction counter with 2^N clock ticks per instruction
+
+During emulation, the following keys are useful:
+ctrl-alt-f toggle full screen
+ctrl-alt-n switch to virtual console 'n'
+ctrl-alt toggle mouse and keyboard grab
+
+When using -nographic, press 'ctrl-a h' to get some help.
--- /dev/null
+QEMU emulator version 1.0 (qemu-kvm-1.0 Debian 1.0+dfsg-2), Copyright (c) 2003-2008 Fabrice Bellard
+usage: qemu [options] [disk_image]
+
+'disk_image' is a raw hard disk image for IDE hard disk 0
+
+Standard options:
+-h or -help display this help and exit
+-version display version information and exit
+-machine [type=]name[,prop[=value][,...]]
+ selects emulated machine (-machine ? for list)
+ property accel=accel1[:accel2[:...]] selects accelerator
+ supported accelerators are kvm, xen, tcg (default: tcg)
+-cpu cpu select CPU (-cpu ? for list)
+-smp n[,maxcpus=cpus][,cores=cores][,threads=threads][,sockets=sockets]
+ set the number of CPUs to 'n' [default=1]
+ maxcpus= maximum number of total cpus, including
+ offline CPUs for hotplug, etc
+ cores= number of CPU cores on one socket
+ threads= number of threads on one CPU core
+ sockets= number of discrete sockets in the system
+-numa node[,mem=size][,cpus=cpu[-cpu]][,nodeid=node]
+-fda/-fdb file use 'file' as floppy disk 0/1 image
+-hda/-hdb file use 'file' as IDE hard disk 0/1 image
+-hdc/-hdd file use 'file' as IDE hard disk 2/3 image
+-cdrom file use 'file' as IDE cdrom image (cdrom is ide1 master)
+-drive [file=file][,if=type][,bus=n][,unit=m][,media=d][,index=i]
+ [,cyls=c,heads=h,secs=s[,trans=t]][,snapshot=on|off]
+ [,cache=writethrough|writeback|none|directsync|unsafe][,format=f]
+ [,serial=s][,addr=A][,id=name][,aio=threads|native]
+ [,readonly=on|off]
+ use 'file' as a drive image
+-set group.id.arg=value
+ set <arg> parameter for item <id> of type <group>
+ i.e. -set drive.$id.file=/path/to/image
+-global driver.property=value
+ set a global default for a driver property
+-mtdblock file use 'file' as on-board Flash memory image
+-sd file use 'file' as SecureDigital card image
+-pflash file use 'file' as a parallel flash image
+-boot [order=drives][,once=drives][,menu=on|off]
+ [,splash=sp_name][,splash-time=sp_time]
+ 'drives': floppy (a), hard disk (c), CD-ROM (d), network (n)
+ 'sp_name': the file's name that would be passed to bios as logo picture, if menu=on
+ 'sp_time': the period that splash picture last if menu=on, unit is ms
+-snapshot write to temporary files instead of disk image files
+-m megs set virtual RAM size to megs MB [default=128]
+-mem-path FILE provide backing storage for guest RAM
+-mem-prealloc preallocate guest memory (use with -mem-path)
+-k language use keyboard layout (for example 'fr' for French)
+-audio-help print list of audio drivers and their options
+-soundhw c1,... enable audio support
+ and only specified sound cards (comma separated list)
+ use -soundhw ? to get the list of supported cards
+ use -soundhw all to enable all of them
+-usb enable the USB driver (will be the default soon)
+-usbdevice name add the host or guest USB device 'name'
+-device driver[,prop[=value][,...]]
+ add device (based on driver)
+ prop=value,... sets driver properties
+ use -device ? to print all possible drivers
+ use -device driver,? to print all possible properties
+
+File system options:
+-fsdev fsdriver,id=id,path=path,[security_model={mapped|passthrough|none}]
+ [,writeout=immediate][,readonly]
+
+Virtual File system pass-through options:
+-virtfs local,path=path,mount_tag=tag,security_model=[mapped|passthrough|none]
+ [,writeout=immediate][,readonly]
+-virtfs_synth Create synthetic file system image
+
+-name string1[,process=string2]
+ set the name of the guest
+ string1 sets the window title and string2 the process name (on Linux)
+-uuid %08x-%04x-%04x-%04x-%012x
+ specify machine UUID
+
+Display options:
+-display sdl[,frame=on|off][,alt_grab=on|off][,ctrl_grab=on|off]
+ [,window_close=on|off]|curses|none|
+ vnc=<display>[,<optargs>]
+ select display type
+-nographic disable graphical output and redirect serial I/Os to console
+-curses use a curses/ncurses interface instead of SDL
+-no-frame open SDL window without a frame and window decorations
+-alt-grab use Ctrl-Alt-Shift to grab mouse (instead of Ctrl-Alt)
+-ctrl-grab use Right-Ctrl to grab mouse (instead of Ctrl-Alt)
+-no-quit disable SDL window close capability
+-sdl enable SDL
+-spice <args> enable spice
+-portrait rotate graphical output 90 deg left (only PXA LCD)
+-rotate <deg> rotate graphical output some deg left (only PXA LCD)
+-vga [std|cirrus|vmware|qxl|xenfb|none]
+ select video card type
+-full-screen start in full screen
+-g WxH[xDEPTH] Set the initial graphical resolution and depth
+-vnc display start a VNC server on display
+
+i386 target only:
+-win2k-hack use it when installing Windows 2000 to avoid a disk full bug
+-no-fd-bootchk disable boot signature checking for floppy disks
+-no-acpi disable ACPI
+-no-hpet disable HPET
+-balloon none disable balloon device
+-balloon virtio[,addr=str]
+ enable virtio balloon device (default)
+-acpitable [sig=str][,rev=n][,oem_id=str][,oem_table_id=str][,oem_rev=n][,asl_compiler_id=str][,asl_compiler_rev=n][,{data|file}=file1[:file2]...]
+ ACPI table description
+-smbios file=binary
+ load SMBIOS entry from binary file
+-smbios type=0[,vendor=str][,version=str][,date=str][,release=%d.%d]
+ specify SMBIOS type 0 fields
+-smbios type=1[,manufacturer=str][,product=str][,version=str][,serial=str]
+ [,uuid=uuid][,sku=str][,family=str]
+ specify SMBIOS type 1 fields
+
+Network options:
+-net nic[,vlan=n][,macaddr=mac][,model=type][,name=str][,addr=str][,vectors=v]
+ create a new Network Interface Card and connect it to VLAN 'n'
+-net user[,vlan=n][,name=str][,net=addr[/mask]][,host=addr][,restrict=on|off]
+ [,hostname=host][,dhcpstart=addr][,dns=addr][,tftp=dir][,bootfile=f]
+ [,hostfwd=rule][,guestfwd=rule][,smb=dir[,smbserver=addr]]
+ connect the user mode network stack to VLAN 'n', configure its
+ DHCP server and enabled optional services
+-net tap[,vlan=n][,name=str][,fd=h][,ifname=name][,script=file][,downscript=dfile][,sndbuf=nbytes][,vnet_hdr=on|off][,vhost=on|off][,vhostfd=h][,vhostforce=on|off]
+ connect the host TAP network interface to VLAN 'n' and use the
+ network scripts 'file' (default=/etc/kvm/kvm-ifup)
+ and 'dfile' (default=/etc/kvm/kvm-ifdown)
+ use '[down]script=no' to disable script execution
+ use 'fd=h' to connect to an already opened TAP interface
+ use 'sndbuf=nbytes' to limit the size of the send buffer (the
+ default is disabled 'sndbuf=0' to enable flow control set 'sndbuf=1048576')
+ use vnet_hdr=off to avoid enabling the IFF_VNET_HDR tap flag
+ use vnet_hdr=on to make the lack of IFF_VNET_HDR support an error condition
+ use vhost=on to enable experimental in kernel accelerator
+ (only has effect for virtio guests which use MSIX)
+ use vhostforce=on to force vhost on for non-MSIX virtio guests
+ use 'vhostfd=h' to connect to an already opened vhost net device
+-net socket[,vlan=n][,name=str][,fd=h][,listen=[host]:port][,connect=host:port]
+ connect the vlan 'n' to another VLAN using a socket connection
+-net socket[,vlan=n][,name=str][,fd=h][,mcast=maddr:port[,localaddr=addr]]
+ connect the vlan 'n' to multicast maddr and port
+ use 'localaddr=addr' to specify the host address to send packets from
+-net vde[,vlan=n][,name=str][,sock=socketpath][,port=n][,group=groupname][,mode=octalmode]
+ connect the vlan 'n' to port 'n' of a vde switch running
+ on host and listening for incoming connections on 'socketpath'.
+ Use group 'groupname' and mode 'octalmode' to change default
+ ownership and permissions for communication port.
+-net dump[,vlan=n][,file=f][,len=n]
+ dump traffic on vlan 'n' to file 'f' (max n bytes per packet)
+-net none use it alone to have zero network devices. If no -net option
+ is provided, the default is '-net nic -net user'
+-netdev [user|tap|vde|socket],id=str[,option][,option][,...]
+
+Character device options:
+-chardev null,id=id[,mux=on|off]
+-chardev socket,id=id[,host=host],port=host[,to=to][,ipv4][,ipv6][,nodelay]
+ [,server][,nowait][,telnet][,mux=on|off] (tcp)
+-chardev socket,id=id,path=path[,server][,nowait][,telnet],[mux=on|off] (unix)
+-chardev udp,id=id[,host=host],port=port[,localaddr=localaddr]
+ [,localport=localport][,ipv4][,ipv6][,mux=on|off]
+-chardev msmouse,id=id[,mux=on|off]
+-chardev vc,id=id[[,width=width][,height=height]][[,cols=cols][,rows=rows]]
+ [,mux=on|off]
+-chardev file,id=id,path=path[,mux=on|off]
+-chardev pipe,id=id,path=path[,mux=on|off]
+-chardev pty,id=id[,mux=on|off]
+-chardev stdio,id=id[,mux=on|off][,signal=on|off]
+-chardev braille,id=id[,mux=on|off]
+-chardev tty,id=id,path=path[,mux=on|off]
+-chardev parport,id=id,path=path[,mux=on|off]
+-chardev spicevmc,id=id,name=name[,debug=debug]
+
+Bluetooth(R) options:
+-bt hci,null dumb bluetooth HCI - doesn't respond to commands
+-bt hci,host[:id]
+ use host's HCI with the given name
+-bt hci[,vlan=n]
+ emulate a standard HCI in virtual scatternet 'n'
+-bt vhci[,vlan=n]
+ add host computer to virtual scatternet 'n' using VHCI
+-bt device:dev[,vlan=n]
+ emulate a bluetooth device 'dev' in scatternet 'n'
+
+Linux/Multiboot boot specific:
+-kernel bzImage use 'bzImage' as kernel image
+-append cmdline use 'cmdline' as kernel command line
+-initrd file use 'file' as initial ram disk
+
+Debug/Expert options:
+-serial dev redirect the serial port to char device 'dev'
+-parallel dev redirect the parallel port to char device 'dev'
+-monitor dev redirect the monitor to char device 'dev'
+-qmp dev like -monitor but opens in 'control' mode
+-mon chardev=[name][,mode=readline|control][,default]
+-debugcon dev redirect the debug console to char device 'dev'
+-pidfile file write PID to 'file'
+-singlestep always run in singlestep mode
+-S freeze CPU at startup (use 'c' to start execution)
+-gdb dev wait for gdb connection on 'dev'
+-s shorthand for -gdb tcp::1234
+-d item1,... output log to /tmp/qemu.log (use -d ? for a list of log items)
+-D logfile output log to logfile (instead of the default /tmp/qemu.log)
+-hdachs c,h,s[,t]
+ force hard disk 0 physical geometry and the optional BIOS
+ translation (t=none or lba) (usually qemu can guess them)
+-L path set the directory for the BIOS, VGA BIOS and keymaps
+-bios file set the filename for the BIOS
+-enable-kvm enable KVM full virtualization support
+-xen-domid id specify xen guest domain id
+-xen-create create domain using xen hypercalls, bypassing xend
+ warning: should not be used when xend is in use
+-xen-attach attach to existing xen domain
+ xend will use this when starting qemu
+-no-reboot exit instead of rebooting
+-no-shutdown stop before shutdown
+-loadvm [tag|id]
+ start right away with a saved state (loadvm in monitor)
+-daemonize daemonize QEMU after initializing
+-option-rom rom load a file, rom, into the option ROM space
+-clock force the use of the given methods for timer alarm.
+ To see what timers are available use -clock ?
+-rtc [base=utc|localtime|date][,clock=host|vm][,driftfix=none|slew]
+ set the RTC base and clock, enable drift fix for clock ticks (x86 only)
+-icount [N|auto]
+ enable virtual instruction counter with 2^N clock ticks per
+ instruction
+-watchdog i6300esb|ib700
+ enable virtual hardware watchdog [default=none]
+-watchdog-action reset|shutdown|poweroff|pause|debug|none
+ action when watchdog fires [default=reset]
+-echr chr set terminal escape character instead of ctrl-a
+-virtioconsole c
+ set virtio console
+-show-cursor show cursor
+-tb-size n set TB size
+-incoming p prepare for incoming migration, listen on port p
+-nodefaults don't create default devices
+-chroot dir chroot to dir just before starting the VM
+-runas user change to user id user just before starting the VM
+-prom-env variable=value
+ set OpenBIOS nvram variables
+-semihosting semihosting mode
+-old-param old param mode
+-readconfig <file>
+-writeconfig <file>
+ read/write config file
+-nodefconfig
+ do not load default config files at startup
+-trace [events=<file>][,file=<file>]
+ specify tracing options
+-no-kvm disable KVM hardware virtualization
+-no-kvm-irqchip disable KVM kernel mode PIC/IOAPIC/LAPIC
+-no-kvm-pit disable KVM kernel mode PIT
+-no-kvm-pit-reinjection
+ disable KVM kernel mode PIT interrupt reinjection
+-tdf enable guest time drift compensation
+-kvm-shadow-memory MEGABYTES
+ allocate MEGABYTES for kvm mmu shadowing
+
+During emulation, the following keys are useful:
+ctrl-alt-f toggle full screen
+ctrl-alt-n switch to virtual console 'n'
+ctrl-alt toggle mouse and keyboard grab
+
+When using -nographic, press 'ctrl-a h' to get some help.
from ganeti import compat
from ganeti import objects
from ganeti import errors
+from ganeti import utils
from ganeti.hypervisor import hv_kvm
self.assertEqual(cons.kind, constants.CONS_MESSAGE)
+class TestVersionChecking(testutils.GanetiTestCase):
+ def testParseVersion(self):
+ parse = hv_kvm.KVMHypervisor._ParseKVMVersion
+ help_10 = utils.ReadFile(self._TestDataFilename("kvm_1.0_help.txt"))
+ help_01590 = utils.ReadFile(self._TestDataFilename("kvm_0.15.90_help.txt"))
+ help_0125 = utils.ReadFile(self._TestDataFilename("kvm_0.12.5_help.txt"))
+ help_091 = utils.ReadFile(self._TestDataFilename("kvm_0.9.1_help.txt"))
+ self.assertEqual(parse(help_10), ("1.0", 1, 0, 0))
+ self.assertEqual(parse(help_01590), ("0.15.90", 0, 15, 90))
+ self.assertEqual(parse(help_0125), ("0.12.5", 0, 12, 5))
+ self.assertEqual(parse(help_091), ("0.9.1", 0, 9, 1))
+
+
if __name__ == "__main__":
testutils.GanetiTestProgram()