Revision ad24e046

b/lib/cmdlib.py
2858 2858
        elif field == "mac":
2859 2859
          val = instance.nics[0].mac
2860 2860
        elif field == "sda_size" or field == "sdb_size":
2861
          disk = instance.FindDisk(field[:3])
2862
          if disk is None:
2861
          idx = ord(field[2]) - ord('a')
2862
          try:
2863
            val = instance.FindDisk(idx).size
2864
          except errors.OpPrereqError:
2863 2865
            val = None
2864
          else:
2865
            val = disk.size
2866 2866
        elif field == "tags":
2867 2867
          val = list(instance.GetTags())
2868 2868
        elif field == "serial_no":
......
4479 4479
      raise errors.OpPrereqError("Instance's disk layout does not support"
4480 4480
                                 " growing.")
4481 4481

  
4482
    if instance.FindDisk(self.op.disk) is None:
4483
      raise errors.OpPrereqError("Disk '%s' not found for instance '%s'" %
4484
                                 (self.op.disk, instance.name))
4482
    self.disk = instance.FindDisk(self.op.disk)
4485 4483

  
4486 4484
    nodenames = [instance.primary_node] + list(instance.secondary_nodes)
4487 4485
    nodeinfo = self.rpc.call_node_info(nodenames, self.cfg.GetVGName(),
......
4505 4503

  
4506 4504
    """
4507 4505
    instance = self.instance
4508
    disk = instance.FindDisk(self.op.disk)
4506
    disk = self.disk
4509 4507
    for node in (instance.secondary_nodes + (instance.primary_node,)):
4510 4508
      self.cfg.SetDiskID(disk, node)
4511 4509
      result = self.rpc.call_blockdev_grow(node, disk, self.op.amount)
b/lib/objects.py
594 594

  
595 595
    return ret
596 596

  
597
  def FindDisk(self, name):
598
    """Find a disk given having a specified name.
597
  def FindDisk(self, idx):
598
    """Find a disk given having a specified index.
599 599

  
600
    This will return the disk which has the given iv_name.
600
    This is just a wrapper that does validation of the index.
601 601

  
602
    """
603
    for disk in self.disks:
604
      if disk.iv_name == name:
605
        return disk
602
    @type idx: int
603
    @param idx: the disk index
604
    @rtype: L{Disk}
605
    @return: the corresponding disk
606
    @raise errors.OpPrereqError: when the given index is not valid
606 607

  
607
    return None
608
    """
609
    try:
610
      idx = int(idx)
611
      return self.disks[idx]
612
    except ValueError, err:
613
      raise errors.OpPrereqError("Invalid disk index: '%s'" % str(err))
614
    except IndexError:
615
      raise errors.OpPrereqError("Invalid disk index: %d (instace has disks"
616
                                 " 0 to %d" % (idx, len(self.disks)))
608 617

  
609 618
  def ToDict(self):
610 619
    """Instance-specific conversion to standard python types.
b/scripts/gnt-instance
631 631
  """
632 632
  instance = args[0]
633 633
  disk = args[1]
634
  try:
635
    disk = int(disk)
636
  except ValueError, err:
637
    raise errors.OpPrereqError("Invalid disk index: %s" % str(err))
634 638
  amount = utils.ParseUnit(args[2])
635 639
  op = opcodes.OpGrowDisk(instance_name=instance, disk=disk, amount=amount,
636 640
                          wait_for_sync=opts.wait_for_sync)

Also available in: Unified diff