Exemple #1
0
 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)
Exemple #2
0
 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)
Exemple #3
0
 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)
Exemple #5
0
    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')
Exemple #6
0
 def _new_vm(self, *args):
     vm = QEMUMachine(self.qemu_bin)
     if args:
         vm.add_args(*args)
     return vm