update node config dialog to display fields based on node type, added field for nodes with images
This commit is contained in:
parent
c43e5f999c
commit
07c07da099
4 changed files with 57 additions and 24 deletions
|
@ -5,6 +5,7 @@ from core.api.grpc import core_pb2
|
|||
from coretk.dialogs.emaneconfig import EmaneConfiguration
|
||||
from coretk.dialogs.nodeconfig import NodeConfigDialog
|
||||
from coretk.dialogs.wlanconfig import WlanConfigDialog
|
||||
from coretk.nodeutils import NodeUtils
|
||||
|
||||
|
||||
class CanvasAction:
|
||||
|
@ -16,7 +17,7 @@ class CanvasAction:
|
|||
def display_configuration(self, canvas_node):
|
||||
node_type = canvas_node.core_node.type
|
||||
self.node_to_show_config = canvas_node
|
||||
if node_type == core_pb2.NodeType.DEFAULT:
|
||||
if NodeUtils.is_container_node(node_type):
|
||||
self.display_node_configuration()
|
||||
elif node_type == core_pb2.NodeType.WIRELESS_LAN:
|
||||
self.display_wlan_configuration(canvas_node)
|
||||
|
|
|
@ -440,12 +440,16 @@ class CoreClient:
|
|||
"""
|
||||
node_id = self.get_id()
|
||||
position = core_pb2.Position(x=x, y=y)
|
||||
image = None
|
||||
if NodeUtils.is_image_node(node_type):
|
||||
image = "ubuntu:latest"
|
||||
node = core_pb2.Node(
|
||||
id=node_id,
|
||||
type=node_type,
|
||||
name=f"n{node_id}",
|
||||
model=model,
|
||||
position=position,
|
||||
image=image,
|
||||
)
|
||||
|
||||
# set default configuration for wireless node
|
||||
|
@ -530,7 +534,7 @@ class CoreClient:
|
|||
def create_interface(self, canvas_node):
|
||||
interface = None
|
||||
core_node = canvas_node.core_node
|
||||
if NodeUtils.is_interface_node(core_node.type):
|
||||
if NodeUtils.is_container_node(core_node.type):
|
||||
ifid = len(canvas_node.interfaces)
|
||||
name = f"eth{ifid}"
|
||||
interface = core_pb2.Interface(
|
||||
|
|
|
@ -6,9 +6,9 @@ from tkinter import ttk
|
|||
from coretk.dialogs.dialog import Dialog
|
||||
from coretk.dialogs.icondialog import IconDialog
|
||||
from coretk.dialogs.nodeservice import NodeService
|
||||
from coretk.nodeutils import NodeUtils
|
||||
from coretk.widgets import FrameScroll
|
||||
|
||||
DEFAULT_NODES = {"router", "host", "PC", "mdr", "prouter"}
|
||||
PAD = 5
|
||||
|
||||
|
||||
|
@ -49,6 +49,7 @@ class NodeConfigDialog(Dialog):
|
|||
self.image_button = None
|
||||
self.name = tk.StringVar(value=self.node.name)
|
||||
self.type = tk.StringVar(value=self.node.model)
|
||||
self.container_image = tk.StringVar(value=self.node.image)
|
||||
server = "localhost"
|
||||
if self.node.server:
|
||||
server = self.node.server
|
||||
|
@ -86,26 +87,39 @@ class NodeConfigDialog(Dialog):
|
|||
row += 1
|
||||
|
||||
# node type field
|
||||
label = ttk.Label(frame, text="Type")
|
||||
label.grid(row=row, column=0, sticky="ew", padx=PAD, pady=PAD)
|
||||
combobox = ttk.Combobox(
|
||||
frame, textvariable=self.type, values=list(DEFAULT_NODES), state="readonly"
|
||||
)
|
||||
combobox.grid(row=row, column=1, sticky="ew")
|
||||
row += 1
|
||||
if NodeUtils.is_model_node(self.node.type):
|
||||
label = ttk.Label(frame, text="Type")
|
||||
label.grid(row=row, column=0, sticky="ew", padx=PAD, pady=PAD)
|
||||
combobox = ttk.Combobox(
|
||||
frame,
|
||||
textvariable=self.type,
|
||||
values=list(NodeUtils.NODE_MODELS),
|
||||
state="readonly",
|
||||
)
|
||||
combobox.grid(row=row, column=1, sticky="ew")
|
||||
row += 1
|
||||
|
||||
# container image field
|
||||
if NodeUtils.is_image_node(self.node.type):
|
||||
label = ttk.Label(frame, text="Image")
|
||||
label.grid(row=row, column=0, sticky="ew", padx=PAD, pady=PAD)
|
||||
entry = ttk.Entry(frame, textvariable=self.container_image)
|
||||
entry.grid(row=row, column=1, sticky="ew")
|
||||
row += 1
|
||||
|
||||
# server
|
||||
frame.grid(sticky="ew")
|
||||
frame.columnconfigure(1, weight=1)
|
||||
label = ttk.Label(frame, text="Server")
|
||||
label.grid(row=row, column=0, sticky="ew", padx=PAD, pady=PAD)
|
||||
servers = ["localhost"]
|
||||
servers.extend(list(sorted(self.app.core.servers.keys())))
|
||||
combobox = ttk.Combobox(
|
||||
frame, textvariable=self.server, values=servers, state="readonly"
|
||||
)
|
||||
combobox.grid(row=row, column=1, sticky="ew")
|
||||
row += 1
|
||||
if NodeUtils.is_container_node(self.node.type):
|
||||
frame.grid(sticky="ew")
|
||||
frame.columnconfigure(1, weight=1)
|
||||
label = ttk.Label(frame, text="Server")
|
||||
label.grid(row=row, column=0, sticky="ew", padx=PAD, pady=PAD)
|
||||
servers = ["localhost"]
|
||||
servers.extend(list(sorted(self.app.core.servers.keys())))
|
||||
combobox = ttk.Combobox(
|
||||
frame, textvariable=self.server, values=servers, state="readonly"
|
||||
)
|
||||
combobox.grid(row=row, column=1, sticky="ew")
|
||||
row += 1
|
||||
|
||||
# services
|
||||
button = ttk.Button(self.top, text="Services", command=self.click_services)
|
||||
|
@ -181,6 +195,10 @@ class NodeConfigDialog(Dialog):
|
|||
def config_apply(self):
|
||||
# update core node
|
||||
self.node.name = self.name.get()
|
||||
if NodeUtils.is_image_node(self.node.type):
|
||||
self.node.image = self.container_image.get()
|
||||
if NodeUtils.is_container_node(self.node.type):
|
||||
self.node.server = self.server.get()
|
||||
|
||||
# update canvas node
|
||||
self.canvas_node.image = self.image
|
||||
|
|
|
@ -44,11 +44,21 @@ class NodeUtils:
|
|||
NODES = []
|
||||
NETWORK_NODES = []
|
||||
NODE_ICONS = {}
|
||||
INTERFACE_NODE = {NodeType.DEFAULT, NodeType.DOCKER, NodeType.LXC}
|
||||
CONTAINER_NODES = {NodeType.DEFAULT, NodeType.DOCKER, NodeType.LXC}
|
||||
IMAGE_NODES = {NodeType.DOCKER, NodeType.LXC}
|
||||
NODE_MODELS = {"router", "host", "PC", "mdr", "prouter"}
|
||||
|
||||
@classmethod
|
||||
def is_interface_node(cls, node_type):
|
||||
return node_type in cls.INTERFACE_NODE
|
||||
def is_container_node(cls, node_type):
|
||||
return node_type in cls.CONTAINER_NODES
|
||||
|
||||
@classmethod
|
||||
def is_model_node(cls, node_type):
|
||||
return node_type == NodeType.DEFAULT
|
||||
|
||||
@classmethod
|
||||
def is_image_node(cls, node_type):
|
||||
return node_type in cls.IMAGE_NODES
|
||||
|
||||
@classmethod
|
||||
def node_icon(cls, node_type, model):
|
||||
|
|
Loading…
Add table
Reference in a new issue