diff --git a/virl2_client/models/cl_pyats.py b/virl2_client/models/cl_pyats.py index 3360bb4..88bb6f5 100644 --- a/virl2_client/models/cl_pyats.py +++ b/virl2_client/models/cl_pyats.py @@ -120,6 +120,27 @@ def sync_testbed(self, username: str, password: str) -> None: self._testbed = self._load_pyats_testbed(testbed_yaml) self.set_termserv_credentials(username, password) + def switch_pyats_serial_console(self, node_label: str, console_number: int) -> None: + """ + Switch to different serial console that is used to execute PyAts commands + should be executed after sync_testbed + and re-executed after every sync_testbed call. + + :param node_label: The label/title of the device. + :param console_number: The serial console number to be used for PyAts. + """ + + try: + pyats_device: Device = self._testbed.devices[node_label] + except KeyError: + raise PyatsDeviceNotFound(node_label) + + + connect_cmd = pyats_device.connections["a"]["command"] + + pyats_device.connections["a"]["command"] = connect_cmd[:-1] + console_number + + def set_termserv_credentials( self, username: str | None = None, diff --git a/virl2_client/models/node.py b/virl2_client/models/node.py index 8dbdf0a..fd9c56b 100644 --- a/virl2_client/models/node.py +++ b/virl2_client/models/node.py @@ -717,14 +717,16 @@ def console_logs(self, console_id: int, lines: int | None = None) -> dict: return self._session.get(url).json() @check_stale - def console_key(self) -> str: + def console_key(self, console_number: int = 0) -> str: """ Get the console key of the node. + :param console_number: The console number (defaults to 0). :returns: The console key. """ + params = {"line": console_number} url = self._url_for("console_key") - return self._session.get(url).json() + return self._session.get(url, params=params).json() @check_stale def vnc_key(self) -> str: