mirror of
https://github.com/GNS3/gns3-server.git
synced 2026-11-03 14:01:15 +02:00
Change node_id when I save as
Fix https://github.com/GNS3/gns3-gui/issues/1519
This commit is contained in:
2 files changed
+127
No files matched your search
@@ -111,6 +111,26 @@ def import_project(controller, project_id, stream, location=None, name=None, kee
|
||||
|
||||
yield from _move_files_to_compute(compute, project_id, path, os.path.join("project-files", node["node_type"], node["node_id"]))
|
||||
|
||||
# Generate a new node id
|
||||
node_old_to_new = {}
|
||||
for node in topology["topology"]["nodes"]:
|
||||
if "node_id" in node:
|
||||
node_old_to_new[node["node_id"]] = str(uuid.uuid4())
|
||||
_move_node_file(path, node["node_id"], node_old_to_new[node["node_id"]])
|
||||
node["node_id"] = node_old_to_new[node["node_id"]]
|
||||
else:
|
||||
node["node_id"] = str(uuid.uuid4())
|
||||
|
||||
# Update link to use new id
|
||||
for link in topology["topology"]["links"]:
|
||||
link["link_id"] = str(uuid.uuid4())
|
||||
for node in link["nodes"]:
|
||||
node["node_id"] = node_old_to_new[node["node_id"]]
|
||||
|
||||
# Generate new drawings id
|
||||
for drawing in topology["topology"]["drawings"]:
|
||||
drawing["drawing_id"] = str(uuid.uuid4())
|
||||
|
||||
# And we dump the updated.gns3
|
||||
dot_gns3_path = os.path.join(path, project_name + ".gns3")
|
||||
# We change the project_id to avoid erasing the project
|
||||
@@ -126,6 +146,24 @@ def import_project(controller, project_id, stream, location=None, name=None, kee
|
||||
return project
|
||||
|
||||
|
||||
def _move_node_file(path, old_id, new_id):
|
||||
"""
|
||||
Move the files from a node when changing his id
|
||||
|
||||
:param path: Path of the project
|
||||
:param old_id: ID before change
|
||||
:param new_id: New node UUID
|
||||
"""
|
||||
root = os.path.join(path, "project-files")
|
||||
if os.path.exists(root):
|
||||
for dirname in os.listdir(root):
|
||||
module_dir = os.path.join(root, dirname)
|
||||
if os.path.isdir(module_dir):
|
||||
node_dir = os.path.join(module_dir, old_id)
|
||||
if os.path.exists(node_dir):
|
||||
shutil.move(node_dir, os.path.join(module_dir, new_id))
|
||||
|
||||
|
||||
@asyncio.coroutine
|
||||
def _move_files_to_compute(compute, project_id, directory, files_path):
|
||||
"""
|
||||
|
||||
Reference in new issue
Block a user