Support update link on controller

Ref https://github.com/GNS3/gns3-gui/issues/1300
This commit is contained in:
Julien Duponchelle committed 2016-07-01 17:38:32 +02:00
1 parent 71d4c0a13a
commit fea1e3ba61
5 files changed
+179 -12

No files matched your search

+24 -3
View File
@@ -43,18 +43,38 @@ class Link:
self._streaming_pcap = None
@asyncio.coroutine
def add_node(self, node, adapter_number, port_number):
def add_node(self, node, adapter_number, port_number, label=None):
"""
Add a node to the link
"""
if label is None:
label = {
"x": -10,
"y": -10,
"text": "{}/{}".format(adapter_number, port_number),
"style": "font-size: 10; font-style: Verdana"
}
self._nodes.append({
"node": node,
"adapter_number": adapter_number,
"port_number": port_number
"port_number": port_number,
"label": label
})
if len(self._nodes) == 2:
self._project.controller.notification.emit("link.created", self.__json__())
self._project.dump()
@asyncio.coroutine
def update_node(self, node, adapter_number, port_number, label=None):
for port in self._nodes:
if port["node"] == node:
if label:
port["label"] = label
self._project.controller.notification.emit("link.updated", self.__json__())
self._project.dump()
@asyncio.coroutine
@@ -166,7 +186,8 @@ class Link:
res.append({
"node_id": side["node"].id,
"adapter_number": side["adapter_number"],
"port_number": side["port_number"]
"port_number": side["port_number"],
"label": side["label"]
})
if topology_dump:
return {
@@ -66,11 +66,38 @@ class LinkHandler:
for node in request.json["nodes"]:
yield from link.add_node(project.get_node(node["node_id"]),
node.get("adapter_number", 0),
node.get("port_number", 0))
node.get("port_number", 0),
label=node.get("label"))
yield from link.create()
response.set_status(201)
response.json(link)
@Route.put(
r"/projects/{project_id}/links/{link_id}",
parameters={
"project_id": "Project UUID",
"link_id": "Link UUID"
},
status_codes={
201: "Link updated",
400: "Invalid request"
},
description="Update a link instance",
input=LINK_OBJECT_SCHEMA,
output=LINK_OBJECT_SCHEMA)
def update(request, response):
controller = Controller.instance()
project = controller.get_project(request.match_info["project_id"])
link = project.get_link(request.match_info["link_id"])
for node in request.json["nodes"]:
yield from link.update_node(project.get_node(node["node_id"]),
node.get("adapter_number", 0),
node.get("port_number", 0),
label=node.get("label"))
response.set_status(201)
response.json(link)
@Route.post(
r"/projects/{project_id}/links/{link_id}/start_capture",
parameters={
+4 -1
View File
@@ -15,6 +15,8 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from .label import LABEL_OBJECT_SCHEMA
LINK_OBJECT_SCHEMA = {
"$schema": "http://json-schema.org/draft-04/schema#",
@@ -55,7 +57,8 @@ LINK_OBJECT_SCHEMA = {
"port_number": {
"description": "Port number",
"type": "integer"
}
},
"label": LABEL_OBJECT_SCHEMA
},
"required": ["node_id", "adapter_number", "port_number"],
"additionalProperties": False