mirror of
https://github.com/GNS3/gns3-server
synced 2024-11-24 09:18:08 +00:00
parent
cad708f4ab
commit
4d1f08c96e
@ -915,13 +915,17 @@ class QemuVM(BaseVM):
|
|||||||
|
|
||||||
return options
|
return options
|
||||||
|
|
||||||
|
def _get_random_mac(self, adapter_id):
|
||||||
|
# TODO: let users specify a base mac address
|
||||||
|
return "00:00:ab:%02x:%02x:%02d" % (random.randint(0x00, 0xff), random.randint(0x00, 0xff), adapter_id)
|
||||||
|
|
||||||
def _network_options(self):
|
def _network_options(self):
|
||||||
|
|
||||||
network_options = []
|
network_options = []
|
||||||
adapter_id = 0
|
adapter_id = 0
|
||||||
for adapter in self._ethernet_adapters:
|
for adapter in self._ethernet_adapters:
|
||||||
# TODO: let users specify a base mac address
|
# TODO: let users specify a base mac address
|
||||||
mac = "00:00:ab:%02x:%02x:%02d" % (random.randint(0x00, 0xff), random.randint(0x00, 0xff), adapter_id)
|
mac = self._get_random_mac(adapter_id)
|
||||||
network_options.extend(["-net", "nic,vlan={},macaddr={},model={}".format(adapter_id, mac, self._adapter_type)])
|
network_options.extend(["-net", "nic,vlan={},macaddr={},model={}".format(adapter_id, mac, self._adapter_type)])
|
||||||
nio = adapter.get_nio(0)
|
nio = adapter.get_nio(0)
|
||||||
if nio and isinstance(nio, NIO_UDP):
|
if nio and isinstance(nio, NIO_UDP):
|
||||||
@ -944,6 +948,16 @@ class QemuVM(BaseVM):
|
|||||||
|
|
||||||
return network_options
|
return network_options
|
||||||
|
|
||||||
|
def _graphic(self):
|
||||||
|
"""
|
||||||
|
Add the correct graphic options depending of the OS
|
||||||
|
"""
|
||||||
|
if sys.platform.startswith("win"):
|
||||||
|
return []
|
||||||
|
if len(os.environ.get("DISPLAY", "")) > 0:
|
||||||
|
return []
|
||||||
|
return ["-nographic"]
|
||||||
|
|
||||||
@asyncio.coroutine
|
@asyncio.coroutine
|
||||||
def _build_command(self):
|
def _build_command(self):
|
||||||
"""
|
"""
|
||||||
@ -963,6 +977,7 @@ class QemuVM(BaseVM):
|
|||||||
if additional_options:
|
if additional_options:
|
||||||
command.extend(shlex.split(additional_options))
|
command.extend(shlex.split(additional_options))
|
||||||
command.extend(self._network_options())
|
command.extend(self._network_options())
|
||||||
|
command.extend(self._graphic())
|
||||||
return command
|
return command
|
||||||
|
|
||||||
def __json__(self):
|
def __json__(self):
|
||||||
|
@ -233,3 +233,36 @@ def test_control_vm_expect_text(vm, loop):
|
|||||||
assert writer.write.called_with("test")
|
assert writer.write.called_with("test")
|
||||||
|
|
||||||
assert res == "epic product"
|
assert res == "epic product"
|
||||||
|
|
||||||
|
|
||||||
|
def test_build_command(vm, loop, fake_qemu_binary):
|
||||||
|
|
||||||
|
os.environ["DISPLAY"] = "0:0"
|
||||||
|
with patch("gns3server.modules.qemu.qemu_vm.QemuVM._get_random_mac", return_value="00:00:ab:7e:b5:00"):
|
||||||
|
with asyncio_patch("asyncio.create_subprocess_exec", return_value=MagicMock()) as process:
|
||||||
|
cmd = loop.run_until_complete(asyncio.async(vm._build_command()))
|
||||||
|
assert cmd == [
|
||||||
|
fake_qemu_binary,
|
||||||
|
"-name",
|
||||||
|
"test",
|
||||||
|
"-m",
|
||||||
|
"256",
|
||||||
|
"-hda",
|
||||||
|
os.path.join(vm.working_dir, "flash.qcow2"),
|
||||||
|
"-serial",
|
||||||
|
"telnet:0.0.0.0:{},server,nowait".format(vm.console),
|
||||||
|
"-monitor",
|
||||||
|
"telnet:0.0.0.0:{},server,nowait".format(vm.monitor),
|
||||||
|
"-net",
|
||||||
|
"nic,vlan=0,macaddr=00:00:ab:7e:b5:00,model=e1000",
|
||||||
|
"-net",
|
||||||
|
"user,vlan=0,name=gns3-0"
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def test_build_command_without_display(vm, loop, fake_qemu_binary):
|
||||||
|
|
||||||
|
os.environ["DISPLAY"] = ""
|
||||||
|
with asyncio_patch("asyncio.create_subprocess_exec", return_value=MagicMock()) as process:
|
||||||
|
cmd = loop.run_until_complete(asyncio.async(vm._build_command()))
|
||||||
|
assert "-nographic" in cmd
|
||||||
|
Loading…
Reference in New Issue
Block a user