Before, when importing an instance, cmd NIC params were merged with cluster default NIC params instead.
This fixes issue 833. Signed-off-by: BSRK Aditya <[email protected]> --- lib/cmdlib/instance_create.py | 53 ++++++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/lib/cmdlib/instance_create.py b/lib/cmdlib/instance_create.py index 5188596..d72c371 100644 --- a/lib/cmdlib/instance_create.py +++ b/lib/cmdlib/instance_create.py @@ -591,31 +591,36 @@ class LUInstanceCreate(LogicalUnit): " is missing the disk information", errors.ECODE_INVAL) - if not self.op.nics: - nics = [] - for idx in range(constants.MAX_NICS): - if einfo.has_option(constants.INISECT_INS, "nic%d_mac" % idx): - ndict = {} - for name in [constants.INIC_IP, - constants.INIC_MAC, constants.INIC_NAME]: - nic_param_name = "nic%d_%s" % (idx, name) - if einfo.has_option(constants.INISECT_INS, nic_param_name): - v = einfo.get(constants.INISECT_INS, "nic%d_%s" % (idx, name)) - ndict[name] = v - network = einfo.get(constants.INISECT_INS, - "nic%d_%s" % (idx, constants.INIC_NETWORK)) - # in case network is given link and mode are inherited - # from nodegroup's netparams and thus should not be passed here - if network: - ndict[constants.INIC_NETWORK] = network - else: - for name in list(constants.NICS_PARAMETERS): - v = einfo.get(constants.INISECT_INS, "nic%d_%s" % (idx, name)) - ndict[name] = v - nics.append(ndict) + nics = [] + for idx in range(constants.MAX_NICS): + if einfo.has_option(constants.INISECT_INS, "nic%d_mac" % idx): + ndict = {} + for name in [constants.INIC_IP, + constants.INIC_MAC, constants.INIC_NAME]: + nic_param_name = "nic%d_%s" % (idx, name) + if einfo.has_option(constants.INISECT_INS, nic_param_name): + v = einfo.get(constants.INISECT_INS, "nic%d_%s" % (idx, name)) + ndict[name] = v + network = einfo.get(constants.INISECT_INS, + "nic%d_%s" % (idx, constants.INIC_NETWORK)) + # in case network is given link and mode are inherited + # from nodegroup's netparams and thus should not be passed here + if network: + ndict[constants.INIC_NETWORK] = network else: - break - self.op.nics = nics + for name in list(constants.NICS_PARAMETERS): + v = einfo.get(constants.INISECT_INS, "nic%d_%s" % (idx, name)) + ndict[name] = v + nics.append(ndict) + else: + break + num_nics = max(len(nics), len(self.op.nics)) + for i in range(num_nics): + if i == len(nics): + nics.append({}) + if i < len(self.op.nics): + nics[i].update(self.op.nics[i]) + self.op.nics = nics if not self.op.tags and einfo.has_option(constants.INISECT_INS, "tags"): self.op.tags = einfo.get(constants.INISECT_INS, "tags").split() -- 1.7.10.4
