# HV parameter names (global namespace)
HV_BOOT_ORDER = "boot_order"
HV_CDROM_IMAGE_PATH = "cdrom_image_path"
+HV_KVM_CDROM2_IMAGE_PATH = "cdrom2_image_path"
+HV_KVM_FLOPPY_IMAGE_PATH = "floppy_image_path"
HV_NIC_TYPE = "nic_type"
HV_DISK_TYPE = "disk_type"
+HV_KVM_CDROM_DISK_TYPE = "cdrom_disk_type"
HV_VNC_BIND_ADDRESS = "vnc_bind_address"
HV_VNC_PASSWORD_FILE = "vnc_password_file"
HV_VNC_TLS = "vnc_tls"
HVS_PARAMETER_TYPES = {
HV_BOOT_ORDER: VTYPE_STRING,
+ HV_KVM_FLOPPY_IMAGE_PATH: VTYPE_STRING,
HV_CDROM_IMAGE_PATH: VTYPE_STRING,
+ HV_KVM_CDROM2_IMAGE_PATH: VTYPE_STRING,
HV_NIC_TYPE: VTYPE_STRING,
HV_DISK_TYPE: VTYPE_STRING,
+ HV_KVM_CDROM_DISK_TYPE: VTYPE_STRING,
HV_VNC_PASSWORD_FILE: VTYPE_STRING,
HV_VNC_BIND_ADDRESS: VTYPE_STRING,
HV_VNC_TLS: VTYPE_BOOL,
HT_KVM_VALID_MOUSE_TYPES = frozenset([HT_MOUSE_MOUSE, HT_MOUSE_TABLET])
# Boot order
+HT_BO_FLOPPY = "floppy"
HT_BO_CDROM = "cdrom"
HT_BO_DISK = "disk"
HT_BO_NETWORK = "network"
-HT_KVM_VALID_BO_TYPES = frozenset([HT_BO_CDROM, HT_BO_DISK, HT_BO_NETWORK])
+HT_KVM_VALID_BO_TYPES = frozenset([HT_BO_FLOPPY, HT_BO_CDROM,
+ HT_BO_DISK, HT_BO_NETWORK])
# Security models
HT_SM_NONE = "none"
HV_VNC_X509: '',
HV_VNC_X509_VERIFY: False,
HV_VNC_PASSWORD_FILE: '',
+ HV_KVM_FLOPPY_IMAGE_PATH: '',
HV_CDROM_IMAGE_PATH: '',
+ HV_KVM_CDROM2_IMAGE_PATH: '',
HV_BOOT_ORDER: HT_BO_DISK,
HV_NIC_TYPE: HT_NIC_PARAVIRTUAL,
HV_DISK_TYPE: HT_DISK_PARAVIRTUAL,
+ HV_KVM_CDROM_DISK_TYPE: '',
HV_USB_MOUSE: '',
HV_MIGRATION_PORT: 8102,
HV_MIGRATION_BANDWIDTH: 32, # MiB/s
constants.HV_VNC_X509: hv_base.OPT_DIR_CHECK,
constants.HV_VNC_X509_VERIFY: hv_base.NO_CHECK,
constants.HV_VNC_PASSWORD_FILE: hv_base.OPT_FILE_CHECK,
+ constants.HV_KVM_FLOPPY_IMAGE_PATH: hv_base.OPT_FILE_CHECK,
constants.HV_CDROM_IMAGE_PATH: hv_base.OPT_FILE_CHECK,
+ constants.HV_KVM_CDROM2_IMAGE_PATH: hv_base.OPT_FILE_CHECK,
constants.HV_BOOT_ORDER:
hv_base.ParamInSet(True, constants.HT_KVM_VALID_BO_TYPES),
constants.HV_NIC_TYPE:
hv_base.ParamInSet(True, constants.HT_KVM_VALID_NIC_TYPES),
constants.HV_DISK_TYPE:
hv_base.ParamInSet(True, constants.HT_KVM_VALID_DISK_TYPES),
+ constants.HV_KVM_CDROM_DISK_TYPE:
+ hv_base.ParamInSet(False, constants.HT_KVM_VALID_DISK_TYPES),
constants.HV_USB_MOUSE:
hv_base.ParamInSet(False, constants.HT_KVM_VALID_MOUSE_TYPES),
constants.HV_MIGRATION_PORT: hv_base.NET_PORT_CHECK,
hvp = instance.hvparams
boot_disk = hvp[constants.HV_BOOT_ORDER] == constants.HT_BO_DISK
boot_cdrom = hvp[constants.HV_BOOT_ORDER] == constants.HT_BO_CDROM
+ boot_floppy = hvp[constants.HV_BOOT_ORDER] == constants.HT_BO_FLOPPY
boot_network = hvp[constants.HV_BOOT_ORDER] == constants.HT_BO_NETWORK
if hvp[constants.HV_KVM_FLAG] == constants.HT_KVM_ENABLED:
cache_val)
kvm_cmd.extend(['-drive', drive_val])
+ #Now we can specify a different device type for CDROM devices.
+ cdrom_disk_type = hvp[constants.HV_KVM_CDROM_DISK_TYPE]
+ if not cdrom_disk_type:
+ cdrom_disk_type = disk_type
+
iso_image = hvp[constants.HV_CDROM_IMAGE_PATH]
if iso_image:
options = ',format=raw,media=cdrom'
if boot_cdrom:
kvm_cmd.extend(['-boot', 'd'])
- if disk_type != constants.HT_DISK_IDE:
+ if cdrom_disk_type != constants.HT_DISK_IDE:
+ options = '%s,boot=on,if=%s' % (options, constants.HT_DISK_IDE)
+ else:
options = '%s,boot=on' % options
else:
- if disk_type == constants.HT_DISK_PARAVIRTUAL:
+ if cdrom_disk_type == constants.HT_DISK_PARAVIRTUAL:
if_val = ',if=virtio'
else:
- if_val = ',if=%s' % disk_type
+ if_val = ',if=%s' % cdrom_disk_type
options = '%s%s' % (options, if_val)
drive_val = 'file=%s%s' % (iso_image, options)
kvm_cmd.extend(['-drive', drive_val])
+ iso_image2 = hvp[constants.HV_KVM_CDROM2_IMAGE_PATH]
+ if iso_image2:
+ options = ',format=raw,media=cdrom'
+ if cdrom_disk_type == constants.HT_DISK_PARAVIRTUAL:
+ if_val = ',if=virtio'
+ else:
+ if_val = ',if=%s' % cdrom_disk_type
+ options = '%s%s' % (options, if_val)
+ drive_val = 'file=%s%s' % (iso_image2, options)
+ kvm_cmd.extend(['-drive', drive_val])
+
+ floppy_image = hvp[constants.HV_KVM_FLOPPY_IMAGE_PATH]
+ if floppy_image:
+ options = ',format=raw,media=disk'
+ if boot_floppy:
+ kvm_cmd.extend(['-boot', 'a'])
+ options = '%s,boot=on' % options
+ if_val = ',if=floppy'
+ options = '%s%s' % (options, if_val)
+ drive_val = 'file=%s%s' % (floppy_image, options)
+ kvm_cmd.extend(['-drive', drive_val])
+
kernel_path = hvp[constants.HV_KERNEL_PATH]
if kernel_path:
kvm_cmd.extend(['-kernel', kernel_path])