Hello Everyone > I went trough the discussion about this patch and I also agree we should > be implementing this test as a server side test. However I thought it > would be good having this patch rebased to the new kvm test code just in > case we need it in the future. This is part of the patch queue work. > I have rebased the patch to the new kvm test code. The same set of parameters should be added to kvm_tests.cfg file,as the previous patch hostip = 192.168.1.2 #ur host machine ip remoteip = 192.168.1.2 #can use same ip for local migration remuser = root #remote machine user rempassword = 123456 #passwd for remote user remote_dst = yes #could be enabled for local migration too qemu_path_dst = /tmp/kvm_autotest_root1/qemu image_dir_dst = /tmp/kvm_autotest_root1/images Thanks and Regards Yogi
kvm_tests.py | 2 - kvm_vm.py | 60 +++++++++++++++++++++++++++++++++++++++++++---------------- 2 files changed, 45 insertions(+), 17 deletions(-) Signed-off-by: Yogananth Subramanian <anantyog@xxxxxxxxxx> --- diff -aurp kvm-autotest-old//client/tests/kvm/kvm_tests.py kvm-autotest-new//client/tests/kvm/kvm_tests.py --- kvm-autotest-old//client/tests/kvm/kvm_tests.py 2009-06-17 18:18:31.000000000 +0000 +++ kvm-autotest-new//client/tests/kvm/kvm_tests.py 2009-06-17 18:24:11.000000000 +0000 @@ -113,7 +113,7 @@ def run_migration(test, params, env): session.close() # Define the migration command - cmd = "migrate -d tcp:localhost:%d" % dest_vm.migration_port + cmd = "migrate -d tcp:%s:%d" % (dest_vm.hostip,dest_vm.migration_port) logging.debug("Migration command: %s" % cmd) # Migrate diff -aurp kvm-autotest-old//client/tests/kvm/kvm_vm.py kvm-autotest-new//client/tests/kvm/kvm_vm.py --- kvm-autotest-old//client/tests/kvm/kvm_vm.py 2009-06-17 18:18:31.000000000 +0000 +++ kvm-autotest-new//client/tests/kvm/kvm_vm.py 2009-06-17 18:46:19.000000000 +0000 @@ -1,6 +1,7 @@ #!/usr/bin/python import time, socket, os, logging, fcntl import kvm_utils +import re """ Utility classes and functions to handle Virtual Machine creation using qemu. @@ -114,6 +115,7 @@ class VM: self.image_dir = image_dir self.iso_dir = iso_dir + self.remote = False # Find available monitor filename while True: @@ -170,8 +172,6 @@ class VM: file.close() if not self.qemu_path in cmdline: return False - if not self.monitor_file_name in cmdline: - return False return True @@ -234,8 +234,6 @@ class VM: qemu_cmd += qemu_path # Add the VM's name qemu_cmd += " -name '%s'" % name - # Add the monitor socket parameter - qemu_cmd += " -monitor unix:%s,server,nowait" % self.monitor_file_name for image_name in kvm_utils.get_sub_dict_names(params, "images"): image_params = kvm_utils.get_sub_dict(params, image_name) @@ -321,6 +319,18 @@ class VM: image_dir = self.image_dir iso_dir = self.iso_dir + # If VM is remote, set hostip to ip of the remote machine + # If VM is local set hostip to localhost or hostip param + if params.get("remote") == "yes": + self.remote = True + self.hostip = params.get("remoteip") + self.qemu_path = params.get("qemu_path",qemu_path) + qemu_path = self.qemu_path + self.image_dir = params.get("image_dir",image_dir) + image_dir = self.image_dir + else: + self.remote = False + self.hostip = params.get("hostip","localhost") # Verify the md5sum of the ISO image iso = params.get("cdrom") if iso: @@ -376,10 +386,29 @@ class VM: self.migration_port = kvm_utils.find_free_port(5200, 6000) # Add -incoming option to the qemu command qemu_command += " -incoming tcp:0:%d" % self.migration_port - - logging.debug("Running qemu command:\n%s", qemu_command) - (status, pid, output) = kvm_utils.run_bg(qemu_command, None, - logging.debug, "(qemu) ") + + self.monitor_port = kvm_utils.find_free_port(5400, 6000) + qemu_command +=" -monitor tcp:0:%d,server,nowait" % self.monitor_port + + # If the VM is remote, get the username and password of remote host and lanch qemu + # command on the remote machine. + if self.remote: + remuser = params.get("remuser") + rempassword = params.get("rempassword") + sub = kvm_utils.ssh(self.hostip,22,remuser,rempassword,".*[#$].*") + qemu_command +=" &" + logging.debug("Running qemu command:\n%s" % qemu_command) + sub.sendline(qemu_command) + + (status,output) = sub.read_up_to_prompt() + if "Exit " in output: + status = int(re.findall("Exit\s(\d+)",output)[0]) + else: + pid = int(re.findall(".*] (\d+)",output)[0]) + status = 0 + else: + logging.debug("Running qemu command:\n%s" % qemu_command) + (status, pid, output) = kvm_utils.run_bg(qemu_command, None, logging.debug, "(qemu) ") if status: logging.debug("qemu exited with status %d", status) @@ -404,7 +433,7 @@ class VM: lockfile.close() - def send_monitor_cmd(self, command, block=True, timeout=20.0): + def send_monitor_cmd(self, command, block=True, timeout=30.0): """ Send command to the QEMU monitor. @@ -450,9 +479,8 @@ class VM: # Connect to monitor logging.debug("Sending monitor command: %s" % command) try: - s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) - s.setblocking(False) - s.connect(self.monitor_file_name) + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + s.connect((self.hostip,self.monitor_port)) except: logging.debug("Could not connect to monitor socket") return (1, "") @@ -542,8 +570,9 @@ class VM: Return True if the VM's monitor is responsive. """ # Check if the process exists - if not kvm_utils.pid_exists(self.pid): - return False + if not self.remote: + if not kvm_utils.pid_exists(self.pid): + return False # Try sending a monitor command (status, output) = self.send_monitor_cmd("help") if status: @@ -574,8 +603,7 @@ class VM: address of its own). Otherwise return the guest's IP address. """ # Currently redirection is always used, so return 'localhost' - return "localhost" - + return self.hostip def get_port(self, port): """