mirror of
https://github.com/GNS3/gns3-server
synced 2024-11-28 11:18:11 +00:00
Add support for bios images
Ref https://github.com/GNS3/gns3-gui/issues/1700
This commit is contained in:
parent
bd1560ae50
commit
5ba5c62670
@ -99,6 +99,7 @@ class QemuVM(BaseNode):
|
|||||||
self._hdc_disk_interface = "ide"
|
self._hdc_disk_interface = "ide"
|
||||||
self._hdd_disk_interface = "ide"
|
self._hdd_disk_interface = "ide"
|
||||||
self._cdrom_image = ""
|
self._cdrom_image = ""
|
||||||
|
self._bios_image = ""
|
||||||
self._boot_priority = "c"
|
self._boot_priority = "c"
|
||||||
self._mac_address = ""
|
self._mac_address = ""
|
||||||
self._options = ""
|
self._options = ""
|
||||||
@ -407,6 +408,28 @@ class QemuVM(BaseNode):
|
|||||||
id=self._id,
|
id=self._id,
|
||||||
cdrom_image=self._cdrom_image))
|
cdrom_image=self._cdrom_image))
|
||||||
|
|
||||||
|
@property
|
||||||
|
def bios_image(self):
|
||||||
|
"""
|
||||||
|
Returns the bios image path for this QEMU VM.
|
||||||
|
|
||||||
|
:returns: QEMU bios image path
|
||||||
|
"""
|
||||||
|
|
||||||
|
return self._bios_image
|
||||||
|
|
||||||
|
@bios_image.setter
|
||||||
|
def bios_image(self, bios_image):
|
||||||
|
"""
|
||||||
|
Sets the bios image for this QEMU VM.
|
||||||
|
|
||||||
|
:param bios_image: QEMU bios image path
|
||||||
|
"""
|
||||||
|
self._bios_image = self.manager.get_abs_image_path(bios_image)
|
||||||
|
log.info('QEMU VM "{name}" [{id}] has set the QEMU bios image path to {bios_image}'.format(name=self._name,
|
||||||
|
id=self._id,
|
||||||
|
bios_image=self._bios_image))
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def boot_priority(self):
|
def boot_priority(self):
|
||||||
"""
|
"""
|
||||||
@ -1361,6 +1384,18 @@ class QemuVM(BaseNode):
|
|||||||
options.extend(["-cdrom", self._cdrom_image])
|
options.extend(["-cdrom", self._cdrom_image])
|
||||||
return options
|
return options
|
||||||
|
|
||||||
|
def _bios_option(self):
|
||||||
|
|
||||||
|
options = []
|
||||||
|
if self._bios_image:
|
||||||
|
if not os.path.isfile(self._bios_image) or not os.path.exists(self._bios_image):
|
||||||
|
if os.path.islink(self._bios_image):
|
||||||
|
raise QemuError("bios image '{}' linked to '{}' is not accessible".format(self._bios_image, os.path.realpath(self._bios_image)))
|
||||||
|
else:
|
||||||
|
raise QemuError("bios image '{}' is not accessible".format(self._bios_image))
|
||||||
|
options.extend(["-bios", self._bios_image])
|
||||||
|
return options
|
||||||
|
|
||||||
def _linux_boot_options(self):
|
def _linux_boot_options(self):
|
||||||
|
|
||||||
options = []
|
options = []
|
||||||
@ -1500,8 +1535,8 @@ class QemuVM(BaseNode):
|
|||||||
if version and parse_version(version) >= parse_version("2.4.0") and self.platform == "x86_64":
|
if version and parse_version(version) >= parse_version("2.4.0") and self.platform == "x86_64":
|
||||||
command.extend(["-machine", "smm=off"])
|
command.extend(["-machine", "smm=off"])
|
||||||
command.extend(["-boot", "order={}".format(self._boot_priority)])
|
command.extend(["-boot", "order={}".format(self._boot_priority)])
|
||||||
cdrom_option = self._cdrom_option()
|
command.extend(self._bios_option())
|
||||||
command.extend(cdrom_option)
|
command.extend(self._cdrom_option())
|
||||||
command.extend((yield from self._disk_options()))
|
command.extend((yield from self._disk_options()))
|
||||||
command.extend(self._linux_boot_options())
|
command.extend(self._linux_boot_options())
|
||||||
if "-uuid" not in additional_options:
|
if "-uuid" not in additional_options:
|
||||||
@ -1545,6 +1580,8 @@ class QemuVM(BaseNode):
|
|||||||
answer["hdd_disk_image_md5sum"] = md5sum(self._hdd_disk_image)
|
answer["hdd_disk_image_md5sum"] = md5sum(self._hdd_disk_image)
|
||||||
answer["cdrom_image"] = self.manager.get_relative_image_path(self._cdrom_image)
|
answer["cdrom_image"] = self.manager.get_relative_image_path(self._cdrom_image)
|
||||||
answer["cdrom_image_md5sum"] = md5sum(self._cdrom_image)
|
answer["cdrom_image_md5sum"] = md5sum(self._cdrom_image)
|
||||||
|
answer["bios_image"] = self.manager.get_relative_image_path(self._bios_image)
|
||||||
|
answer["bios_image_md5sum"] = md5sum(self._bios_image)
|
||||||
answer["initrd"] = self.manager.get_relative_image_path(self._initrd)
|
answer["initrd"] = self.manager.get_relative_image_path(self._initrd)
|
||||||
answer["initrd_md5sum"] = md5sum(self._initrd)
|
answer["initrd_md5sum"] = md5sum(self._initrd)
|
||||||
|
|
||||||
|
@ -121,6 +121,14 @@ QEMU_CREATE_SCHEMA = {
|
|||||||
"description": "QEMU cdrom image checksum",
|
"description": "QEMU cdrom image checksum",
|
||||||
"type": ["string", "null"],
|
"type": ["string", "null"],
|
||||||
},
|
},
|
||||||
|
"bios_image": {
|
||||||
|
"description": "QEMU bios image path",
|
||||||
|
"type": "string",
|
||||||
|
},
|
||||||
|
"bios_image_md5sum": {
|
||||||
|
"description": "QEMU bios image checksum",
|
||||||
|
"type": ["string", "null"],
|
||||||
|
},
|
||||||
"boot_priority": {
|
"boot_priority": {
|
||||||
"description": "QEMU boot priority",
|
"description": "QEMU boot priority",
|
||||||
"enum": ["c", "d", "n", "cn", "cd"]
|
"enum": ["c", "d", "n", "cn", "cd"]
|
||||||
@ -290,6 +298,14 @@ QEMU_UPDATE_SCHEMA = {
|
|||||||
"description": "QEMU hdd disk image checksum",
|
"description": "QEMU hdd disk image checksum",
|
||||||
"type": ["string", "null"],
|
"type": ["string", "null"],
|
||||||
},
|
},
|
||||||
|
"bios_image": {
|
||||||
|
"description": "QEMU bios image path",
|
||||||
|
"type": "string",
|
||||||
|
},
|
||||||
|
"bios_image_md5sum": {
|
||||||
|
"description": "QEMU bios image checksum",
|
||||||
|
"type": ["string", "null"],
|
||||||
|
},
|
||||||
"cdrom_image": {
|
"cdrom_image": {
|
||||||
"description": "QEMU cdrom image path",
|
"description": "QEMU cdrom image path",
|
||||||
"type": "string",
|
"type": "string",
|
||||||
@ -466,6 +482,14 @@ QEMU_OBJECT_SCHEMA = {
|
|||||||
"description": "QEMU hdd disk image checksum",
|
"description": "QEMU hdd disk image checksum",
|
||||||
"type": ["string", "null"],
|
"type": ["string", "null"],
|
||||||
},
|
},
|
||||||
|
"bios_image": {
|
||||||
|
"description": "QEMU bios image path",
|
||||||
|
"type": "string",
|
||||||
|
},
|
||||||
|
"bios_image_md5sum": {
|
||||||
|
"description": "QEMU bios image checksum",
|
||||||
|
"type": ["string", "null"],
|
||||||
|
},
|
||||||
"cdrom_image": {
|
"cdrom_image": {
|
||||||
"description": "QEMU cdrom image path",
|
"description": "QEMU cdrom image path",
|
||||||
"type": "string",
|
"type": "string",
|
||||||
@ -593,6 +617,8 @@ QEMU_OBJECT_SCHEMA = {
|
|||||||
"hdd_disk_interface",
|
"hdd_disk_interface",
|
||||||
"cdrom_image",
|
"cdrom_image",
|
||||||
"cdrom_image_md5sum",
|
"cdrom_image_md5sum",
|
||||||
|
"bios_image",
|
||||||
|
"bios_image_md5sum",
|
||||||
"boot_priority",
|
"boot_priority",
|
||||||
"ram",
|
"ram",
|
||||||
"cpus",
|
"cpus",
|
||||||
|
@ -338,6 +338,26 @@ def test_disk_options(vm, tmpdir, loop, fake_qemu_img_binary):
|
|||||||
assert options == ['-drive', 'file=' + os.path.join(vm.working_dir, "hda_disk.qcow2") + ',if=ide,index=0,media=disk']
|
assert options == ['-drive', 'file=' + os.path.join(vm.working_dir, "hda_disk.qcow2") + ',if=ide,index=0,media=disk']
|
||||||
|
|
||||||
|
|
||||||
|
def test_cdrom_option(vm, tmpdir, loop, fake_qemu_img_binary):
|
||||||
|
|
||||||
|
vm._cdrom_image = str(tmpdir / "test.iso")
|
||||||
|
open(vm._cdrom_image, "w+").close()
|
||||||
|
|
||||||
|
options = loop.run_until_complete(asyncio.async(vm._build_command()))
|
||||||
|
|
||||||
|
assert ' '.join(['-cdrom', str(tmpdir / "test.iso")]) in ' '.join(options)
|
||||||
|
|
||||||
|
|
||||||
|
def test_bios_option(vm, tmpdir, loop, fake_qemu_img_binary):
|
||||||
|
|
||||||
|
vm._bios_image = str(tmpdir / "test.img")
|
||||||
|
open(vm._bios_image, "w+").close()
|
||||||
|
|
||||||
|
options = loop.run_until_complete(asyncio.async(vm._build_command()))
|
||||||
|
|
||||||
|
assert ' '.join(['-bios', str(tmpdir / "test.img")]) in ' '.join(options)
|
||||||
|
|
||||||
|
|
||||||
def test_disk_options_multiple_disk(vm, tmpdir, loop, fake_qemu_img_binary):
|
def test_disk_options_multiple_disk(vm, tmpdir, loop, fake_qemu_img_binary):
|
||||||
|
|
||||||
vm._hda_disk_image = str(tmpdir / "test0.qcow2")
|
vm._hda_disk_image = str(tmpdir / "test0.qcow2")
|
||||||
|
Loading…
Reference in New Issue
Block a user