Revision 002f91c5 lib/cmdlib.py
b/lib/cmdlib.py | ||
---|---|---|
8678 | 8678 |
return drbd_dev |
8679 | 8679 |
|
8680 | 8680 |
|
8681 |
_DISK_TEMPLATE_NAME_PREFIX = { |
|
8682 |
constants.DT_PLAIN: "", |
|
8683 |
constants.DT_RBD: ".rbd", |
|
8684 |
} |
|
8685 |
|
|
8686 |
|
|
8687 |
_DISK_TEMPLATE_DEVICE_TYPE = { |
|
8688 |
constants.DT_PLAIN: constants.LD_LV, |
|
8689 |
constants.DT_FILE: constants.LD_FILE, |
|
8690 |
constants.DT_SHARED_FILE: constants.LD_FILE, |
|
8691 |
constants.DT_BLOCK: constants.LD_BLOCKDEV, |
|
8692 |
constants.DT_RBD: constants.LD_RBD, |
|
8693 |
} |
|
8694 |
|
|
8695 |
|
|
8681 | 8696 |
def _GenerateDiskTemplate(lu, template_name, instance_name, primary_node, |
8682 | 8697 |
secondary_nodes, disk_info, file_storage_dir, file_driver, base_index, |
8683 | 8698 |
feedback_fn, disk_params, |
... | ... | |
8692 | 8707 |
disk_count = len(disk_info) |
8693 | 8708 |
disks = [] |
8694 | 8709 |
ld_params = _ComputeLDParams(template_name, disk_params) |
8710 |
|
|
8695 | 8711 |
if template_name == constants.DT_DISKLESS: |
8696 | 8712 |
pass |
8697 |
elif template_name == constants.DT_PLAIN: |
|
8698 |
if secondary_nodes: |
|
8699 |
raise errors.ProgrammerError("Wrong template configuration") |
|
8700 |
|
|
8701 |
names = _GenerateUniqueNames(lu, [".disk%d" % (base_index + i) |
|
8702 |
for i in range(disk_count)]) |
|
8703 |
for idx, disk in enumerate(disk_info): |
|
8704 |
disk_index = idx + base_index |
|
8705 |
vg = disk.get(constants.IDISK_VG, vgname) |
|
8706 |
feedback_fn("* disk %i, vg %s, name %s" % (idx, vg, names[idx])) |
|
8707 |
disk_dev = objects.Disk(dev_type=constants.LD_LV, |
|
8708 |
size=disk[constants.IDISK_SIZE], |
|
8709 |
logical_id=(vg, names[idx]), |
|
8710 |
iv_name="disk/%d" % disk_index, |
|
8711 |
mode=disk[constants.IDISK_MODE], |
|
8712 |
params=ld_params[0]) |
|
8713 |
disks.append(disk_dev) |
|
8714 | 8713 |
elif template_name == constants.DT_DRBD8: |
8715 | 8714 |
drbd_params, data_params, meta_params = ld_params |
8716 | 8715 |
if len(secondary_nodes) != 1: |
... | ... | |
8738 | 8737 |
drbd_params, data_params, meta_params) |
8739 | 8738 |
disk_dev.mode = disk[constants.IDISK_MODE] |
8740 | 8739 |
disks.append(disk_dev) |
8741 |
elif template_name == constants.DT_FILE: |
|
8742 |
if secondary_nodes: |
|
8743 |
raise errors.ProgrammerError("Wrong template configuration") |
|
8744 |
|
|
8745 |
_req_file_storage() |
|
8746 |
|
|
8747 |
for idx, disk in enumerate(disk_info): |
|
8748 |
disk_index = idx + base_index |
|
8749 |
disk_dev = objects.Disk(dev_type=constants.LD_FILE, |
|
8750 |
size=disk[constants.IDISK_SIZE], |
|
8751 |
iv_name="disk/%d" % disk_index, |
|
8752 |
logical_id=(file_driver, |
|
8753 |
"%s/disk%d" % (file_storage_dir, |
|
8754 |
disk_index)), |
|
8755 |
mode=disk[constants.IDISK_MODE], |
|
8756 |
params=ld_params[0]) |
|
8757 |
disks.append(disk_dev) |
|
8758 |
elif template_name == constants.DT_SHARED_FILE: |
|
8759 |
if secondary_nodes: |
|
8760 |
raise errors.ProgrammerError("Wrong template configuration") |
|
8761 |
|
|
8762 |
_req_shr_file_storage() |
|
8763 |
|
|
8764 |
for idx, disk in enumerate(disk_info): |
|
8765 |
disk_index = idx + base_index |
|
8766 |
disk_dev = objects.Disk(dev_type=constants.LD_FILE, |
|
8767 |
size=disk[constants.IDISK_SIZE], |
|
8768 |
iv_name="disk/%d" % disk_index, |
|
8769 |
logical_id=(file_driver, |
|
8770 |
"%s/disk%d" % (file_storage_dir, |
|
8771 |
disk_index)), |
|
8772 |
mode=disk[constants.IDISK_MODE], |
|
8773 |
params=ld_params[0]) |
|
8774 |
disks.append(disk_dev) |
|
8775 |
elif template_name == constants.DT_BLOCK: |
|
8740 |
else: |
|
8776 | 8741 |
if secondary_nodes: |
8777 | 8742 |
raise errors.ProgrammerError("Wrong template configuration") |
8778 | 8743 |
|
8779 |
for idx, disk in enumerate(disk_info): |
|
8780 |
disk_index = idx + base_index |
|
8781 |
disk_dev = objects.Disk(dev_type=constants.LD_BLOCKDEV, |
|
8782 |
size=disk[constants.IDISK_SIZE], |
|
8783 |
logical_id=(constants.BLOCKDEV_DRIVER_MANUAL, |
|
8784 |
disk[constants.IDISK_ADOPT]), |
|
8785 |
iv_name="disk/%d" % disk_index, |
|
8786 |
mode=disk[constants.IDISK_MODE], |
|
8787 |
params=ld_params[0]) |
|
8788 |
disks.append(disk_dev) |
|
8789 |
elif template_name == constants.DT_RBD: |
|
8790 |
if secondary_nodes: |
|
8791 |
raise errors.ProgrammerError("Wrong template configuration") |
|
8744 |
if template_name == constants.DT_FILE: |
|
8745 |
_req_file_storage() |
|
8746 |
elif template_name == constants.DT_SHARED_FILE: |
|
8747 |
_req_shr_file_storage() |
|
8792 | 8748 |
|
8793 |
names = _GenerateUniqueNames(lu, [".rbd.disk%d" % (base_index + i) |
|
8794 |
for i in range(disk_count)]) |
|
8749 |
name_prefix = _DISK_TEMPLATE_NAME_PREFIX.get(template_name, None) |
|
8750 |
if name_prefix is None: |
|
8751 |
names = None |
|
8752 |
else: |
|
8753 |
names = _GenerateUniqueNames(lu, ["%s.disk%s" % |
|
8754 |
(name_prefix, base_index + i) |
|
8755 |
for i in range(disk_count)]) |
|
8756 |
|
|
8757 |
dev_type = _DISK_TEMPLATE_DEVICE_TYPE[template_name] |
|
8758 |
|
|
8759 |
if template_name == constants.DT_PLAIN: |
|
8760 |
def logical_id_fn(idx, _, disk): |
|
8761 |
vg = disk.get(constants.IDISK_VG, vgname) |
|
8762 |
return (vg, names[idx]) |
|
8763 |
elif template_name in (constants.DT_FILE, constants.DT_SHARED_FILE): |
|
8764 |
logical_id_fn = \ |
|
8765 |
lambda _, disk_index, disk: (file_driver, |
|
8766 |
"%s/disk%d" % (file_storage_dir, |
|
8767 |
disk_index)) |
|
8768 |
elif template_name == constants.DT_BLOCK: |
|
8769 |
logical_id_fn = \ |
|
8770 |
lambda idx, disk_index, disk: (constants.BLOCKDEV_DRIVER_MANUAL, |
|
8771 |
disk[constants.IDISK_ADOPT]) |
|
8772 |
elif template_name == constants.DT_RBD: |
|
8773 |
logical_id_fn = lambda idx, _, disk: ("rbd", names[idx]) |
|
8774 |
else: |
|
8775 |
raise errors.ProgrammerError("Unknown disk template '%s'" % template_name) |
|
8795 | 8776 |
|
8796 | 8777 |
for idx, disk in enumerate(disk_info): |
8797 | 8778 |
disk_index = idx + base_index |
8798 |
disk_dev = objects.Disk(dev_type=constants.LD_RBD, |
|
8799 |
size=disk[constants.IDISK_SIZE], |
|
8800 |
logical_id=("rbd", names[idx]), |
|
8801 |
iv_name="disk/%d" % disk_index, |
|
8802 |
mode=disk[constants.IDISK_MODE], |
|
8803 |
params=ld_params[0]) |
|
8804 |
disks.append(disk_dev) |
|
8779 |
size = disk[constants.IDISK_SIZE] |
|
8780 |
feedback_fn("* disk %s, size %s" % |
|
8781 |
(disk_index, utils.FormatUnit(size, "h"))) |
|
8782 |
disks.append(objects.Disk(dev_type=dev_type, size=size, |
|
8783 |
logical_id=logical_id_fn(idx, disk_index, disk), |
|
8784 |
iv_name="disk/%d" % disk_index, |
|
8785 |
mode=disk[constants.IDISK_MODE], |
|
8786 |
params=ld_params[0])) |
|
8805 | 8787 |
|
8806 |
else: |
|
8807 |
raise errors.ProgrammerError("Invalid disk template '%s'" % template_name) |
|
8808 | 8788 |
return disks |
8809 | 8789 |
|
8810 | 8790 |
|
Also available in: Unified diff