121 |
121 |
|
122 |
122 |
if disks:
|
123 |
123 |
disk_count = len(disks)
|
124 |
|
for idx, (name, uuid, size, mode) in enumerate(disks):
|
|
124 |
for idx, (name, uuid, size, mode, info) in enumerate(disks):
|
125 |
125 |
if name:
|
126 |
126 |
env["INSTANCE_DISK%d_NAME" % idx] = name
|
127 |
127 |
env["INSTANCE_DISK%d_UUID" % idx] = uuid
|
128 |
128 |
env["INSTANCE_DISK%d_SIZE" % idx] = size
|
129 |
129 |
env["INSTANCE_DISK%d_MODE" % idx] = mode
|
|
130 |
env.update(info)
|
130 |
131 |
else:
|
131 |
132 |
disk_count = 0
|
132 |
133 |
|
... | ... | |
173 |
174 |
"vcpus": bep[constants.BE_VCPUS],
|
174 |
175 |
"nics": NICListToTuple(lu, instance.nics),
|
175 |
176 |
"disk_template": instance.disk_template,
|
176 |
|
"disks": [(disk.name, disk.uuid, disk.size, disk.mode)
|
177 |
|
for disk in instance.disks],
|
|
177 |
"disks": [(disk.name, disk.uuid, disk.size, disk.mode,
|
|
178 |
BuildDiskLogicalIDEnv(instance.disk_template, idx, disk))
|
|
179 |
for idx, disk in enumerate(instance.disks)],
|
178 |
180 |
"bep": bep,
|
179 |
181 |
"hvp": hvp,
|
180 |
182 |
"hypervisor_name": instance.hypervisor,
|
... | ... | |
559 |
561 |
|
560 |
562 |
if variant not in os_obj.supported_variants:
|
561 |
563 |
raise errors.OpPrereqError("Unsupported OS variant", errors.ECODE_INVAL)
|
|
564 |
|
|
565 |
|
|
566 |
def BuildDiskLogicalIDEnv(template_name, idx, disk):
|
|
567 |
if template_name == constants.DT_PLAIN:
|
|
568 |
vg, name = disk.logical_id
|
|
569 |
ret = {
|
|
570 |
"INSTANCE_DISK%d_VG" % idx : vg,
|
|
571 |
"INSTANCE_DISK%d_ID" % idx : name
|
|
572 |
}
|
|
573 |
elif template_name in (constants.DT_FILE, constants.DT_SHARED_FILE):
|
|
574 |
file_driver, name = disk.logical_id
|
|
575 |
ret = {
|
|
576 |
"INSTANCE_DISK%d_DRIVER" % idx : file_driver,
|
|
577 |
"INSTANCE_DISK%d_ID" % idx : name
|
|
578 |
}
|
|
579 |
elif template_name == constants.DT_BLOCK:
|
|
580 |
block_driver, adopt = disk.logical_id
|
|
581 |
ret = {
|
|
582 |
"INSTANCE_DISK%d_DRIVER" % idx : block_driver,
|
|
583 |
"INSTANCE_DISK%d_ID" % idx : adopt
|
|
584 |
}
|
|
585 |
elif template_name == constants.DT_RBD:
|
|
586 |
rbd, name = disk.logical_id
|
|
587 |
ret = {
|
|
588 |
"INSTANCE_DISK%d_DRIVER" % idx : rbd,
|
|
589 |
"INSTANCE_DISK%d_ID" % idx : name
|
|
590 |
}
|
|
591 |
elif template_name == constants.DT_EXT:
|
|
592 |
provider, name = disk.logical_id
|
|
593 |
ret = {
|
|
594 |
"INSTANCE_DISK%d_PROVIDER" % idx : provider,
|
|
595 |
"INSTANCE_DISK%d_ID" % idx : name
|
|
596 |
}
|
|
597 |
elif template_name == constants.DT_DRBD8:
|
|
598 |
pnode, snode, port, pmin, smin, _ = disk.logical_id
|
|
599 |
data, meta = disk.children
|
|
600 |
data_vg, data_name = data.logical_id
|
|
601 |
meta_vg, meta_name = meta.logical_id
|
|
602 |
ret = {
|
|
603 |
"INSTANCE_DISK%d_PNODE" % idx : pnode,
|
|
604 |
"INSTANCE_DISK%d_SNODE" % idx : snode,
|
|
605 |
"INSTANCE_DISK%d_PORT" % idx : port,
|
|
606 |
"INSTANCE_DISK%d_PMINOR" % idx : pmin,
|
|
607 |
"INSTANCE_DISK%d_SMINOR" % idx : smin,
|
|
608 |
"INSTANCE_DISK%d_DATA_VG" % idx : data_vg,
|
|
609 |
"INSTANCE_DISK%d_DATA_ID" % idx : data_name,
|
|
610 |
"INSTANCE_DISK%d_META_VG" % idx : meta_vg,
|
|
611 |
"INSTANCE_DISK%d_META_ID" % idx : meta_name,
|
|
612 |
}
|
|
613 |
elif template_name == constants.DT_DISKLESS:
|
|
614 |
ret = {}
|
|
615 |
|
|
616 |
ret.update({
|
|
617 |
"INSTANCE_DISK%d_TEMPLATE_NAME" % idx: template_name
|
|
618 |
})
|
|
619 |
|
|
620 |
return ret
|