Revision e7f99087

b/lib/cmdlib.py
11585 11585
    env = {
11586 11586
      "DISK": self.op.disk,
11587 11587
      "AMOUNT": self.op.amount,
11588
      "ABSOLUTE": self.op.absolute,
11588 11589
      }
11589 11590
    env.update(_BuildInstanceHookEnvByObject(self, self.instance))
11590 11591
    return env
......
11617 11618

  
11618 11619
    self.disk = instance.FindDisk(self.op.disk)
11619 11620

  
11621
    if self.op.absolute:
11622
      self.target = self.op.amount
11623
      self.delta = self.target - self.disk.size
11624
      if self.delta < 0:
11625
        raise errors.OpPrereqError("Requested size (%s) is smaller than "
11626
                                   "current disk size (%s)" %
11627
                                   (utils.FormatUnit(self.target, "h"),
11628
                                    utils.FormatUnit(self.disk.size, "h")),
11629
                                   errors.ECODE_STATE)
11630
    else:
11631
      self.delta = self.op.amount
11632
      self.target = self.disk.size + self.delta
11633
      if self.delta < 0:
11634
        raise errors.OpPrereqError("Requested increment (%s) is negative" %
11635
                                   utils.FormatUnit(self.delta, "h"),
11636
                                   errors.ECODE_INVAL)
11637

  
11620 11638
    if instance.disk_template not in (constants.DT_FILE,
11621 11639
                                      constants.DT_SHARED_FILE,
11622 11640
                                      constants.DT_RBD):
11623 11641
      # TODO: check the free disk space for file, when that feature will be
11624 11642
      # supported
11625 11643
      _CheckNodesFreeDiskPerVG(self, nodenames,
11626
                               self.disk.ComputeGrowth(self.op.amount))
11644
                               self.disk.ComputeGrowth(self.delta))
11627 11645

  
11628 11646
  def Exec(self, feedback_fn):
11629 11647
    """Execute disk grow.
......
11640 11658
    if not disks_ok:
11641 11659
      raise errors.OpExecError("Cannot activate block device to grow")
11642 11660

  
11643
    feedback_fn("Growing disk %s of instance '%s' by %s" %
11661
    feedback_fn("Growing disk %s of instance '%s' by %s to %s" %
11644 11662
                (self.op.disk, instance.name,
11645
                 utils.FormatUnit(self.op.amount, "h")))
11663
                 utils.FormatUnit(self.delta, "h"),
11664
                 utils.FormatUnit(self.target, "h")))
11646 11665

  
11647 11666
    # First run all grow ops in dry-run mode
11648 11667
    for node in instance.all_nodes:
11649 11668
      self.cfg.SetDiskID(disk, node)
11650
      result = self.rpc.call_blockdev_grow(node, disk, self.op.amount, True)
11669
      result = self.rpc.call_blockdev_grow(node, disk, self.delta, True)
11651 11670
      result.Raise("Grow request failed to node %s" % node)
11652 11671

  
11653 11672
    # We know that (as far as we can test) operations across different
11654 11673
    # nodes will succeed, time to run it for real
11655 11674
    for node in instance.all_nodes:
11656 11675
      self.cfg.SetDiskID(disk, node)
11657
      result = self.rpc.call_blockdev_grow(node, disk, self.op.amount, False)
11676
      result = self.rpc.call_blockdev_grow(node, disk, self.delta, False)
11658 11677
      result.Raise("Grow request failed to node %s" % node)
11659 11678

  
11660 11679
      # TODO: Rewrite code to work properly
......
11664 11683
      # time is a work-around.
11665 11684
      time.sleep(5)
11666 11685

  
11667
    disk.RecordGrow(self.op.amount)
11686
    disk.RecordGrow(self.delta)
11668 11687
    self.cfg.Update(instance, feedback_fn)
11669 11688

  
11670 11689
    # Changes have been recorded, release node lock
b/lib/opcodes.py
1538 1538
    ("disk", ht.NoDefault, ht.TInt, "Disk index"),
1539 1539
    ("amount", ht.NoDefault, ht.TPositiveInt,
1540 1540
     "Amount of disk space to add (megabytes)"),
1541
    ("absolute", False, ht.TBool,
1542
     "Whether the amount parameter is an absolute target or a relative one"),
1541 1543
    ]
1542 1544
  OP_RESULT = ht.TNone
1543 1545

  

Also available in: Unified diff