Revision 5d2cbf27

b/lib/cmdlib/instance.py
650 650
      nics=NICListToTuple(self, self.nics),
651 651
      disk_template=self.op.disk_template,
652 652
      disks=[(d[constants.IDISK_NAME], d.get("uuid", ""),
653
              d[constants.IDISK_SIZE], d[constants.IDISK_MODE])
653
              d[constants.IDISK_SIZE], d[constants.IDISK_MODE], {})
654 654
             for d in self.disks],
655 655
      bep=self.be_full,
656 656
      hvp=self.hv_full,
b/lib/cmdlib/instance_utils.py
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

Also available in: Unified diff