On 09/13/2012 01:51 PM, Lucas Meneghel Rodrigues wrote:
From: Yiqiao Pu<[email protected]>

Make kvm_vm create vm following the parameters, not the env,
otherwise the cases runs in a queue will create vm always
follow the first case's nic configuration.

Signed-off-by: Yiqiao Pu<[email protected]>
---
  client/tests/virt/virttest/kvm_vm.py | 26 +++++++++++++++++++++++---
  1 file changed, 23 insertions(+), 3 deletions(-)

diff --git a/client/tests/virt/virttest/kvm_vm.py 
b/client/tests/virt/virttest/kvm_vm.py
index 98dad8e..18f107c 100644
--- a/client/tests/virt/virttest/kvm_vm.py
+++ b/client/tests/virt/virttest/kvm_vm.py
@@ -904,6 +904,11 @@ class VM(virt_vm.BaseVM):
          # Clone this VM using the new params
          vm = self.clone(name, params, root_dir, copy_state=True)

+        # Update the virtnet with params
+        params_virtnet = utils_misc.VirtNet(params, name, self.instance)
+        if vm.virtnet != params_virtnet:
+            vm.virtnet = params_virtnet
+
          qemu_binary = utils_misc.get_path(os.path.join(root_dir,
                                                         params.get("vm_type")),
                                            params.get("qemu_binary", "qemu"))
@@ -1435,6 +1440,10 @@ class VM(virt_vm.BaseVM):
          name = self.name
          params = self.params
          root_dir = self.root_dir
+        # Update the virtnet with params
+        params_virtnet = utils_misc.VirtNet(params, name, self.instance)
+        if self.virtnet != params_virtnet:
+            self.virtnet = params_virtnet

          # Verify the md5sum of the ISO images
          for cdrom in params.objects("cdroms"):
@@ -2619,11 +2628,22 @@ class VM(virt_vm.BaseVM):
          """
          if (self.__make_qemu_command() !=
                  self.__make_qemu_command(name, params, basedir)):
-            logging.debug("VM params in env don't match requested, 
restarting.")
-            return True
+            restart = True
+        else:
+            for i, nic in enumerate(params.objects('nics')):
+                if (self.virtnet[i]['netdst'] !=
+                    params.object_params('nic').get('netdst')):
+                    restart = True
+            else:
+                restart = False
+
+        if restart:
+            logging.debug("VM params in env don't match requested, "
+                          "restarting.")
          else:
              logging.debug("VM params in env do match requested, continuing.")
-            return False
+
+        return restart

      def pause(self):
          """

Talked with lucas on this. We believe this fix will solve the root-problem: https://github.com/kongove/autotest/commit/35bcae3e589a6e5fa6a48e39ea9b58e95ffd32f1#commitcomment-1851180

You're patch may work, but in my experience vm.needs_restart() is VERY sensitive to messing with __init__ behavior. Amos's patch fixes the core of the problem by forcing virtnet to always initialize from params.

--
Chris Evich, RHCA, RHCE, RHCDS, RHCSS
Quality Assurance Engineer
e-mail: cevich + `@' + redhat.com o: 1-888-RED-HAT1 x44214

_______________________________________________
Autotest-kernel mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/autotest-kernel

Reply via email to