mirror of
https://github.com/GNS3/gns3-server
synced 2024-11-24 17:28:08 +00:00
Relative path support of IOU, IOS and Qemu images.
This commit is contained in:
parent
c41bec0516
commit
aebcd9f08b
@ -44,7 +44,6 @@ from .hypervisor import Hypervisor
|
|||||||
from .nodes.router import Router
|
from .nodes.router import Router
|
||||||
from .dynamips_vm import DynamipsVM
|
from .dynamips_vm import DynamipsVM
|
||||||
from .dynamips_device import DynamipsDevice
|
from .dynamips_device import DynamipsDevice
|
||||||
from gns3server.config import Config
|
|
||||||
|
|
||||||
# NIOs
|
# NIOs
|
||||||
from .nios.nio_udp import NIOUDP
|
from .nios.nio_udp import NIOUDP
|
||||||
@ -312,7 +311,7 @@ class Dynamips(BaseManager):
|
|||||||
|
|
||||||
# FIXME: hypervisor should always listen to 127.0.0.1
|
# FIXME: hypervisor should always listen to 127.0.0.1
|
||||||
# See https://github.com/GNS3/dynamips/issues/62
|
# See https://github.com/GNS3/dynamips/issues/62
|
||||||
server_config = Config.instance().get_section_config("Server")
|
server_config = self.config.get_section_config("Server")
|
||||||
server_host = server_config.get("host")
|
server_host = server_config.get("host")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -34,7 +34,6 @@ from ...base_vm import BaseVM
|
|||||||
from ..dynamips_error import DynamipsError
|
from ..dynamips_error import DynamipsError
|
||||||
from ..nios.nio_udp import NIOUDP
|
from ..nios.nio_udp import NIOUDP
|
||||||
|
|
||||||
from gns3server.config import Config
|
|
||||||
from gns3server.utils.asyncio import wait_run_in_executor
|
from gns3server.utils.asyncio import wait_run_in_executor
|
||||||
|
|
||||||
|
|
||||||
@ -152,6 +151,12 @@ class Router(BaseVM):
|
|||||||
"mac_addr": self._mac_addr,
|
"mac_addr": self._mac_addr,
|
||||||
"system_id": self._system_id}
|
"system_id": self._system_id}
|
||||||
|
|
||||||
|
# return the relative path if the IOS image is in the images_path directory
|
||||||
|
server_config = self.manager.config.get_section_config("Server")
|
||||||
|
relative_image = os.path.join(os.path.expanduser(server_config.get("images_path", "~/GNS3/images")), "IOS", self._image)
|
||||||
|
if os.path.exists(relative_image):
|
||||||
|
router_info["image"] = os.path.basename(self._image)
|
||||||
|
|
||||||
# add the slots
|
# add the slots
|
||||||
slot_number = 0
|
slot_number = 0
|
||||||
for slot in self._slots:
|
for slot in self._slots:
|
||||||
@ -422,7 +427,7 @@ class Router(BaseVM):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
if not os.path.isabs(image):
|
if not os.path.isabs(image):
|
||||||
server_config = Config.instance().get_section_config("Server")
|
server_config = self.manager.config.get_section_config("Server")
|
||||||
image = os.path.join(os.path.expanduser(server_config.get("images_path", "~/GNS3/images")), "IOS", image)
|
image = os.path.join(os.path.expanduser(server_config.get("images_path", "~/GNS3/images")), "IOS", image)
|
||||||
|
|
||||||
if not os.path.isfile(image):
|
if not os.path.isfile(image):
|
||||||
|
@ -39,7 +39,6 @@ from ..nios.nio_tap import NIOTAP
|
|||||||
from ..nios.nio_generic_ethernet import NIOGenericEthernet
|
from ..nios.nio_generic_ethernet import NIOGenericEthernet
|
||||||
from ..base_vm import BaseVM
|
from ..base_vm import BaseVM
|
||||||
from .ioucon import start_ioucon
|
from .ioucon import start_ioucon
|
||||||
from ...config import Config
|
|
||||||
import gns3server.utils.asyncio
|
import gns3server.utils.asyncio
|
||||||
|
|
||||||
|
|
||||||
@ -132,7 +131,7 @@ class IOUVM(BaseVM):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
if not os.path.isabs(path):
|
if not os.path.isabs(path):
|
||||||
server_config = Config.instance().get_section_config("Server")
|
server_config = self.manager.config.get_section_config("Server")
|
||||||
path = os.path.join(os.path.expanduser(server_config.get("images_path", "~/GNS3/images")), "IOU", path)
|
path = os.path.join(os.path.expanduser(server_config.get("images_path", "~/GNS3/images")), "IOU", path)
|
||||||
|
|
||||||
self._path = path
|
self._path = path
|
||||||
@ -195,19 +194,26 @@ class IOUVM(BaseVM):
|
|||||||
|
|
||||||
def __json__(self):
|
def __json__(self):
|
||||||
|
|
||||||
return {"name": self.name,
|
iou_vm_info = {"name": self.name,
|
||||||
"vm_id": self.id,
|
"vm_id": self.id,
|
||||||
"console": self._console,
|
"console": self._console,
|
||||||
"project_id": self.project.id,
|
"project_id": self.project.id,
|
||||||
"path": self.path,
|
"path": self.path,
|
||||||
"ethernet_adapters": len(self._ethernet_adapters),
|
"ethernet_adapters": len(self._ethernet_adapters),
|
||||||
"serial_adapters": len(self._serial_adapters),
|
"serial_adapters": len(self._serial_adapters),
|
||||||
"ram": self._ram,
|
"ram": self._ram,
|
||||||
"nvram": self._nvram,
|
"nvram": self._nvram,
|
||||||
"l1_keepalives": self._l1_keepalives,
|
"l1_keepalives": self._l1_keepalives,
|
||||||
"initial_config": self.relative_initial_config_file,
|
"initial_config": self.relative_initial_config_file,
|
||||||
"use_default_iou_values": self._use_default_iou_values
|
"use_default_iou_values": self._use_default_iou_values}
|
||||||
}
|
|
||||||
|
# return the relative path if the IOU image is in the images_path directory
|
||||||
|
server_config = self.manager.config.get_section_config("Server")
|
||||||
|
relative_image = os.path.join(os.path.expanduser(server_config.get("images_path", "~/GNS3/images")), "IOU", self.path)
|
||||||
|
if os.path.exists(relative_image):
|
||||||
|
iou_vm_info["path"] = os.path.basename(self.path)
|
||||||
|
|
||||||
|
return iou_vm_info
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def iouyap_path(self):
|
def iouyap_path(self):
|
||||||
|
@ -32,7 +32,6 @@ from ..adapters.ethernet_adapter import EthernetAdapter
|
|||||||
from ..nios.nio_udp import NIOUDP
|
from ..nios.nio_udp import NIOUDP
|
||||||
from ..base_vm import BaseVM
|
from ..base_vm import BaseVM
|
||||||
from ...schemas.qemu import QEMU_OBJECT_SCHEMA
|
from ...schemas.qemu import QEMU_OBJECT_SCHEMA
|
||||||
from ...config import Config
|
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
@ -185,8 +184,8 @@ class QemuVM(BaseVM):
|
|||||||
:param hda_disk_image: QEMU hda disk image path
|
:param hda_disk_image: QEMU hda disk image path
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if os.path.isabs(hda_disk_image):
|
if not os.path.isabs(hda_disk_image):
|
||||||
server_config = Config.instance().get_section_config("Server")
|
server_config = self.manager.config.get_section_config("Server")
|
||||||
hda_disk_image = os.path.join(os.path.expanduser(server_config.get("images_path", "~/GNS3/images")), "QEMU", hda_disk_image)
|
hda_disk_image = os.path.join(os.path.expanduser(server_config.get("images_path", "~/GNS3/images")), "QEMU", hda_disk_image)
|
||||||
|
|
||||||
log.info("QEMU VM {name} [id={id}] has set the QEMU hda disk image path to {disk_image}".format(name=self._name,
|
log.info("QEMU VM {name} [id={id}] has set the QEMU hda disk image path to {disk_image}".format(name=self._name,
|
||||||
@ -213,7 +212,7 @@ class QemuVM(BaseVM):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
if not os.path.isabs(hdb_disk_image):
|
if not os.path.isabs(hdb_disk_image):
|
||||||
server_config = Config.instance().get_section_config("Server")
|
server_config = self.manager.config.get_section_config("Server")
|
||||||
hdb_disk_image = os.path.join(os.path.expanduser(server_config.get("images_path", "~/GNS3/images")), "QEMU", hdb_disk_image)
|
hdb_disk_image = os.path.join(os.path.expanduser(server_config.get("images_path", "~/GNS3/images")), "QEMU", hdb_disk_image)
|
||||||
|
|
||||||
log.info("QEMU VM {name} [id={id}] has set the QEMU hdb disk image path to {disk_image}".format(name=self._name,
|
log.info("QEMU VM {name} [id={id}] has set the QEMU hdb disk image path to {disk_image}".format(name=self._name,
|
||||||
@ -239,8 +238,8 @@ class QemuVM(BaseVM):
|
|||||||
:param hdc_disk_image: QEMU hdc disk image path
|
:param hdc_disk_image: QEMU hdc disk image path
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if os.path.isabs(hdc_disk_image):
|
if not os.path.isabs(hdc_disk_image):
|
||||||
server_config = Config.instance().get_section_config("Server")
|
server_config = self.manager.config.get_section_config("Server")
|
||||||
hdc_disk_image = os.path.join(os.path.expanduser(server_config.get("images_path", "~/GNS3/images")), "QEMU", hdc_disk_image)
|
hdc_disk_image = os.path.join(os.path.expanduser(server_config.get("images_path", "~/GNS3/images")), "QEMU", hdc_disk_image)
|
||||||
|
|
||||||
log.info("QEMU VM {name} [id={id}] has set the QEMU hdc disk image path to {disk_image}".format(name=self._name,
|
log.info("QEMU VM {name} [id={id}] has set the QEMU hdc disk image path to {disk_image}".format(name=self._name,
|
||||||
@ -266,8 +265,8 @@ class QemuVM(BaseVM):
|
|||||||
:param hdd_disk_image: QEMU hdd disk image path
|
:param hdd_disk_image: QEMU hdd disk image path
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if os.path.isabs(hdd_disk_image):
|
if not os.path.isabs(hdd_disk_image):
|
||||||
server_config = Config.instance().get_section_config("Server")
|
server_config = self.manager.config.get_section_config("Server")
|
||||||
hdd_disk_image = os.path.join(os.path.expanduser(server_config.get("images_path", "~/GNS3/images")), "QEMU", hdd_disk_image)
|
hdd_disk_image = os.path.join(os.path.expanduser(server_config.get("images_path", "~/GNS3/images")), "QEMU", hdd_disk_image)
|
||||||
|
|
||||||
log.info("QEMU VM {name} [id={id}] has set the QEMU hdd disk image path to {disk_image}".format(name=self._name,
|
log.info("QEMU VM {name} [id={id}] has set the QEMU hdd disk image path to {disk_image}".format(name=self._name,
|
||||||
@ -461,8 +460,8 @@ class QemuVM(BaseVM):
|
|||||||
:param initrd: QEMU initrd path
|
:param initrd: QEMU initrd path
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if os.path.isabs(initrd):
|
if not os.path.isabs(initrd):
|
||||||
server_config = Config.instance().get_section_config("Server")
|
server_config = self.manager.config.get_section_config("Server")
|
||||||
initrd = os.path.join(os.path.expanduser(server_config.get("images_path", "~/GNS3/images")), "QEMU", initrd)
|
initrd = os.path.join(os.path.expanduser(server_config.get("images_path", "~/GNS3/images")), "QEMU", initrd)
|
||||||
|
|
||||||
log.info("QEMU VM {name} [id={id}] has set the QEMU initrd path to {initrd}".format(name=self._name,
|
log.info("QEMU VM {name} [id={id}] has set the QEMU initrd path to {initrd}".format(name=self._name,
|
||||||
@ -488,8 +487,8 @@ class QemuVM(BaseVM):
|
|||||||
:param kernel_image: QEMU kernel image path
|
:param kernel_image: QEMU kernel image path
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if os.path.isabs(kernel_image):
|
if not os.path.isabs(kernel_image):
|
||||||
server_config = Config.instance().get_section_config("Server")
|
server_config = self.manager.config.get_section_config("Server")
|
||||||
kernel_image = os.path.join(os.path.expanduser(server_config.get("images_path", "~/GNS3/images")), "QEMU", kernel_image)
|
kernel_image = os.path.join(os.path.expanduser(server_config.get("images_path", "~/GNS3/images")), "QEMU", kernel_image)
|
||||||
|
|
||||||
log.info("QEMU VM {name} [id={id}] has set the QEMU kernel image path to {kernel_image}".format(name=self._name,
|
log.info("QEMU VM {name} [id={id}] has set the QEMU kernel image path to {kernel_image}".format(name=self._name,
|
||||||
@ -1079,6 +1078,23 @@ class QemuVM(BaseVM):
|
|||||||
command.extend(self._graphic())
|
command.extend(self._graphic())
|
||||||
return command
|
return command
|
||||||
|
|
||||||
|
def _get_relative_disk_image_path(self, disk_image):
|
||||||
|
"""
|
||||||
|
Returns a relative image path if the disk image is in the images directory.
|
||||||
|
|
||||||
|
:param disk_image: path to the disk image
|
||||||
|
|
||||||
|
:returns: relative or full path
|
||||||
|
"""
|
||||||
|
|
||||||
|
if disk_image:
|
||||||
|
# return the relative path if disks images are in the images_path directory
|
||||||
|
server_config = self.manager.config.get_section_config("Server")
|
||||||
|
relative_image = os.path.join(os.path.expanduser(server_config.get("images_path", "~/GNS3/images")), "QEMU", disk_image)
|
||||||
|
if os.path.exists(relative_image):
|
||||||
|
return os.path.basename(disk_image)
|
||||||
|
return disk_image
|
||||||
|
|
||||||
def __json__(self):
|
def __json__(self):
|
||||||
answer = {
|
answer = {
|
||||||
"project_id": self.project.id,
|
"project_id": self.project.id,
|
||||||
@ -1088,4 +1104,12 @@ class QemuVM(BaseVM):
|
|||||||
for field in QEMU_OBJECT_SCHEMA["required"]:
|
for field in QEMU_OBJECT_SCHEMA["required"]:
|
||||||
if field not in answer:
|
if field not in answer:
|
||||||
answer[field] = getattr(self, field)
|
answer[field] = getattr(self, field)
|
||||||
|
|
||||||
|
answer["hda_disk_image"] = self._get_relative_disk_image_path(self._hda_disk_image)
|
||||||
|
answer["hdb_disk_image"] = self._get_relative_disk_image_path(self._hdb_disk_image)
|
||||||
|
answer["hdc_disk_image"] = self._get_relative_disk_image_path(self._hdc_disk_image)
|
||||||
|
answer["hdd_disk_image"] = self._get_relative_disk_image_path(self._hdd_disk_image)
|
||||||
|
answer["initrd"] = self._get_relative_disk_image_path(self._initrd)
|
||||||
|
answer["kernel_image"] = self._get_relative_disk_image_path(self._kernel_image)
|
||||||
|
|
||||||
return answer
|
return answer
|
||||||
|
Loading…
Reference in New Issue
Block a user