Disks of ext template are allowed to have arbitrary parameters stored in Disk object's params slot. Those parameters can be passed during creation of a new disk, either in LUInstanceCreate() or in LUInsanceSetParams(). Still those parameters can not be changed afterwards. With this patch we override this limitation.
Signed-off-by: Dimitris Aragiorgis <[email protected]> --- lib/cmdlib/instance.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/lib/cmdlib/instance.py b/lib/cmdlib/instance.py index be30315..e01dd13 100644 --- a/lib/cmdlib/instance.py +++ b/lib/cmdlib/instance.py @@ -2308,10 +2308,6 @@ class LUInstanceSetParams(LogicalUnit): if constants.IDISK_SIZE in params: raise errors.OpPrereqError("Disk size change not possible, use" " grow-disk", errors.ECODE_INVAL) - if len(params) > 2: - raise errors.OpPrereqError("Disk modification doesn't support" - " additional arbitrary parameters", - errors.ECODE_INVAL) name = params.get(constants.IDISK_NAME, None) if name is not None and name.lower() == constants.VALUE_NONE: params[constants.IDISK_NAME] = None @@ -3182,8 +3178,7 @@ class LUInstanceSetParams(LogicalUnit): ("disk/%d" % idx, "add:size=%s,mode=%s" % (disk.size, disk.mode)), ]) - @staticmethod - def _ModifyDisk(idx, disk, params, _): + def _ModifyDisk(self, idx, disk, params, _): """Modifies a disk. """ @@ -3196,6 +3191,12 @@ class LUInstanceSetParams(LogicalUnit): disk.name = params.get(constants.IDISK_NAME) changes.append(("disk.name/%d" % idx, disk.name)) + for key, value in params.iteritems(): + if (key not in [constants.IDISK_MODE, constants.IDISK_NAME] and + self.instance.disk_template == constants.DT_EXT): + disk.params[key] = value + changes.append(("disk.params:%s/%d" % (key, idx), value)) + return changes def _RemoveDisk(self, idx, root, _): -- 1.7.10.4
