def boot(self, img, extra_args=[]): args = self._args + [ "-device", "VGA", "-drive", "file=%s,if=none,id=drive0,cache=writeback" % img, "-device", "virtio-blk,drive=drive0,bootindex=0" ] args += self._data_args + extra_args logging.debug("QEMU args: %s", " ".join(args)) qemu_bin = os.environ.get("QEMU", "qemu-system-" + self.arch) guest = QEMUMachine(binary=qemu_bin, args=args) try: guest.launch() except: logging.error("Failed to launch QEMU, command line:") logging.error(" ".join([qemu_bin] + args)) logging.error("Log:") logging.error(guest.get_log()) logging.error("QEMU version >= 2.10 is required") raise atexit.register(self.shutdown) self._guest = guest usernet_info = guest.qmp("human-monitor-command", command_line="info usernet") self.ssh_port = None for l in usernet_info["return"].splitlines(): fields = l.split() if "TCP[HOST_FORWARD]" in fields and "22" in fields: self.ssh_port = l.split()[3] if not self.ssh_port: raise Exception("Cannot find ssh port from 'info usernet':\n%s" % \ usernet_info)
def setUp(self): self.vm = None self.qemu_bin = self.params.get('qemu_bin', default=pick_default_qemu_bin()) if self.qemu_bin is None: self.cancel("No QEMU binary defined or found in the source tree") self.vm = QEMUMachine(self.qemu_bin)
def setUp(self): self.jobdir = os.path.dirname(self.logdir) self.log.info("### jobdir: %s", self.jobdir) self.kernel = os.path.join(self.jobdir, "drminfo.kernel") self.initrd = os.path.join(self.jobdir, "drminfo.initrd") self.qemu_binary = self.find_qemu_binary() self.log.info("### using qemu binary: %s", self.qemu_binary) self.vm = QEMUMachine(self.qemu_binary)
def run_device(self, devtype, opts=None, machine='pc'): """ Run QEMU with `-device DEVTYPE`, return device info from `query-pci` """ with QEMUMachine(self.qemu_bin) as vm: vm.set_machine(machine) if opts: devtype += ',' + opts vm.add_args('-device', '%s,id=devfortest' % (devtype)) vm.add_args('-S') vm.launch() pcibuses = vm.command('query-pci') alldevs = [dev for bus in pcibuses for dev in bus['devices']] devfortest = [dev for dev in alldevs if dev['qdev_id'] == 'devfortest'] return devfortest[0], get_pci_interfaces(vm, devtype)
def migrate_vm(self, vga, display = None): self.log.info("### live migration: start ...") dest_uri = 'tcp:localhost:%u' % self._get_free_port() dest_vm = QEMUMachine(self.qemu_binary) self.boot_gfx_vm(vga, display, dest_vm, dest_uri); self.vm.qmp('migrate_set_speed', value = "1G") self.vm.qmp('migrate', uri=dest_uri) wait.wait_for( self.migration_finished, timeout=self.timeout, step=0.1, args=(self.vm,) ) self.assertEqual(dest_vm.command('query-migrate')['status'], 'completed') self.assertEqual(self.vm.command('query-migrate')['status'], 'completed') self.assertEqual(dest_vm.command('query-status')['status'], 'running') self.assertEqual(self.vm.command('query-status')['status'], 'postmigrate') self.log.info("### live migration: OK") # swap vm and console handles, so we can talk to the new vm ... self.vm.shutdown() self.vm = dest_vm self.rconsole = self.vm.console_socket.makefile('r') self.wconsole = self.vm.console_socket.makefile('w')
def _new_vm(self, *args): vm = QEMUMachine(self.qemu_bin) if args: vm.add_args(*args) return vm