Revision 525011bc lib/hypervisor/hv_xen.py
b/lib/hypervisor/hv_xen.py | ||
---|---|---|
312 | 312 |
return "'xm info' failed: %s, %s" % (result.fail_reason, result.output) |
313 | 313 |
|
314 | 314 |
@staticmethod |
315 |
def _GetConfigFileDiskData(block_devices): |
|
315 |
def _GetConfigFileDiskData(block_devices, blockdev_prefix):
|
|
316 | 316 |
"""Get disk directive for xen config file. |
317 | 317 |
|
318 | 318 |
This method builds the xen config disk directive according to the |
... | ... | |
321 | 321 |
@param block_devices: list of tuples (cfdev, rldev): |
322 | 322 |
- cfdev: dict containing ganeti config disk part |
323 | 323 |
- rldev: ganeti.bdev.BlockDev object |
324 |
@param blockdev_prefix: a string containing blockdevice prefix, |
|
325 |
e.g. "sd" for /dev/sda |
|
324 | 326 |
|
325 | 327 |
@return: string containing disk directive for xen instance config file |
326 | 328 |
|
... | ... | |
333 | 335 |
if len(block_devices) > 24: |
334 | 336 |
# 'z' - 'a' = 24 |
335 | 337 |
raise errors.HypervisorError("Too many disks") |
336 |
# FIXME: instead of this hardcoding here, each of PVM/HVM should |
|
337 |
# directly export their info (currently HVM will just sed this info) |
|
338 |
namespace = ["sd" + chr(i + ord('a')) for i in range(24)] |
|
338 |
namespace = [blockdev_prefix + chr(i + ord('a')) for i in range(24)] |
|
339 | 339 |
for sd_name, (cfdev, dev_path) in zip(namespace, block_devices): |
340 | 340 |
if cfdev.mode == constants.DISK_RDWR: |
341 | 341 |
mode = "w" |
... | ... | |
459 | 459 |
constants.HV_KERNEL_ARGS: hv_base.NO_CHECK, |
460 | 460 |
constants.HV_MIGRATION_PORT: hv_base.NET_PORT_CHECK, |
461 | 461 |
constants.HV_MIGRATION_MODE: hv_base.MIGRATION_MODE_CHECK, |
462 |
# TODO: Add a check for the blockdev prefix (matching [a-z:] or similar). |
|
463 |
constants.HV_BLOCKDEV_PREFIX: hv_base.NO_CHECK, |
|
462 | 464 |
} |
463 | 465 |
|
464 | 466 |
@classmethod |
... | ... | |
509 | 511 |
nic_str += ", bridge=%s" % nic.nicparams[constants.NIC_LINK] |
510 | 512 |
vif_data.append("'%s'" % nic_str) |
511 | 513 |
|
512 |
disk_data = cls._GetConfigFileDiskData(block_devices) |
|
514 |
disk_data = cls._GetConfigFileDiskData(block_devices, |
|
515 |
hvp[constants.HV_BLOCKDEV_PREFIX]) |
|
513 | 516 |
|
514 | 517 |
config.write("vif = [%s]\n" % ",".join(vif_data)) |
515 | 518 |
config.write("disk = [%s]\n" % ",".join(disk_data)) |
... | ... | |
639 | 642 |
vif_data.append("'%s'" % nic_str) |
640 | 643 |
|
641 | 644 |
config.write("vif = [%s]\n" % ",".join(vif_data)) |
642 |
disk_data = cls._GetConfigFileDiskData(block_devices) |
|
643 |
disk_type = hvp[constants.HV_DISK_TYPE] |
|
644 |
if disk_type in (None, constants.HT_DISK_IOEMU): |
|
645 |
replacement = ",ioemu:hd" |
|
646 |
else: |
|
647 |
replacement = ",hd" |
|
648 |
disk_data = [line.replace(",sd", replacement) for line in disk_data] |
|
645 |
|
|
646 |
disk_data = cls._GetConfigFileDiskData(block_devices, |
|
647 |
hvp[constants.HV_BLOCKDEV_PREFIX]) |
|
648 |
|
|
649 | 649 |
iso_path = hvp[constants.HV_CDROM_IMAGE_PATH] |
650 | 650 |
if iso_path: |
651 | 651 |
iso = "'file:%s,hdc:cdrom,r'" % iso_path |
Also available in: Unified diff