From 21bcb9aa80a5c2eb671dcba69af795e624a230f7 Mon Sep 17 00:00:00 2001 From: Michael Hanselmann <hansmi@google.com> Date: Mon, 16 Nov 2009 15:52:53 +0100 Subject: [PATCH] Fix off-by-one error when modifying instance NIC MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit For an instance with exactly one NIC: $ gnt-instance modify --net 1:ip=1.2.3.4 inst1 Failure: prerequisites not met for this operation: error type: wrong_input, error details: Invalid NIC index 1, valid values are 0 to 1 For an instance with no NIC at all, it fails with βInvalid NIC index 0, valid values are 0 to 0β. This is fixed by this patch. Signed-off-by: Michael Hanselmann <hansmi@google.com> Reviewed-by: Guido Trotter <ultrotter@google.com> --- lib/cli.py | 4 ++-- lib/cmdlib.py | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/cli.py b/lib/cli.py index e18ebb252..5e811b5f1 100644 --- a/lib/cli.py +++ b/lib/cli.py @@ -1396,7 +1396,7 @@ def GenericInstanceCreate(mode, opts, args): if opts.nics: try: - nic_max = max(int(nidx[0])+1 for nidx in opts.nics) + nic_max = max(int(nidx[0]) + 1 for nidx in opts.nics) except ValueError, err: raise errors.OpPrereqError("Invalid NIC index passed: %s" % str(err)) nics = [{}] * nic_max @@ -1427,7 +1427,7 @@ def GenericInstanceCreate(mode, opts, args): if opts.sd_size is not None: opts.disks = [(0, {"size": opts.sd_size})] try: - disk_max = max(int(didx[0])+1 for didx in opts.disks) + disk_max = max(int(didx[0]) + 1 for didx in opts.disks) except ValueError, err: raise errors.OpPrereqError("Invalid disk index passed: %s" % str(err)) disks = [{}] * disk_max diff --git a/lib/cmdlib.py b/lib/cmdlib.py index 7ed082ed8..d5bc1ace3 100644 --- a/lib/cmdlib.py +++ b/lib/cmdlib.py @@ -7671,10 +7671,14 @@ class LUSetInstanceParams(LogicalUnit): continue if nic_op != constants.DDM_ADD: # an existing nic + if not instance.nics: + raise errors.OpPrereqError("Invalid NIC index %s, instance has" + " no NICs" % nic_op, + errors.ECODE_INVAL) if nic_op < 0 or nic_op >= len(instance.nics): raise errors.OpPrereqError("Invalid NIC index %s, valid values" " are 0 to %d" % - (nic_op, len(instance.nics)), + (nic_op, len(instance.nics) - 1), errors.ECODE_INVAL) old_nic_params = instance.nics[nic_op].nicparams old_nic_ip = instance.nics[nic_op].ip -- GitLab