f-stack/dpdk/dts/framework/testbed_model/node.py

63 lines
1.9 KiB
Python

# SPDX-License-Identifier: BSD-3-Clause
# Copyright(c) 2010-2014 Intel Corporation
# Copyright(c) 2022 PANTHEON.tech s.r.o.
# Copyright(c) 2022 University of New Hampshire
"""
A node is a generic host that DTS connects to and manages.
"""
from framework.config import NodeConfiguration
from framework.logger import DTSLOG, getLogger
from framework.remote_session import RemoteSession, create_remote_session
from framework.settings import SETTINGS
class Node(object):
"""
Basic module for node management. This module implements methods that
manage a node, such as information gathering (of CPU/PCI/NIC) and
environment setup.
"""
name: str
main_session: RemoteSession
logger: DTSLOG
_config: NodeConfiguration
_other_sessions: list[RemoteSession]
def __init__(self, node_config: NodeConfiguration):
self._config = node_config
self._other_sessions = []
self.name = node_config.name
self.logger = getLogger(self.name)
self.logger.info(f"Created node: {self.name}")
self.main_session = create_remote_session(self._config, self.name, self.logger)
def send_command(self, cmds: str, timeout: float = SETTINGS.timeout) -> str:
"""
Send commands to node and return string before timeout.
"""
return self.main_session.send_command(cmds, timeout)
def create_session(self, name: str) -> RemoteSession:
connection = create_remote_session(
self._config,
name,
getLogger(name, node=self.name),
)
self._other_sessions.append(connection)
return connection
def node_exit(self) -> None:
"""
Recover all resource before node exit
"""
if self.main_session:
self.main_session.close()
for session in self._other_sessions:
session.close()
self.logger.logger_exit()