Don't create directory structure during json dump. Fixes #2270

pull/1185/head
ziajka 7 years ago
parent 2a4ed9ba89
commit 3d85bba9d4

@ -233,6 +233,14 @@ class BaseNode:
return self._project.node_working_directory(self)
@property
def working_path(self):
"""
Return the node working path. Doesn't create structure of directories when not present.
"""
return self._project.node_working_path(self)
@property
def temporary_directory(self):
if self._temporary_directory is None:

@ -86,7 +86,7 @@ class Cloud(BaseNode):
"ports_mapping": self._ports_mapping,
"interfaces": host_interfaces,
"status": self.status,
"node_directory": self.working_dir
"node_directory": self.working_path
}
@property

@ -114,7 +114,7 @@ class DockerVM(BaseNode):
"start_command": self.start_command,
"status": self.status,
"environment": self.environment,
"node_directory": self.working_dir
"node_directory": self.working_path
}
def _get_free_display_port(self):

@ -194,7 +194,7 @@ class IOUVM(BaseNode):
iou_vm_info = {"name": self.name,
"node_id": self.id,
"node_directory": self.working_dir,
"node_directory": self.working_path,
"console": self._console,
"console_type": "telnet",
"status": self.status,

@ -207,7 +207,7 @@ class Project:
:returns: Node working directory
"""
workdir = os.path.join(self._path, "project-files", node.manager.module_name.lower(), node.id)
workdir = self.node_working_path(node)
if not self._deleted:
try:
os.makedirs(workdir, exist_ok=True)
@ -215,6 +215,15 @@ class Project:
raise aiohttp.web.HTTPInternalServerError(text="Could not create the node working directory: {}".format(e))
return workdir
def node_working_path(self, node):
"""
Returns a node working path for node. It doesn't create structure if not present on system.
:param node: Node instance
:return: Node working path
"""
return os.path.join(self._path, "project-files", node.manager.module_name.lower(), node.id)
def tmp_working_directory(self):
"""
A temporary directory. Will be clean at project open and close

@ -1626,7 +1626,7 @@ class QemuVM(BaseNode):
answer = {
"project_id": self.project.id,
"node_id": self.id,
"node_directory": self.working_dir
"node_directory": self.working_path
}
# Qemu has a long list of options. The JSON schema is the single source of information
for field in QEMU_OBJECT_SCHEMA["required"]:

@ -89,7 +89,7 @@ class VirtualBoxVM(BaseNode):
"use_any_adapter": self.use_any_adapter,
"linked_clone": self.linked_clone}
if self.linked_clone:
json["node_directory"] = self.working_dir
json["node_directory"] = self.working_path
else:
json["node_directory"] = None
return json

@ -86,7 +86,7 @@ class VMwareVM(BaseNode):
"adapter_type": self.adapter_type,
"use_any_adapter": self.use_any_adapter,
"status": self.status,
"node_directory": self.working_dir,
"node_directory": self.working_path,
"linked_clone": self.linked_clone}
return json

@ -127,7 +127,7 @@ class VPCSVM(BaseNode):
return {"name": self.name,
"node_id": self.id,
"node_directory": self.working_dir,
"node_directory": self.working_path,
"status": self.status,
"console": self._console,
"console_type": "telnet",

@ -106,6 +106,16 @@ def test_node_working_directory(tmpdir, node):
assert os.path.exists(p.node_working_directory(node))
def test_node_working_path(tmpdir, node):
directory = Config.instance().get_section_config("Server").get("projects_path")
with patch("gns3server.compute.project.Project.is_local", return_value=True):
p = Project(project_id=str(uuid4()))
assert p.node_working_path(node) == os.path.join(directory, p.id, 'project-files', node.module_name, node.id)
# after this execution directory structure should not be created
assert not os.path.exists(p.node_working_path(node))
def test_project_delete(loop):
project = Project(project_id=str(uuid4()))
directory = project.path

Loading…
Cancel
Save