Revision 11bd1fac

b/lib/cmdlib/instance.py
634 634
      nics=NICListToTuple(self, self.nics),
635 635
      disk_template=self.op.disk_template,
636 636
      disks=[(d[constants.IDISK_NAME], d.get("uuid", ""),
637
              d[constants.IDISK_SIZE], d[constants.IDISK_MODE])
637
              d[constants.IDISK_SIZE], d[constants.IDISK_MODE], {})
638 638
             for d in self.disks],
639 639
      bep=self.be_full,
640 640
      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,
......
561 563

  
562 564
  if variant not in os_obj.supported_variants:
563 565
    raise errors.OpPrereqError("Unsupported OS variant", errors.ECODE_INVAL)
566

  
567

  
568
def BuildDiskLogicalIDEnv(template_name, idx, disk):
569
    if template_name == constants.DT_PLAIN:
570
      vg, name = disk.logical_id
571
      ret = {
572
        "INSTANCE_DISK%d_VG" % idx : vg,
573
        "INSTANCE_DISK%d_NAME" % idx : name
574
        }
575
    elif template_name in (constants.DT_FILE, constants.DT_SHARED_FILE):
576
      file_driver, name = disk.logical_id
577
      ret = {
578
        "INSTANCE_DISK%d_DRIVER" % idx : file_driver,
579
        "INSTANCE_DISK%d_NAME" % idx : name
580
        }
581

  
582
    elif template_name == constants.DT_BLOCK:
583
      block_driver, adopt = disk.logical_id
584
      ret = {
585
        "INSTANCE_DISK%d_DRIVER" % idx : block_driver,
586
        "INSTANCE_DISK%d_NAME" % idx : name
587
        }
588

  
589
    elif template_name == constants.DT_RBD:
590
      rbd, name = disk.logical_id
591
      ret = {
592
        "INSTANCE_DISK%d_DRIVER" % idx : rbd,
593
        "INSTANCE_DISK%d_NAME" % idx : name
594
        }
595

  
596
    elif template_name == constants.DT_EXT:
597
      provider, name = disk.logical_id
598
      ret = {
599
        "INSTANCE_DISK%d_PROVIDER" % idx : provider,
600
        "INSTANCE_DISK%d_NAME" % idx : name
601
        }
602

  
603
    elif template_name == constants.DT_DRBD8:
604
      pnode, snode, port, pmin, smin, secret = disk.logical_id
605
      data, meta = disk.children
606
      data_vg, data_name = data.logical_id
607
      meta_vg, meta_name = meta.logical_id
608
      ret = {
609
        "INSTANCE_DISK%d_PNODE" % idx : pnode,
610
        "INSTANCE_DISK%d_SNODE" % idx : snode,
611
        "INSTANCE_DISK%d_PORT" % idx : port,
612
        "INSTANCE_DISK%d_PMINOR" % idx : pmin,
613
        "INSTANCE_DISK%d_SMINOR" % idx : smin,
614
        "INSTANCE_DISK%d_DATA_VG" % idx : data_vg,
615
        "INSTANCE_DISK%d_DATA_NAME" % idx : data_name,
616
        "INSTANCE_DISK%d_META_VG" % idx : meta_vg,
617
        "INSTANCE_DISK%d_META_NAME" % idx : meta_name,
618
        }
619

  
620
    elif template_name == constants.DT_DISKLESS:
621
      ret = {}
622

  
623
    ret.update({
624
      "INSTANCE_DISK%d_TEMPLATE_NAME" % idx: template_name
625
      })
626

  
627
    return ret

Also available in: Unified diff