diff --git a/gns3server/compute/qemu/qemu_vm.py b/gns3server/compute/qemu/qemu_vm.py index 7f7dcfe3..0bda2f44 100644 --- a/gns3server/compute/qemu/qemu_vm.py +++ b/gns3server/compute/qemu/qemu_vm.py @@ -694,7 +694,7 @@ class QemuVM(BaseNode): :param initrd: QEMU initrd path """ - initrd = self.manager.get_abs_image_path(initrd) + initrd = self.manager.get_abs_image_path(initrd) log.info('QEMU VM "{name}" [{id}] has set the QEMU initrd path to {initrd}'.format(name=self._name, id=self._id, @@ -1480,6 +1480,7 @@ class QemuVM(BaseNode): (to be passed to subprocess.Popen()) """ + additional_options = self._options.strip() command = [self.qemu_path] command.extend(["-name", self._name]) command.extend(["-m", "{}M".format(self._ram)]) @@ -1496,6 +1497,8 @@ class QemuVM(BaseNode): command.extend(cdrom_option) command.extend((yield from self._disk_options())) command.extend(self._linux_boot_options()) + if "-uuid" not in additional_options: + command.extend(["-uuid", self._id]) if self._console_type == "telnet": command.extend(self._serial_options()) elif self._console_type == "vnc": @@ -1505,7 +1508,6 @@ class QemuVM(BaseNode): command.extend(self._monitor_options()) command.extend((yield from self._network_options())) command.extend(self._graphic()) - additional_options = self._options.strip() if additional_options: try: command.extend(shlex.split(additional_options)) diff --git a/tests/compute/qemu/test_qemu_vm.py b/tests/compute/qemu/test_qemu_vm.py index ccf07e8b..628415e1 100644 --- a/tests/compute/qemu/test_qemu_vm.py +++ b/tests/compute/qemu/test_qemu_vm.py @@ -431,6 +431,8 @@ def test_build_command(vm, loop, fake_qemu_binary, port_manager): "cpus=1", "-boot", "order=c", + "-uuid", + vm.id, "-serial", "telnet:127.0.0.1:{},server,nowait".format(vm.console), "-net", @@ -440,6 +442,19 @@ def test_build_command(vm, loop, fake_qemu_binary, port_manager): ] +def test_build_command_manual_uuid(vm, loop, fake_qemu_binary, port_manager): + """ + If user has set a uuid we keep it + """ + + vm.options = "-uuid e1c307a4-896f-11e6-81a5-3c07547807cc" + os.environ["DISPLAY"] = "0:0" + with asyncio_patch("asyncio.create_subprocess_exec", return_value=MagicMock()) as process: + cmd = loop.run_until_complete(asyncio.async(vm._build_command())) + assert "e1c307a4-896f-11e6-81a5-3c07547807cc" in cmd + assert vm.id not in cmd + + def test_build_command_kvm(linux_platform, vm, loop, fake_qemu_binary, port_manager): """ Qemu 2.4 introduce an issue with KVM @@ -460,6 +475,8 @@ def test_build_command_kvm(linux_platform, vm, loop, fake_qemu_binary, port_mana "-enable-kvm", "-boot", "order=c", + "-uuid", + vm.id, "-serial", "telnet:127.0.0.1:{},server,nowait".format(vm.console), "-net", @@ -491,6 +508,8 @@ def test_build_command_kvm_2_4(linux_platform, vm, loop, fake_qemu_binary, port_ "smm=off", "-boot", "order=c", + "-uuid", + vm.id, "-serial", "telnet:127.0.0.1:{},server,nowait".format(vm.console), "-net", @@ -525,6 +544,8 @@ def test_build_command_two_adapters(vm, loop, fake_qemu_binary, port_manager): "cpus=1", "-boot", "order=c", + "-uuid", + vm.id, "-serial", "telnet:127.0.0.1:{},server,nowait".format(vm.console), "-net",