X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=resources%2Flibraries%2Fpython%2FQemuUtils.py;h=aa45ce08eff555f88a3e36d0c672e7fed3ca3131;hb=f491bc6a03bae995321dc912661c4c628f4d156f;hp=428599be8319cd61ccd1f66aea4995c118f6e9a5;hpb=d7cf0a829cc9cc63799330b673c8c42393de2655;p=csit.git diff --git a/resources/libraries/python/QemuUtils.py b/resources/libraries/python/QemuUtils.py index 428599be83..aa45ce08ef 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,8 +28,9 @@ class QemuUtils(object): def __init__(self, qemu_id=1): self._qemu_id = qemu_id - # Path to QEMU binary - self._qemu_bin = '/usr/bin/qemu-system-x86_64' + # Path to QEMU binary. Use x86_64 by default + self._qemu_path = '/usr/bin/' + self._qemu_bin = 'qemu-system-x86_64' # QEMU Machine Protocol socket self._qmp_sock = '/tmp/qmp{0}.sock'.format(self._qemu_id) # QEMU Guest Agent socket @@ -71,13 +72,13 @@ class QemuUtils(object): self._node = None self._socks = [self._qmp_sock, self._qga_sock] - def qemu_set_bin(self, path): + def qemu_set_path(self, path): """Set binary path for QEMU. :param path: Absolute path in filesystem. :type path: str """ - self._qemu_bin = path + self._qemu_path = path def qemu_set_smp(self, cpus, cores, threads, sockets): """Set SMP option for QEMU. @@ -188,6 +189,9 @@ class QemuUtils(object): self._ssh.connect(node) self._vm_info['host'] = node['host'] + arch = Topology.get_node_arch(node) + self._qemu_bin = 'qemu-system-{arch}'.format(arch=arch) + def qemu_add_vhost_user_if(self, socket, server=True, mac=None): """Add Vhost-user interface. @@ -515,6 +519,9 @@ class QemuUtils(object): .. note:: First set at least node to run QEMU on. .. warning:: Starts only one VM on the node. """ + # Qemu binary path + bin_path = '{0}{1}'.format(self._qemu_path, self._qemu_bin) + # SSH forwarding ssh_fwd = '-net user,hostfwd=tcp::{0}-:22'.format( self._qemu_opt.get('ssh_fwd_port')) @@ -545,10 +552,10 @@ class QemuUtils(object): pid = '-pidfile {}'.format(self._pid_file) # Run QEMU - cmd = '{0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10}'.format( - self._qemu_bin, self._qemu_opt.get('smp'), mem, ssh_fwd, - self._qemu_opt.get('options'), - drive, qmp, serial, qga, graphic, pid) + cmd = '{0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10}'.format(bin_path, + self._qemu_opt.get('smp'), mem, ssh_fwd, + self._qemu_opt.get('options'), drive, qmp, serial, qga, graphic, + pid) try: (ret_code, _, _) = self._ssh.exec_command_sudo(cmd, timeout=300) if int(ret_code) != 0: @@ -677,12 +684,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))