diff --git a/gns3server/controller/topology.py b/gns3server/controller/topology.py index 3e80c7fc..84e6dba2 100644 --- a/gns3server/controller/topology.py +++ b/gns3server/controller/topology.py @@ -159,7 +159,15 @@ def _convert_1_3_later(topo, topo_path): node["name"] = old_node["label"]["text"] node["label"] = _convert_label(old_node["label"]) node["node_id"] = old_node.get("vm_id", str(uuid.uuid4())) + node["symbol"] = old_node.get("symbol", None) + # Compatibility with <= 1.3 + if node["symbol"] is None and "default_symbol" in old_node: + if old_node["default_symbol"].endswith("normal.svg"): + node["symbol"] = old_node["default_symbol"][:-11] + ".svg" + else: + node["symbol"] = old_node["default_symbol"] + node["x"] = int(old_node["x"]) node["y"] = int(old_node["y"]) node["z"] = int(old_node.get("z", 1)) @@ -393,8 +401,12 @@ def _convert_label(label): style += "font-style: italic;" color = label["color"] - style += "fill: #" + color[-6:] + ";" - style += "fill-opacity: {};".format(round(1.0 / 255 * int(color[:3][-2:], base=16), 2)) + if len(color) == 9: + style += "fill: #" + color[-6:] + ";" + style += "fill-opacity: {};".format(round(1.0 / 255 * int(color[:3][-2:], base=16), 2)) + else: + style += "fill: #" + color[-6:] + ";" + style += "fill-opacity: {};".format(1.0) return { "text": label["text"], "rotation": 0, diff --git a/tests/test_topologies.py b/tests/test_topologies.py index f3450e4b..322aa127 100644 --- a/tests/test_topologies.py +++ b/tests/test_topologies.py @@ -106,6 +106,9 @@ def compare_dict(path, source, reference): elif isinstance(val, list): assert len(val) == len(source[key]), "Not enough value in {} ({}/{}) it shoud be {} not {}".format(key, len(val), len(source[key]), val, source[key]) for idx, element in enumerate(source[key]): - compare_dict(path + key + "/", element, val[idx]) + if isinstance(element, dict): + compare_dict(path + key + "/", element, val[idx]) + else: + assert element == val[idx] else: assert False, "Value type for {} is not supported".format(key) diff --git a/tests/topologies/1_3_dynamips/after/1_3_dynamips.gns3 b/tests/topologies/1_3_dynamips/after/1_3_dynamips.gns3 new file mode 100644 index 00000000..739b7518 --- /dev/null +++ b/tests/topologies/1_3_dynamips/after/1_3_dynamips.gns3 @@ -0,0 +1,74 @@ +{ + "auto_start": false, + "name": "1_3_dynamips", + "project_id": "ba5790e1-2f51-443e-a3cc-1a2eee132888", + "revision": 5, + "topology": { + "computes": [ + { + "compute_id": "local", + "host": "127.0.0.1", + "name": "Local", + "port": 8000, + "protocol": "http" + } + ], + "drawings": [], + "links": [], + "nodes": [ + { + "symbol": ":/symbols/iosv_virl.svg", + "compute_id": "local", + "console": 2001, + "console_type": "telnet", + "label": { + "rotation": 0, + "style": "font-family: TypeWriter;font-size: 10;font-weight: bold;fill: #000000;fill-opacity: 1.0;", + "text": "R1", + "x": 22, + "y": -25 + }, + "name": "R1", + "node_id": "0bce6ad5-c688-4d4d-a425-f21aaf3927e2", + "node_type": "dynamips", + "properties": { + "dynamips_id": 1, + "auto_delete_disks": true, + "clock_divisor": 4, + "disk0": 0, + "disk1": 0, + "exec_area": 64, + "idlemax": 500, + "idlesleep": 30, + "image": "c7200-adventerprisek9-mz.124-24.T8.image", + "mac_addr": "ca01.2f39.0000", + "midplane": "vxr", + "mmap": true, + "npe": "npe-400", + "nvram": 512, + "platform": "c7200", + "power_supplies": [ + 1, + 1 + ], + "ram": 512, + "sensors": [ + 22, + 22, + 22, + 22 + ], + "slot0": "C7200-IO-FE", + "sparsemem": true, + "startup_config": "configs/i1_startup-config.cfg", + "system_id": "FTX0945W0MY" + }, + "x": -112, + "y": -100, + "z": 1 + } + ] + }, + "type": "topology", + "version": "2.0.0dev1" +} diff --git a/tests/topologies/1_3_dynamips/before/1_3_dynamips.gns3 b/tests/topologies/1_3_dynamips/before/1_3_dynamips.gns3 new file mode 100644 index 00000000..9ebfae8b --- /dev/null +++ b/tests/topologies/1_3_dynamips/before/1_3_dynamips.gns3 @@ -0,0 +1,81 @@ +{ + "auto_start": false, + "name": "1_3_dynamips", + "project_id": "ba5790e1-2f51-443e-a3cc-1a2eee132888", + "revision": 3, + "topology": { + "nodes": [ + { + "default_symbol": ":/symbols/iosv_virl.normal.svg", + "description": "Router c7200", + "dynamips_id": 1, + "hover_symbol": ":/symbols/iosv_virl.selected.svg", + "id": 1, + "label": { + "color": "#000000", + "font": "TypeWriter,10,-1,5,75,0,0,0,0,0", + "text": "R1", + "x": 22.6171875, + "y": -25.0 + }, + "ports": [ + { + "adapter_number": 0, + "id": 1, + "name": "FastEthernet0/0", + "port_number": 0 + } + ], + "properties": { + "auto_delete_disks": true, + "clock_divisor": 4, + "console": 2001, + "disk0": 0, + "disk1": 0, + "exec_area": 64, + "idlemax": 500, + "idlesleep": 30, + "image": "c7200-adventerprisek9-mz.124-24.T8.image", + "mac_addr": "ca01.2f39.0000", + "midplane": "vxr", + "mmap": true, + "name": "R1", + "npe": "npe-400", + "nvram": 512, + "platform": "c7200", + "power_supplies": [ + 1, + 1 + ], + "ram": 512, + "sensors": [ + 22, + 22, + 22, + 22 + ], + "slot0": "C7200-IO-FE", + "sparsemem": true, + "startup_config": "configs/i1_startup-config.cfg", + "system_id": "FTX0945W0MY" + }, + "server_id": 1, + "type": "C7200", + "vm_id": "0bce6ad5-c688-4d4d-a425-f21aaf3927e2", + "x": -112.0, + "y": -100.0 + } + ], + "servers": [ + { + "cloud": false, + "host": "127.0.0.1", + "id": 1, + "local": true, + "port": 8000 + } + ] + }, + "type": "topology", + "version": "1.3.13" +}