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

Reply via email to