mirror of
https://github.com/GNS3/gns3-server
synced 2024-12-26 00:38:10 +00:00
Fix configuration lost during save as on remote server
Fix https://github.com/GNS3/gns3-gui/issues/1704, https://github.com/GNS3/gns3-gui/issues/1705
This commit is contained in:
parent
5ba5c62670
commit
846041a59c
@ -85,6 +85,26 @@ def import_project(controller, project_id, stream, location=None, name=None, kee
|
|||||||
topology["auto_open"] = False
|
topology["auto_open"] = False
|
||||||
topology["auto_close"] = True
|
topology["auto_close"] = True
|
||||||
|
|
||||||
|
# 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())
|
||||||
|
|
||||||
# Modify the compute id of the node depending of compute capacity
|
# Modify the compute id of the node depending of compute capacity
|
||||||
if not keep_compute_id:
|
if not keep_compute_id:
|
||||||
# For some VM type we move them to the GNS3 VM if possible
|
# For some VM type we move them to the GNS3 VM if possible
|
||||||
@ -112,26 +132,6 @@ 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"]))
|
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
|
# And we dump the updated.gns3
|
||||||
dot_gns3_path = os.path.join(path, project_name + ".gns3")
|
dot_gns3_path = os.path.join(path, project_name + ".gns3")
|
||||||
# We change the project_id to avoid erasing the project
|
# We change the project_id to avoid erasing the project
|
||||||
|
@ -293,7 +293,6 @@ def test_import_iou_non_linux(windows_platform, async_run, tmpdir, controller):
|
|||||||
with open(zip_path, "rb") as f:
|
with open(zip_path, "rb") as f:
|
||||||
with asyncio_patch("gns3server.controller.import_project._move_files_to_compute") as mock:
|
with asyncio_patch("gns3server.controller.import_project._move_files_to_compute") as mock:
|
||||||
project = async_run(import_project(controller, project_id, f))
|
project = async_run(import_project(controller, project_id, f))
|
||||||
mock.assert_called_with(controller._computes["vm"], project_id, project.path, os.path.join('project-files', 'iou', '0fd3dd4d-dc93-4a04-a9b9-7396a9e22e8b'))
|
|
||||||
controller._computes["vm"].post.assert_called_with('/projects', data={'name': 'test', 'project_id': project_id})
|
controller._computes["vm"].post.assert_called_with('/projects', data={'name': 'test', 'project_id': project_id})
|
||||||
|
|
||||||
with open(os.path.join(project.path, "test.gns3")) as f:
|
with open(os.path.join(project.path, "test.gns3")) as f:
|
||||||
@ -301,6 +300,8 @@ def test_import_iou_non_linux(windows_platform, async_run, tmpdir, controller):
|
|||||||
assert topo["topology"]["nodes"][0]["compute_id"] == "vm"
|
assert topo["topology"]["nodes"][0]["compute_id"] == "vm"
|
||||||
assert topo["topology"]["nodes"][1]["compute_id"] == "local"
|
assert topo["topology"]["nodes"][1]["compute_id"] == "local"
|
||||||
|
|
||||||
|
mock.assert_called_with(controller._computes["vm"], project_id, project.path, os.path.join('project-files', 'iou', topo["topology"]["nodes"][0]['node_id']))
|
||||||
|
|
||||||
|
|
||||||
def test_import_node_id(linux_platform, async_run, tmpdir, controller):
|
def test_import_node_id(linux_platform, async_run, tmpdir, controller):
|
||||||
"""
|
"""
|
||||||
|
Loading…
Reference in New Issue
Block a user