mirror of
https://github.com/GNS3/gns3-server
synced 2024-11-24 17:28:08 +00:00
Backport: option to drop nvram & disk files for IOS routers in order to save disk space.
This commit is contained in:
parent
f1bbacecd6
commit
2655d426c2
@ -171,8 +171,11 @@ class Dynamips(BaseManager):
|
|||||||
files = glob.glob(os.path.join(project_dir, "*.ghost"))
|
files = glob.glob(os.path.join(project_dir, "*.ghost"))
|
||||||
files += glob.glob(os.path.join(project_dir, "*_lock"))
|
files += glob.glob(os.path.join(project_dir, "*_lock"))
|
||||||
files += glob.glob(os.path.join(project_dir, "ilt_*"))
|
files += glob.glob(os.path.join(project_dir, "ilt_*"))
|
||||||
files += glob.glob(os.path.join(project_dir, "c[0-9][0-9][0-9][0-9]_*_rommon_vars"))
|
files += glob.glob(os.path.join(project_dir, "c[0-9][0-9][0-9][0-9]_i[0-9]*_rommon_vars"))
|
||||||
files += glob.glob(os.path.join(project_dir, "c[0-9][0-9][0-9][0-9]_*_ssa"))
|
files += glob.glob(os.path.join(project_dir, "c[0-9][0-9][0-9][0-9]_i[0-9]*_ssa"))
|
||||||
|
files += glob.glob(os.path.join(project_dir, "c[0-9][0-9][0-9][0-9]_i[0-9]*_log.txt"))
|
||||||
|
files += glob.glob(os.path.join(project_dir, "c[0-9][0-9][0-9][0-9]_i[0-9]*_rom"))
|
||||||
|
files += glob.glob(os.path.join(project_dir, "c[0-9][0-9][0-9][0-9]_i[0-9]*_bootflash"))
|
||||||
for file in files:
|
for file in files:
|
||||||
try:
|
try:
|
||||||
log.debug("Deleting file {}".format(file))
|
log.debug("Deleting file {}".format(file))
|
||||||
|
@ -87,6 +87,7 @@ class Router(BaseVM):
|
|||||||
self._exec_area = 64 # 64 MB on other systems
|
self._exec_area = 64 # 64 MB on other systems
|
||||||
self._disk0 = 0 # Megabytes
|
self._disk0 = 0 # Megabytes
|
||||||
self._disk1 = 0 # Megabytes
|
self._disk1 = 0 # Megabytes
|
||||||
|
self._auto_delete_disks = False
|
||||||
self._aux = aux
|
self._aux = aux
|
||||||
self._mac_addr = ""
|
self._mac_addr = ""
|
||||||
self._system_id = "FTX0945W0MY" # processor board ID in IOS
|
self._system_id = "FTX0945W0MY" # processor board ID in IOS
|
||||||
@ -145,6 +146,7 @@ class Router(BaseVM):
|
|||||||
"exec_area": self._exec_area,
|
"exec_area": self._exec_area,
|
||||||
"disk0": self._disk0,
|
"disk0": self._disk0,
|
||||||
"disk1": self._disk1,
|
"disk1": self._disk1,
|
||||||
|
"auto_delete_disks": self._auto_delete_disks,
|
||||||
"console": self._console,
|
"console": self._console,
|
||||||
"aux": self._aux,
|
"aux": self._aux,
|
||||||
"mac_addr": self._mac_addr,
|
"mac_addr": self._mac_addr,
|
||||||
@ -182,6 +184,16 @@ class Router(BaseVM):
|
|||||||
@asyncio.coroutine
|
@asyncio.coroutine
|
||||||
def create(self):
|
def create(self):
|
||||||
|
|
||||||
|
# delete any previous file with same Dynamips identifier
|
||||||
|
project_dir = os.path.join(self.project.module_working_directory(self.manager.module_name.lower()))
|
||||||
|
for file in glob.glob(os.path.join(project_dir, "c[0-9][0-9][0-9][0-9]_i{}_*".format(self._dynamips_id))):
|
||||||
|
try:
|
||||||
|
log.debug("Deleting file {}".format(file))
|
||||||
|
yield from wait_run_in_executor(os.remove, file)
|
||||||
|
except OSError as e:
|
||||||
|
log.warn("Could not delete file {}: {}".format(file, e))
|
||||||
|
continue
|
||||||
|
|
||||||
if not self._hypervisor:
|
if not self._hypervisor:
|
||||||
module_workdir = self.project.module_working_directory(self.manager.module_name.lower())
|
module_workdir = self.project.module_working_directory(self.manager.module_name.lower())
|
||||||
self._hypervisor = yield from self.manager.start_new_hypervisor(working_dir=module_workdir)
|
self._hypervisor = yield from self.manager.start_new_hypervisor(working_dir=module_workdir)
|
||||||
@ -342,6 +354,20 @@ class Router(BaseVM):
|
|||||||
pass
|
pass
|
||||||
yield from self.hypervisor.stop()
|
yield from self.hypervisor.stop()
|
||||||
|
|
||||||
|
if self._auto_delete_disks:
|
||||||
|
# delete nvram and disk files
|
||||||
|
project_dir = os.path.join(self.project.module_working_directory(self.manager.module_name.lower()))
|
||||||
|
files = glob.glob(os.path.join(project_dir, "{}_i{}_disk[0-1]".format(self.platform, self.dynamips_id)))
|
||||||
|
files += glob.glob(os.path.join(project_dir, "{}_i{}_slot[0-1]".format(self.platform, self.dynamips_id)))
|
||||||
|
files += glob.glob(os.path.join(project_dir, "{}_i{}_nvram".format(self.platform, self.dynamips_id)))
|
||||||
|
files += glob.glob(os.path.join(project_dir, "{}_i{}_flash[0-1]".format(self.platform, self.dynamips_id)))
|
||||||
|
for file in files:
|
||||||
|
try:
|
||||||
|
log.debug("Deleting file {}".format(file))
|
||||||
|
yield from wait_run_in_executor(os.remove, file)
|
||||||
|
except OSError as e:
|
||||||
|
log.warn("Could not delete file {}: {}".format(file, e))
|
||||||
|
continue
|
||||||
self._closed = True
|
self._closed = True
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -851,6 +877,30 @@ class Router(BaseVM):
|
|||||||
new_disk1=disk1))
|
new_disk1=disk1))
|
||||||
self._disk1 = disk1
|
self._disk1 = disk1
|
||||||
|
|
||||||
|
@property
|
||||||
|
def auto_delete_disks(self):
|
||||||
|
"""
|
||||||
|
Returns True if auto delete disks is enabled on this router.
|
||||||
|
|
||||||
|
:returns: boolean either auto delete disks is activated or not
|
||||||
|
"""
|
||||||
|
|
||||||
|
return self._auto_delete_disks
|
||||||
|
|
||||||
|
@asyncio.coroutine
|
||||||
|
def set_auto_delete_disks(self, auto_delete_disks):
|
||||||
|
"""
|
||||||
|
Enable/disable use of auto delete disks
|
||||||
|
|
||||||
|
:param auto_delete_disks: activate/deactivate auto delete disks (boolean)
|
||||||
|
"""
|
||||||
|
|
||||||
|
if auto_delete_disks:
|
||||||
|
log.info('Router "{name}" [{id}]: auto delete disks enabled'.format(name=self._name, id=self._id))
|
||||||
|
else:
|
||||||
|
log.info('Router "{name}" [{id}]: auto delete disks disabled'.format(name=self._name, id=self._id))
|
||||||
|
self._auto_delete_disks = auto_delete_disks
|
||||||
|
|
||||||
@asyncio.coroutine
|
@asyncio.coroutine
|
||||||
def set_console(self, console):
|
def set_console(self, console):
|
||||||
"""
|
"""
|
||||||
|
@ -120,6 +120,10 @@ VM_CREATE_SCHEMA = {
|
|||||||
"description": "disk1 size in MB",
|
"description": "disk1 size in MB",
|
||||||
"type": "integer"
|
"type": "integer"
|
||||||
},
|
},
|
||||||
|
"auto_delete_disks": {
|
||||||
|
"description": "automatically delete nvram and disk files",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
"console": {
|
"console": {
|
||||||
"description": "console TCP port",
|
"description": "console TCP port",
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
@ -337,6 +341,10 @@ VM_UPDATE_SCHEMA = {
|
|||||||
"description": "disk1 size in MB",
|
"description": "disk1 size in MB",
|
||||||
"type": "integer"
|
"type": "integer"
|
||||||
},
|
},
|
||||||
|
"auto_delete_disks": {
|
||||||
|
"description": "automatically delete nvram and disk files",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
"console": {
|
"console": {
|
||||||
"description": "console TCP port",
|
"description": "console TCP port",
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
@ -591,6 +599,10 @@ VM_OBJECT_SCHEMA = {
|
|||||||
"description": "disk1 size in MB",
|
"description": "disk1 size in MB",
|
||||||
"type": "integer"
|
"type": "integer"
|
||||||
},
|
},
|
||||||
|
"auto_delete_disks": {
|
||||||
|
"description": "automatically delete nvram and disk files",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
"console": {
|
"console": {
|
||||||
"description": "console TCP port",
|
"description": "console TCP port",
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
|
Loading…
Reference in New Issue
Block a user