X-Git-Url: https://gerrit.fd.io/r/gitweb?p=csit.git;a=blobdiff_plain;f=resources%2Flibraries%2Fpython%2FQemuUtils.py;h=6426394bf461c35c2a742b12e115ee270384c6bc;hp=6689e5cf96839564fc584010bd084564ce2cba5b;hb=c7eb2002bcd007520309feb3e11a26ff847a4e05;hpb=7174e36c3d36210712f18901190d888106bca64b diff --git a/resources/libraries/python/QemuUtils.py b/resources/libraries/python/QemuUtils.py index 6689e5cf96..6426394bf4 100644 --- a/resources/libraries/python/QemuUtils.py +++ b/resources/libraries/python/QemuUtils.py @@ -20,7 +20,7 @@ from robot.api import logger from resources.libraries.python.ssh import SSH, SSHTimeout from resources.libraries.python.constants import Constants -from resources.libraries.python.topology import NodeType +from resources.libraries.python.topology import NodeType, Topology class QemuUtils(object): @@ -28,7 +28,7 @@ class QemuUtils(object): def __init__(self, qemu_id=1): self._qemu_id = qemu_id - # Path to QEMU binary + # Path to QEMU binary. Use x86_64 by default self._qemu_bin = '/usr/bin/qemu-system-x86_64' # QEMU Machine Protocol socket self._qmp_sock = '/tmp/qmp{0}.sock'.format(self._qemu_id) @@ -188,6 +188,9 @@ class QemuUtils(object): self._ssh.connect(node) self._vm_info['host'] = node['host'] + arch = Topology.get_node_arch(node) + self._qemu_bin = '/usr/bin/qemu-system-{0}'.format(arch) + def qemu_add_vhost_user_if(self, socket, server=True, mac=None): """Add Vhost-user interface. @@ -549,19 +552,18 @@ class QemuUtils(object): self._qemu_bin, self._qemu_opt.get('smp'), mem, ssh_fwd, self._qemu_opt.get('options'), drive, qmp, serial, qga, graphic, pid) - (ret_code, _, stderr) = self._ssh.exec_command_sudo(cmd, timeout=300) - if int(ret_code) != 0: - logger.debug('QEMU start failed {0}'.format(stderr)) - raise RuntimeError('QEMU start failed on {0}'.format( - self._node['host'])) - logger.trace('QEMU running') - # Wait until VM boot try: + (ret_code, _, _) = self._ssh.exec_command_sudo(cmd, timeout=300) + if int(ret_code) != 0: + raise RuntimeError('QEMU start failed on {0}'.format( + self._node['host'])) + # Wait until VM boot self._wait_until_vm_boot() except (RuntimeError, SSHTimeout): self.qemu_kill_all() self.qemu_clear_socks() raise + logger.trace('QEMU started successfully.') # Update interface names in VM node dict self._update_vm_interfaces() # Return VM node dict @@ -678,12 +680,14 @@ class QemuUtils(object): version = ' --version={0}'.format(Constants.QEMU_INSTALL_VERSION) force = ' --force' if force_install else '' patch = ' --patch' if apply_patch else '' + arch = Topology.get_node_arch(node) + target_list = ' --target-list={0}-softmmu'.format(arch) (ret_code, stdout, stderr) = \ ssh.exec_command( - "sudo -E sh -c '{0}/{1}/qemu_build.sh{2}{3}{4}{5}'"\ + "sudo -E sh -c '{0}/{1}/qemu_build.sh{2}{3}{4}{5}{6}'"\ .format(Constants.REMOTE_FW_DIR, Constants.RESOURCES_LIB_SH, - version, directory, force, patch), 1000) + version, directory, force, patch, target_list), 1000) if int(ret_code) != 0: logger.debug('QEMU build failed {0}'.format(stdout + stderr))