From 539ca5d22c394445256bec2553c68a2aff139d1f Mon Sep 17 00:00:00 2001 From: Blake Harnden <32446120+bharnden@users.noreply.github.com> Date: Tue, 3 Mar 2020 22:27:02 -0800 Subject: [PATCH] added docker/lxc to xml read/write, fixed icon retrieval for docker/lxc in new gui --- daemon/core/gui/images.py | 2 ++ daemon/core/xml/corexml.py | 27 +++++++++++++++++++++++++-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/daemon/core/gui/images.py b/daemon/core/gui/images.py index f299c5a5..1f43103c 100644 --- a/daemon/core/gui/images.py +++ b/daemon/core/gui/images.py @@ -106,6 +106,8 @@ class TypeToImage: (core_pb2.NodeType.EMANE, ""): ImageEnum.EMANE, (core_pb2.NodeType.RJ45, ""): ImageEnum.RJ45, (core_pb2.NodeType.TUNNEL, ""): ImageEnum.TUNNEL, + (core_pb2.NodeType.DOCKER, ""): ImageEnum.DOCKER, + (core_pb2.NodeType.LXC, ""): ImageEnum.LXC, } @classmethod diff --git a/daemon/core/xml/corexml.py b/daemon/core/xml/corexml.py index 1f402510..8eab98c2 100644 --- a/daemon/core/xml/corexml.py +++ b/daemon/core/xml/corexml.py @@ -10,6 +10,8 @@ from core.emulator.data import LinkData from core.emulator.emudata import InterfaceData, LinkOptions, NodeOptions from core.emulator.enumerations import NodeTypes from core.nodes.base import CoreNetworkBase, CoreNodeBase, NodeBase +from core.nodes.docker import DockerNode +from core.nodes.lxd import LxcNode from core.nodes.network import CtrlNet from core.services.coreservices import CoreService @@ -213,8 +215,21 @@ class DeviceElement(NodeElement): def __init__(self, session: "Session", node: NodeBase) -> None: super().__init__(session, node, "device") add_attribute(self.element, "type", node.type) + self.add_class() self.add_services() + def add_class(self) -> None: + clazz = "" + image = "" + if isinstance(self.node, DockerNode): + clazz = "docker" + image = self.node.image + elif isinstance(self.node, LxcNode): + clazz = "lxc" + image = self.node.image + add_attribute(self.element, "class", clazz) + add_attribute(self.element, "image", image) + def add_services(self) -> None: service_elements = etree.Element("services") for service in self.node.services: @@ -796,9 +811,17 @@ class CoreXmlReader: name = device_element.get("name") model = device_element.get("type") icon = device_element.get("icon") - options = NodeOptions(name, model) + clazz = device_element.get("class") + image = device_element.get("image") + options = NodeOptions(name, model, image) options.icon = icon + node_type = NodeTypes.DEFAULT + if clazz == "docker": + node_type = NodeTypes.DOCKER + elif clazz == "lxc": + node_type = NodeTypes.LXC + service_elements = device_element.find("services") if service_elements is not None: options.services = [x.get("name") for x in service_elements.iterchildren()] @@ -823,7 +846,7 @@ class CoreXmlReader: options.set_location(lat, lon, alt) logging.info("reading node id(%s) model(%s) name(%s)", node_id, model, name) - self.session.add_node(_id=node_id, options=options) + self.session.add_node(_type=node_type, _id=node_id, options=options) def read_network(self, network_element: etree.Element) -> None: node_id = get_int(network_element, "id")