From 2c0f9f9e887adace903ec1f8b514c02005ef3577 Mon Sep 17 00:00:00 2001 From: Vratko Polak Date: Mon, 16 Jan 2023 12:47:28 +0100 Subject: [PATCH] feat(papi): wipe remains of VAT - Some older documentation files are not updated yet. Change-Id: If1717e12308f0e2e76c10024e6eebe68ddeddc9f Signed-off-by: Vratko Polak --- .../vpp_performance_tests/csit_release_notes.rst | 50 ++- resources/libraries/python/Constants.py | 6 - resources/libraries/python/PapiHistory.py | 24 +- resources/libraries/python/SetupFramework.py | 8 +- resources/libraries/python/VatExecutor.py | 397 --------------------- resources/libraries/python/VatJsonUtil.py | 218 ----------- resources/templates/vat/dhcp_proxy_dump.vat | 1 - resources/templates/vat/dump_interfaces.vat | 3 - resources/templates/vat/ipsec/ipsec_policy_add.vat | 1 - resources/templates/vat/ipsec/ipsec_show.vat | 1 - .../templates/vat/lisp/add_lisp_adjacency.vat | 1 - .../templates/vat/lisp/add_lisp_local_eid.vat | 1 - .../templates/vat/lisp/add_lisp_local_eid_mac.vat | 1 - resources/templates/vat/lisp/add_lisp_locator.vat | 1 - .../templates/vat/lisp/add_lisp_locator_set.vat | 1 - .../templates/vat/lisp/add_lisp_map_resolver.vat | 1 - .../templates/vat/lisp/add_lisp_remote_mapping.vat | 1 - .../templates/vat/lisp/del_lisp_adjacency.vat | 1 - .../templates/vat/lisp/del_lisp_local_eid.vat | 1 - .../templates/vat/lisp/del_lisp_local_eid_mac.vat | 1 - resources/templates/vat/lisp/del_lisp_locator.vat | 1 - .../templates/vat/lisp/del_lisp_locator_set.vat | 1 - .../templates/vat/lisp/del_lisp_map_resolver.vat | 1 - .../templates/vat/lisp/del_lisp_remote_mapping.vat | 1 - .../vat/lisp/lisp_eid_table_add_del_map.vat | 1 - resources/templates/vat/lisp/lisp_gpe_iface.vat | 1 - resources/templates/vat/lisp/lisp_gpe_status.vat | 1 - resources/templates/vat/lisp/lisp_status.vat | 1 - .../templates/vat/lisp/show_lisp_eid_table.vat | 1 - .../templates/vat/lisp/show_lisp_gpe_tunnel.vat | 1 - .../templates/vat/lisp/show_lisp_locator_set.vat | 1 - .../templates/vat/lisp/show_lisp_map_register.vat | 1 - .../vat/lisp/show_lisp_map_request_mode.vat | 1 - .../templates/vat/lisp/show_lisp_map_resolver.vat | 1 - .../templates/vat/lisp/show_lisp_map_server.vat | 1 - .../templates/vat/lisp/show_lisp_petr_config.vat | 1 - resources/templates/vat/lisp/show_lisp_pitr.vat | 1 - .../templates/vat/lisp/show_lisp_rloc_config.vat | 1 - resources/templates/vat/lisp/show_lisp_status.vat | 1 - resources/templates/vat/show_hardware_detail.vat | 1 - resources/templates/vat/vpp_route_add.vat | 1 - 41 files changed, 30 insertions(+), 710 deletions(-) delete mode 100644 resources/libraries/python/VatExecutor.py delete mode 100644 resources/libraries/python/VatJsonUtil.py delete mode 100644 resources/templates/vat/dhcp_proxy_dump.vat delete mode 100644 resources/templates/vat/dump_interfaces.vat delete mode 100644 resources/templates/vat/ipsec/ipsec_policy_add.vat delete mode 100644 resources/templates/vat/ipsec/ipsec_show.vat delete mode 100644 resources/templates/vat/lisp/add_lisp_adjacency.vat delete mode 100644 resources/templates/vat/lisp/add_lisp_local_eid.vat delete mode 100644 resources/templates/vat/lisp/add_lisp_local_eid_mac.vat delete mode 100644 resources/templates/vat/lisp/add_lisp_locator.vat delete mode 100644 resources/templates/vat/lisp/add_lisp_locator_set.vat delete mode 100644 resources/templates/vat/lisp/add_lisp_map_resolver.vat delete mode 100644 resources/templates/vat/lisp/add_lisp_remote_mapping.vat delete mode 100644 resources/templates/vat/lisp/del_lisp_adjacency.vat delete mode 100644 resources/templates/vat/lisp/del_lisp_local_eid.vat delete mode 100644 resources/templates/vat/lisp/del_lisp_local_eid_mac.vat delete mode 100644 resources/templates/vat/lisp/del_lisp_locator.vat delete mode 100644 resources/templates/vat/lisp/del_lisp_locator_set.vat delete mode 100644 resources/templates/vat/lisp/del_lisp_map_resolver.vat delete mode 100644 resources/templates/vat/lisp/del_lisp_remote_mapping.vat delete mode 100644 resources/templates/vat/lisp/lisp_eid_table_add_del_map.vat delete mode 100644 resources/templates/vat/lisp/lisp_gpe_iface.vat delete mode 100644 resources/templates/vat/lisp/lisp_gpe_status.vat delete mode 100644 resources/templates/vat/lisp/lisp_status.vat delete mode 100644 resources/templates/vat/lisp/show_lisp_eid_table.vat delete mode 100644 resources/templates/vat/lisp/show_lisp_gpe_tunnel.vat delete mode 100644 resources/templates/vat/lisp/show_lisp_locator_set.vat delete mode 100644 resources/templates/vat/lisp/show_lisp_map_register.vat delete mode 100644 resources/templates/vat/lisp/show_lisp_map_request_mode.vat delete mode 100644 resources/templates/vat/lisp/show_lisp_map_resolver.vat delete mode 100644 resources/templates/vat/lisp/show_lisp_map_server.vat delete mode 100644 resources/templates/vat/lisp/show_lisp_petr_config.vat delete mode 100644 resources/templates/vat/lisp/show_lisp_pitr.vat delete mode 100644 resources/templates/vat/lisp/show_lisp_rloc_config.vat delete mode 100644 resources/templates/vat/lisp/show_lisp_status.vat delete mode 100644 resources/templates/vat/show_hardware_detail.vat delete mode 100644 resources/templates/vat/vpp_route_add.vat diff --git a/docs/report/vpp_performance_tests/csit_release_notes.rst b/docs/report/vpp_performance_tests/csit_release_notes.rst index 685ca75255..b9628f2222 100644 --- a/docs/report/vpp_performance_tests/csit_release_notes.rst +++ b/docs/report/vpp_performance_tests/csit_release_notes.rst @@ -103,46 +103,40 @@ Issues reported in previous releases which still affect the current results. +----+-----------------------------------------+-----------------------------------------------------------------------------------------------------------+ | # | JiraID | Issue Description | +====+=========================================+===========================================================================================================+ -| 1 | `CSIT-1671 | All CSIT scale tests can not use PAPI due to much slower performance compared to VAT/CLI (it takes much | -| | `_ | longer to program VPP). This needs to be addressed on the PAPI side. | -| +-----------------------------------------+ Currently, the time critical code uses VAT running large files with exec statements and CLI commands. | -| | `VPP-1763 | Still, we needed to reduce the number of scale tests run to keep overall duration reasonable. | -| | `_ | More improvements needed to achieve sufficient configuration speed. | -+----+-----------------------------------------+-----------------------------------------------------------------------------------------------------------+ -| 2 | `CSIT-1782 | Multicore AVF tests are failing when trying to create interface. | +| 1 | `CSIT-1782 | Multicore AVF tests are failing when trying to create interface. | | | `_ | Frequency is reduced by CSIT workaround, but occasional failures do still happen. | +----+-----------------------------------------+-----------------------------------------------------------------------------------------------------------+ -| 3 | `CSIT-1785 | NAT44ED tests failing to establish all TCP sessions. | +| 2 | `CSIT-1785 | NAT44ED tests failing to establish all TCP sessions. | | | `_ | At least for max scale, in allotted time (limited by session 500s timeout) due to worse | | +-----------------------------------------+ slow path performance than previously measured and calibrated for. | | | `VPP-1972 | CSIT removed the max scale NAT tests to avoid this issue. | | | `_ | | +----+-----------------------------------------+-----------------------------------------------------------------------------------------------------------+ -| 4 | `CSIT-1799 | All NAT44-ED 16M sessions CPS scale tests fail while setting NAT44 address range. | +| 3 | `CSIT-1799 | All NAT44-ED 16M sessions CPS scale tests fail while setting NAT44 address range. | | | `_ | | +----+-----------------------------------------+-----------------------------------------------------------------------------------------------------------+ -| 5 | `CSIT-1800 | All Geneve L3 mode scale tests (1024 tunnels) are failing. | +| 4 | `CSIT-1800 | All Geneve L3 mode scale tests (1024 tunnels) are failing. | | | `_ | | +----+-----------------------------------------+-----------------------------------------------------------------------------------------------------------+ -| 6 | `CSIT-1801 | 9000B payload frames not forwarded over tunnels due to violating supported Max Frame Size (VxLAN, LISP, | +| 5 | `CSIT-1801 | 9000B payload frames not forwarded over tunnels due to violating supported Max Frame Size (VxLAN, LISP, | | | `_ | SRv6). | +----+-----------------------------------------+-----------------------------------------------------------------------------------------------------------+ -| 7 | `CSIT-1802 | AF-XDP - NDR tests failing from time to time. | +| 6 | `CSIT-1802 | AF-XDP - NDR tests failing from time to time. | | | `_ | | +----+-----------------------------------------+-----------------------------------------------------------------------------------------------------------+ -| 8 | `CSIT-1804 | All testbeds: NDR tests failing from time to time. | +| 7 | `CSIT-1804 | All testbeds: NDR tests failing from time to time. | | | `_ | | +----+-----------------------------------------+-----------------------------------------------------------------------------------------------------------+ -| 9 | `CSIT-1808 | All tests with 9000B payload frames not forwarded over memif interfaces. | +| 8 | `CSIT-1808 | All tests with 9000B payload frames not forwarded over memif interfaces. | | | `_ | | +----+-----------------------------------------+-----------------------------------------------------------------------------------------------------------+ -| 10 | `CSIT-1827 | 3n-icx, 3n-skx: all AVF crypto tests sporadically fail. 1518B with no traffic, IMIX with excessive | +| 9 | `CSIT-1827 | 3n-icx, 3n-skx: all AVF crypto tests sporadically fail. 1518B with no traffic, IMIX with excessive | | | `_ | packet loss. | +----+-----------------------------------------+-----------------------------------------------------------------------------------------------------------+ -| 11 | `CSIT-1835 | 3n-icx: QUIC vppecho BPS tests failing on timeout when checking hoststack finished. | +| 10 | `CSIT-1835 | 3n-icx: QUIC vppecho BPS tests failing on timeout when checking hoststack finished. | | | `_ | | +----+-----------------------------------------+-----------------------------------------------------------------------------------------------------------+ -| 12 | `CSIT-1849 | 2n-skx, 2n-clx, 2n-icx: UDP 16m TPUT tests fail to create all sessions. | +| 11 | `CSIT-1849 | 2n-skx, 2n-clx, 2n-icx: UDP 16m TPUT tests fail to create all sessions. | | | `_ | | +----+-----------------------------------------+-----------------------------------------------------------------------------------------------------------+ @@ -151,19 +145,15 @@ _____ Issues reported in previous releases which were fixed in this release: -+----+-----------------------------------------+-----------------------------------------------------------------------------------------------------------+ -| # | JiraID | Issue Description | -+====+=========================================+===========================================================================================================+ -| 1 | `CSIT-1834 | 2n-icx, 2n-skx: sporadic AVF soak tests failing to find critical load with PLRsearch. | -| | `_ | | -+----+-----------------------------------------+-----------------------------------------------------------------------------------------------------------+ -| 2 | `CSIT-1846 | 2n-skx, 2n-clx, 2n-icx: ALL 1518B TCP tput tests failing with big packet loss. | -| | `_ | | -+----+-----------------------------------------+-----------------------------------------------------------------------------------------------------------+ -| 3 | `CSIT-1851 | trending regression: various icelake tests around 2202-04-15 | -| | `_ | Somewhat expected consequence of a VPP usability fix, | -| | | the previous VPP compiler version was too new for the OS used. | -+----+-----------------------------------------+-----------------------------------------------------------------------------------------------------------+ ++----+-----------------------------------------+---------------------------------------------------------------------------------------------------------+ +| # | JiraID | Issue Description | ++====+=========================================+=========================================================================================================+ +| 1 | `CSIT-1671 | All CSIT scale tests can not use PAPI due to much slower performance compared to VAT/CLI (it takes much | +| | `_ | longer to program VPP). This needs to be addressed on the PAPI side. | +| +-----------------------------------------+ Currently, the time critical code uses VAT running large files with exec statements and CLI commands. | +| | `VPP-1763 | Still, we needed to reduce the number of scale tests run to keep overall duration reasonable. | +| | `_ | More improvements needed to achieve sufficient configuration speed. | ++----+-----------------------------------------+---------------------------------------------------------------------------------------------------------+ .. _vpp_rca: diff --git a/resources/libraries/python/Constants.py b/resources/libraries/python/Constants.py index 89a302b41d..4cf6681324 100644 --- a/resources/libraries/python/Constants.py +++ b/resources/libraries/python/Constants.py @@ -143,9 +143,6 @@ class Constants: # Templates location RESOURCES_TPL = u"resources/templates" - # vat templates location - RESOURCES_TPL_VAT = u"resources/templates/vat" - # Kubernetes templates location RESOURCES_TPL_K8S = u"resources/templates/kubernetes" @@ -161,9 +158,6 @@ class Constants: # VPP Communications Library LD_PRELOAD library VCL_LDPRELOAD_LIBRARY = u"/usr/lib/x86_64-linux-gnu/libvcl_ldpreload.so" - # OpenVPP VAT binary name - VAT_BIN_NAME = u"vpp_api_test" - # VPP service unit name VPP_UNIT = u"vpp" diff --git a/resources/libraries/python/PapiHistory.py b/resources/libraries/python/PapiHistory.py index 32429c4f64..18b2774908 100644 --- a/resources/libraries/python/PapiHistory.py +++ b/resources/libraries/python/PapiHistory.py @@ -1,4 +1,4 @@ -# Copyright (c) 2021 Cisco and/or its affiliates. +# Copyright (c) 2023 Cisco and/or its affiliates. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at: @@ -48,7 +48,7 @@ class PapiHistory: PapiHistory.reset_papi_history(node) @staticmethod - def add_to_papi_history(node, csit_papi_command, papi=True, **kwargs): + def add_to_papi_history(node, csit_papi_command, **kwargs): """Add command to PAPI command history on DUT node. Repr strings are used for argument values. @@ -70,29 +70,17 @@ class PapiHistory: VPP Stats: vpp-stats(path=['^/if', '/err/ip4-input', '/sys/node/ip4-input']) - VAT: - sw_interface_set_flags sw_if_index 3 admin-up link-up - :param node: DUT node to add command to PAPI command history for. :param csit_papi_command: Command to be added to PAPI command history. - :param papi: Says if the command to store is PAPi or VAT. Remove when - VAT executor is completely removed. :param kwargs: Optional key-value arguments. :type node: dict :type csit_papi_command: str - :type papi: bool :type kwargs: dict """ - if papi: - args = list() - for key, val in kwargs.items(): - args.append(f"{key}={val!r}") - item = f"{csit_papi_command}({u','.join(args)})" - else: - # This else part is here to store VAT commands. - # VAT history is not used. - # TODO: Remove when VatExecutor is completely removed. - item = f"{csit_papi_command}" + args = list() + for key, val in kwargs.items(): + args.append(f"{key}={val!r}") + item = f"{csit_papi_command}({u','.join(args)})" DICT__DUTS_PAPI_HISTORY[node[u"host"]].append(item) @staticmethod diff --git a/resources/libraries/python/SetupFramework.py b/resources/libraries/python/SetupFramework.py index bde018a4e0..3c381166c2 100644 --- a/resources/libraries/python/SetupFramework.py +++ b/resources/libraries/python/SetupFramework.py @@ -1,4 +1,4 @@ -# Copyright (c) 2022 Cisco and/or its affiliates. +# Copyright (c) 2023 Cisco and/or its affiliates. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at: @@ -259,9 +259,9 @@ def cleanup_node(node, results=None, logs=None): class SetupFramework: """Setup suite run on topology nodes. - Many VAT/CLI based tests need the scripts at remote hosts before executing - them. This class packs the whole testing directory and copies it over - to all nodes in topology under /tmp/ + Some tests need the scripts at remote hosts before executing them. + This class packs the whole testing directory and copies it over + to all nodes in topology under /tmp/. """ @staticmethod diff --git a/resources/libraries/python/VatExecutor.py b/resources/libraries/python/VatExecutor.py deleted file mode 100644 index 63f46c8b6d..0000000000 --- a/resources/libraries/python/VatExecutor.py +++ /dev/null @@ -1,397 +0,0 @@ -# Copyright (c) 2021 Cisco and/or its affiliates. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at: -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""VAT executor library.""" - -import json - -from os import remove - -from paramiko.ssh_exception import SSHException -from robot.api import logger - -import resources.libraries.python.DUTSetup as PidLib - -from resources.libraries.python.Constants import Constants -from resources.libraries.python.PapiHistory import PapiHistory -from resources.libraries.python.ssh import SSH, SSHTimeout - -__all__ = [u"VatExecutor"] - - -def cleanup_vat_json_output(json_output, vat_name=None): - """Return VAT JSON output cleaned from VAT clutter. - - Clean up VAT JSON output from clutter like vat# prompts and such. - - :param json_output: Cluttered JSON output. - :param vat_name: Name of the VAT script. - :type json_output: JSON - :type vat_name: str - :returns: Cleaned up output JSON string. - :rtype: JSON - """ - - retval = json_output - clutter = [u"vat#", u"dump_interface_table error: Misc"] - if vat_name: - remote_file_path = f"{Constants.REMOTE_FW_DIR}/" \ - f"{Constants.RESOURCES_TPL_VAT}/{vat_name}" - clutter.append(f"{remote_file_path}(2):") - for garbage in clutter: - retval = retval.replace(garbage, u"") - return retval - - -def get_vpp_pid(node): - """Get PID of running VPP process. - - :param node: DUT node. - :type node: dict - :returns: PID of VPP process / List of PIDs if more VPP processes are - running on the DUT node. - :rtype: int or list - """ - pid = PidLib.DUTSetup.get_pid(node, u"vpp") - return pid - - -class VatExecutor: - """Contains methods for executing VAT commands on DUTs.""" - def __init__(self): - self._stdout = None - self._stderr = None - self._ret_code = None - self._script_name = None - - def execute_script( - self, vat_name, node, timeout=120, json_out=True, - copy_on_execute=False, history=True): - """Execute VAT script on remote node, and store the result. There is an - option to copy script from local host to remote host before execution. - Path is defined automatically. - - :param vat_name: Name of the vat script file. Only the file name of - the script is required, the resources path is prepended - automatically. - :param node: Node to execute the VAT script on. - :param timeout: Seconds to allow the script to run. - :param json_out: Require JSON output. - :param copy_on_execute: If true, copy the file from local host to remote - before executing. - :param history: If true, add command to history. - :type vat_name: str - :type node: dict - :type timeout: int - :type json_out: bool - :type copy_on_execute: bool - :type history: bool - :raises SSHException: If cannot open connection for VAT. - :raises SSHTimeout: If VAT execution is timed out. - :raises RuntimeError: If VAT script execution fails. - """ - ssh = SSH() - try: - ssh.connect(node) - except: - raise SSHException( - f"Cannot open SSH connection to execute VAT command(s) " - f"from vat script {vat_name}" - ) - - if copy_on_execute: - ssh.scp(vat_name, vat_name) - remote_file_path = vat_name - if history: - with open(vat_name, u"rt") as vat_file: - for line in vat_file: - PapiHistory.add_to_papi_history( - node, line.replace(u"\n", u""), papi=False - ) - else: - remote_file_path = f"{Constants.REMOTE_FW_DIR}/" \ - f"{Constants.RESOURCES_TPL_VAT}/{vat_name}" - - cmd = f"{Constants.VAT_BIN_NAME}" \ - f"{u' json' if json_out is True else u''} " \ - f"in {remote_file_path} script" - try: - ret_code, stdout, stderr = ssh.exec_command_sudo( - cmd=cmd, timeout=timeout - ) - except SSHTimeout: - logger.error(f"VAT script execution timeout: {cmd}") - raise - except Exception: - raise RuntimeError(f"VAT script execution failed: {cmd}") - - self._ret_code = ret_code - self._stdout = stdout - self._stderr = stderr - self._script_name = vat_name - - def write_and_execute_script( - self, node, tmp_fn, commands, timeout=300, json_out=False): - """Write VAT commands to the script, copy it to node and execute it. - - :param node: VPP node. - :param tmp_fn: Path to temporary file script. - :param commands: VAT command list. - :param timeout: Seconds to allow the script to run. - :param json_out: Require JSON output. - :type node: dict - :type tmp_fn: str - :type commands: list - :type timeout: int - :type json_out: bool - """ - with open(tmp_fn, u"wt") as tmp_f: - tmp_f.writelines(commands) - - self.execute_script( - tmp_fn, node, timeout=timeout, json_out=json_out, - copy_on_execute=True - ) - remove(tmp_fn) - - def execute_script_json_out(self, vat_name, node, timeout=120): - """Pass all arguments to 'execute_script' method, then cleanup returned - json output. - - :param vat_name: Name of the vat script file. Only the file name of - the script is required, the resources path is prepended - automatically. - :param node: Node to execute the VAT script on. - :param timeout: Seconds to allow the script to run. - :type vat_name: str - :type node: dict - :type timeout: int - """ - self.execute_script(vat_name, node, timeout, json_out=True) - self._stdout = cleanup_vat_json_output(self._stdout, vat_name=vat_name) - - def script_should_have_failed(self): - """Read return code from last executed script and raise exception if the - script didn't fail.""" - if self._ret_code is None: - raise Exception(u"First execute the script!") - if self._ret_code == 0: - raise AssertionError( - f"VAT Script execution passed, but failure was expected: " - f"{self._script_name}" - ) - - def script_should_have_passed(self): - """Read return code from last executed script and raise exception if the - script failed.""" - if self._ret_code is None: - raise Exception(u"First execute the script!") - if self._ret_code != 0: - raise AssertionError( - f"VAT Script execution failed, but success was expected: " - f"{self._script_name}" - ) - - def get_script_stdout(self): - """Returns value of stdout from last executed script.""" - return self._stdout - - def get_script_stderr(self): - """Returns value of stderr from last executed script.""" - return self._stderr - - @staticmethod - def cmd_from_template(node, vat_template_file, json_param=True, **vat_args): - """Execute VAT script on specified node. This method supports - script templates with parameters. - - :param node: Node in topology on witch the script is executed. - :param vat_template_file: Template file of VAT script. - :param json_param: Require JSON mode. - :param vat_args: Arguments to the template file. - :returns: List of JSON objects returned by VAT. - """ - with VatTerminal(node, json_param=json_param) as vat: - return vat.vat_terminal_exec_cmd_from_template( - vat_template_file, **vat_args - ) - - -class VatTerminal: - """VAT interactive terminal. - - :param node: Node to open VAT terminal on. - :param json_param: Defines if outputs from VAT are in JSON format. - Default is True. - :type node: dict - :type json_param: bool - - """ - - __VAT_PROMPT = (u"vat# ", ) - __LINUX_PROMPT = (u":~# ", u":~$ ", u"~]$ ", u"~]# ") - - def __init__(self, node, json_param=True): - json_text = u" json" if json_param else u"" - self.json = json_param - self._node = node - self._ssh = SSH() - self._ssh.connect(self._node) - try: - self._tty = self._ssh.interactive_terminal_open() - except Exception: - raise RuntimeError( - f"Cannot open interactive terminal on node " - f"{self._node[u'host']}" - ) - - for _ in range(3): - try: - self._ssh.interactive_terminal_exec_command( - self._tty, f"sudo -S {Constants.VAT_BIN_NAME}{json_text}", - self.__VAT_PROMPT - ) - except Exception: - continue - else: - break - else: - vpp_pid = get_vpp_pid(self._node) - if vpp_pid: - if isinstance(vpp_pid, int): - logger.trace(f"VPP running on node {self._node[u'host']}") - else: - logger.error( - f"More instances of VPP running " - f"on node {self._node[u'host']}." - ) - else: - logger.error(f"VPP not running on node {self._node[u'host']}.") - raise RuntimeError( - f"Failed to open VAT console on node {self._node[u'host']}" - ) - - self._exec_failure = False - self.vat_stdout = None - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_val, exc_tb): - self.vat_terminal_close() - - def vat_terminal_exec_cmd(self, cmd): - """Execute command on the opened VAT terminal. - - :param cmd: Command to be executed. - - :returns: Command output in python representation of JSON format or - None if not in JSON mode. - """ - PapiHistory.add_to_papi_history(self._node, cmd, papi=False) - logger.debug(f"Executing command in VAT terminal: {cmd}") - try: - out = self._ssh.interactive_terminal_exec_command( - self._tty, cmd, self.__VAT_PROMPT - ) - self.vat_stdout = out - except Exception: - self._exec_failure = True - vpp_pid = get_vpp_pid(self._node) - if vpp_pid: - if isinstance(vpp_pid, int): - msg = f"VPP running on node {self._node[u'host']} " \ - f"but VAT command {cmd} execution failed." - else: - msg = f"More instances of VPP running on node " \ - f"{self._node[u'host']}. VAT command {cmd} " \ - f"execution failed." - else: - msg = f"VPP not running on node {self._node[u'host']}. " \ - f"VAT command {cmd} execution failed." - raise RuntimeError(msg) - - logger.debug(f"VAT output: {out}") - if self.json: - obj_start = out.find(u"{") - obj_end = out.rfind(u"}") - array_start = out.find(u"[") - array_end = out.rfind(u"]") - - if obj_start == -1 and array_start == -1: - raise RuntimeError(f"VAT command {cmd}: no JSON data.") - - if obj_start < array_start or array_start == -1: - start = obj_start - end = obj_end + 1 - else: - start = array_start - end = array_end + 1 - out = out[start:end] - json_out = json.loads(out) - return json_out - - return None - - def vat_terminal_close(self): - """Close VAT terminal.""" - # interactive terminal is dead, we only need to close session - if not self._exec_failure: - try: - self._ssh.interactive_terminal_exec_command( - self._tty, u"quit", self.__LINUX_PROMPT - ) - except Exception: - vpp_pid = get_vpp_pid(self._node) - if vpp_pid: - if isinstance(vpp_pid, int): - logger.trace( - f"VPP running on node {self._node[u'host']}." - ) - else: - logger.error( - f"More instances of VPP running " - f"on node {self._node[u'host']}." - ) - else: - logger.error( - f"VPP not running on node {self._node[u'host']}." - ) - raise RuntimeError( - f"Failed to close VAT console " - f"on node {self._node[u'host']}" - ) - try: - self._ssh.interactive_terminal_close(self._tty) - except Exception: - raise RuntimeError( - f"Cannot close interactive terminal " - f"on node {self._node[u'host']}" - ) - - def vat_terminal_exec_cmd_from_template(self, vat_template_file, **args): - """Execute VAT script from a file. - - :param vat_template_file: Template file name of a VAT script. - :param args: Dictionary of parameters for VAT script. - :returns: List of JSON objects returned by VAT. - """ - file_path = f"{Constants.RESOURCES_TPL_VAT}/{vat_template_file}" - - with open(file_path, u"rt") as template_file: - cmd_template = template_file.readlines() - ret = list() - for line_tmpl in cmd_template: - vat_cmd = line_tmpl.format(**args) - ret.append(self.vat_terminal_exec_cmd(vat_cmd.replace(u"\n", u""))) - return ret diff --git a/resources/libraries/python/VatJsonUtil.py b/resources/libraries/python/VatJsonUtil.py deleted file mode 100644 index 3e956e790d..0000000000 --- a/resources/libraries/python/VatJsonUtil.py +++ /dev/null @@ -1,218 +0,0 @@ -# Copyright (c) 2021 Cisco and/or its affiliates. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at: -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Utilities to work with JSON data format from VAT.""" - -from robot.api import logger - -from resources.libraries.python.parsers.JsonParser import JsonParser - - -class VatJsonUtil: - """Utilities to work with JSON data format from VAT.""" - - @staticmethod - def _convert_mac_to_number_list(mac_address): - """Convert MAC address string to list of decimal numbers. - - Converts a ":" separated MAC address to decimal number list as used - in JSON interface dump. - - :param mac_address: MAC address. - :type mac_address: str - :returns: List representation of MAC address. - :rtype: list - """ - list_mac = list() - for num in mac_address.split(u":"): - list_mac.append(int(num, 16)) - return list_mac - - @staticmethod - def get_vpp_interface_by_mac(interfaces_list, mac_address): - """Return interface dictionary from interface_list by MAC address. - - Extracts interface dictionary from all of the interfaces in interfaces - list parsed from JSON according to mac_address of the interface. - - :param interfaces_list: Interfaces parsed from JSON. - :param mac_address: MAC address of interface we are looking for. - :type interfaces_list: dict - :type mac_address: str - :returns: Interface from JSON. - :rtype: dict - """ - interface_dict = dict() - list_mac_address = VatJsonUtil._convert_mac_to_number_list(mac_address) - logger.trace( - f"MAC address {mac_address} converted to list {list_mac_address}." - ) - for interface in interfaces_list: - # TODO: create vat json integrity checking and move there - if u"l2_address" not in interface: - raise KeyError( - u"key l2_address not found in interface dict." - u"Probably input list is not parsed from correct VAT " - u"json output." - ) - if u"l2_address_length" not in interface: - raise KeyError( - u"key l2_address_length not found in interface " - u"dict. Probably input list is not parsed from correct " - u"VAT json output." - ) - mac_from_json = interface[u"l2_address"][:6] - if mac_from_json == list_mac_address: - if interface[u"l2_address_length"] != 6: - raise ValueError(u"l2_address_length value is not 6.") - interface_dict = interface - break - return interface_dict - - @staticmethod - def update_vpp_interface_data_from_json(node, interface_dump_json): - """Update vpp node data in node__DICT from JSON interface dump. - - This method updates vpp interface names and sw if indexes according to - interface MAC addresses found in interface_dump_json. - - :param node: Node dictionary. - :param interface_dump_json: JSON output from dump_interface_list VAT - command. - :type node: dict - :type interface_dump_json: str - """ - interface_list = JsonParser().parse_data(interface_dump_json) - for ifc in node[u"interfaces"].values(): - if_mac = ifc[u"mac_address"] - interface_dict = VatJsonUtil.get_vpp_interface_by_mac( - interface_list, if_mac - ) - if not interface_dict: - logger.trace(f"Interface {ifc} not found by MAC {if_mac}") - ifc[u"vpp_sw_index"] = None - continue - ifc[u"name"] = interface_dict[u"interface_name"] - ifc[u"vpp_sw_index"] = interface_dict[u"sw_if_index"] - ifc[u"mtu"] = interface_dict[u"mtu"] - - @staticmethod - def get_interface_sw_index_from_json(interface_dump_json, interface_name): - """Get sw_if_index from given JSON output by interface name. - - :param interface_dump_json: JSON output from dump_interface_list VAT - command. - :param interface_name: Interface name. - :type interface_dump_json: str - :type interface_name: str - :returns: SW interface index. - :rtype: int - :raises ValueError: If interface not found in interface_dump_json. - """ - logger.trace(interface_dump_json) - interface_list = JsonParser().parse_data(interface_dump_json) - for interface in interface_list: - try: - if interface[u"interface_name"] == interface_name: - index = interface[u"sw_if_index"] - logger.debug( - f"Interface with name {interface_name} " - f"has sw_if_index {index}." - ) - return index - except KeyError: - pass - raise ValueError(f"Interface with name {interface_name} not found.") - - @staticmethod - def get_interface_name_from_json(interface_dump_json, sw_if_index): - """Get interface name from given JSON output by sw_if_index. - - :param interface_dump_json: JSON output from dump_interface_list VAT - command. - :param sw_if_index: SW interface index. - :type interface_dump_json: str - :type sw_if_index: int - :returns: Interface name. - :rtype: str - :raises ValueError: If interface not found in interface_dump_json. - """ - logger.trace(interface_dump_json) - interface_list = JsonParser().parse_data(interface_dump_json) - for interface in interface_list: - try: - if interface[u"sw_if_index"] == sw_if_index: - interface_name = interface[u"interface_name"] - logger.debug( - f"Interface with sw_if_index {sw_if_index} " - f"has name {interface_name}." - ) - return interface_name - except KeyError: - pass - raise ValueError(f"Interface with sw_if_index {sw_if_index} not found.") - - @staticmethod - def get_interface_mac_from_json(interface_dump_json, sw_if_index): - """Get interface MAC address from given JSON output by sw_if_index. - - :param interface_dump_json: JSON output from dump_interface_list VAT - command. - :param sw_if_index: SW interface index. - :type interface_dump_json: str - :type sw_if_index: int - :returns: Interface MAC address. - :rtype: str - :raises ValueError: If interface not found in interface_dump_json. - """ - logger.trace(interface_dump_json) - interface_list = JsonParser().parse_data(interface_dump_json) - for interface in interface_list: - try: - if interface[u"sw_if_index"] == sw_if_index: - mac_from_json = interface[u"l2_address"][:6] \ - if u"l2_address" in list(interface.keys()) else u"" - mac_address = u":".join( - f"{item:02x}" for item in mac_from_json - ) - logger.debug( - f"Interface with sw_if_index {sw_if_index} " - f"has MAC address {mac_address}." - ) - return mac_address - except KeyError: - pass - raise ValueError(f"Interface with sw_if_index {sw_if_index} not found.") - - @staticmethod - def verify_vat_retval(vat_out, exp_retval=0, err_msg=u"VAT cmd failed"): - """Verify return value of VAT command. - - VAT command JSON output should be object (dict in python) or array. We - are looking for something like this: { "retval": 0 }. Verification is - skipped if VAT output does not contain return value element or root - elemet is array. - - :param vat_out: VAT command output in python representation of JSON. - :param exp_retval: Expected return value (default 0). - :err_msg: Message to be displayed in case of error (optional). - :type vat_out: dict or list - :type exp_retval: int - :type err_msg: str - :raises RuntimeError: If VAT command return value is incorrect. - """ - if isinstance(vat_out, dict): - retval = vat_out.get(u"retval") - if retval is not None: - if retval != exp_retval: - raise RuntimeError(err_msg) diff --git a/resources/templates/vat/dhcp_proxy_dump.vat b/resources/templates/vat/dhcp_proxy_dump.vat deleted file mode 100644 index 584a58b5c6..0000000000 --- a/resources/templates/vat/dhcp_proxy_dump.vat +++ /dev/null @@ -1 +0,0 @@ -dhcp_proxy_dump {ipv6} diff --git a/resources/templates/vat/dump_interfaces.vat b/resources/templates/vat/dump_interfaces.vat deleted file mode 100644 index dfc5e6939d..0000000000 --- a/resources/templates/vat/dump_interfaces.vat +++ /dev/null @@ -1,3 +0,0 @@ -sw_interface_dump -dump_interface_table -quit diff --git a/resources/templates/vat/ipsec/ipsec_policy_add.vat b/resources/templates/vat/ipsec/ipsec_policy_add.vat deleted file mode 100644 index db025970b6..0000000000 --- a/resources/templates/vat/ipsec/ipsec_policy_add.vat +++ /dev/null @@ -1 +0,0 @@ -exec ipsec policy add spd {spd_id} priority {priority} {direction} action {action} {selector} diff --git a/resources/templates/vat/ipsec/ipsec_show.vat b/resources/templates/vat/ipsec/ipsec_show.vat deleted file mode 100644 index 0859d878c9..0000000000 --- a/resources/templates/vat/ipsec/ipsec_show.vat +++ /dev/null @@ -1 +0,0 @@ -exec show ipsec diff --git a/resources/templates/vat/lisp/add_lisp_adjacency.vat b/resources/templates/vat/lisp/add_lisp_adjacency.vat deleted file mode 100644 index 9c33625f6b..0000000000 --- a/resources/templates/vat/lisp/add_lisp_adjacency.vat +++ /dev/null @@ -1 +0,0 @@ -lisp_add_del_adjacency add vni {vni} reid {deid}{deid_prefix} leid {seid}{seid_prefix} diff --git a/resources/templates/vat/lisp/add_lisp_local_eid.vat b/resources/templates/vat/lisp/add_lisp_local_eid.vat deleted file mode 100644 index 4f57549d75..0000000000 --- a/resources/templates/vat/lisp/add_lisp_local_eid.vat +++ /dev/null @@ -1 +0,0 @@ -lisp_add_del_local_eid vni {vni} eid {eid}/{eid_prefix} locator-set {locator_name} \ No newline at end of file diff --git a/resources/templates/vat/lisp/add_lisp_local_eid_mac.vat b/resources/templates/vat/lisp/add_lisp_local_eid_mac.vat deleted file mode 100644 index cf0fb3221c..0000000000 --- a/resources/templates/vat/lisp/add_lisp_local_eid_mac.vat +++ /dev/null @@ -1 +0,0 @@ -lisp_add_del_local_eid vni {vni} eid {eid} locator-set {locator_name} \ No newline at end of file diff --git a/resources/templates/vat/lisp/add_lisp_locator.vat b/resources/templates/vat/lisp/add_lisp_locator.vat deleted file mode 100644 index 4d50326883..0000000000 --- a/resources/templates/vat/lisp/add_lisp_locator.vat +++ /dev/null @@ -1 +0,0 @@ -lisp_add_del_locator locator-set {lisp_name} sw_if_index {sw_if_index} p {priority} w {weight} \ No newline at end of file diff --git a/resources/templates/vat/lisp/add_lisp_locator_set.vat b/resources/templates/vat/lisp/add_lisp_locator_set.vat deleted file mode 100644 index 0dccbb71c9..0000000000 --- a/resources/templates/vat/lisp/add_lisp_locator_set.vat +++ /dev/null @@ -1 +0,0 @@ -lisp_add_del_locator_set locator-set {lisp_name} \ No newline at end of file diff --git a/resources/templates/vat/lisp/add_lisp_map_resolver.vat b/resources/templates/vat/lisp/add_lisp_map_resolver.vat deleted file mode 100644 index 8daa286e8e..0000000000 --- a/resources/templates/vat/lisp/add_lisp_map_resolver.vat +++ /dev/null @@ -1 +0,0 @@ -lisp_add_del_map_resolver {address} \ No newline at end of file diff --git a/resources/templates/vat/lisp/add_lisp_remote_mapping.vat b/resources/templates/vat/lisp/add_lisp_remote_mapping.vat deleted file mode 100644 index 6dcb4f91cd..0000000000 --- a/resources/templates/vat/lisp/add_lisp_remote_mapping.vat +++ /dev/null @@ -1 +0,0 @@ -lisp_add_del_remote_mapping add vni {vni} eid {deid}{deid_prefix} seid {seid}{seid_prefix} rloc {rloc} diff --git a/resources/templates/vat/lisp/del_lisp_adjacency.vat b/resources/templates/vat/lisp/del_lisp_adjacency.vat deleted file mode 100644 index a507adce4a..0000000000 --- a/resources/templates/vat/lisp/del_lisp_adjacency.vat +++ /dev/null @@ -1 +0,0 @@ -lisp_add_del_adjacency del vni {vni} reid {deid}/{deid_prefix} leid {seid}/{seid_prefix} diff --git a/resources/templates/vat/lisp/del_lisp_local_eid.vat b/resources/templates/vat/lisp/del_lisp_local_eid.vat deleted file mode 100644 index 1df6b3ffec..0000000000 --- a/resources/templates/vat/lisp/del_lisp_local_eid.vat +++ /dev/null @@ -1 +0,0 @@ -lisp_add_del_local_eid vni {vni} eid {eid}/{eid_prefix} locator-set {locator_name} del \ No newline at end of file diff --git a/resources/templates/vat/lisp/del_lisp_local_eid_mac.vat b/resources/templates/vat/lisp/del_lisp_local_eid_mac.vat deleted file mode 100644 index 1c188bc039..0000000000 --- a/resources/templates/vat/lisp/del_lisp_local_eid_mac.vat +++ /dev/null @@ -1 +0,0 @@ -lisp_add_del_local_eid vni eid {eid} locator-set {locator_name} del \ No newline at end of file diff --git a/resources/templates/vat/lisp/del_lisp_locator.vat b/resources/templates/vat/lisp/del_lisp_locator.vat deleted file mode 100644 index 243e113e59..0000000000 --- a/resources/templates/vat/lisp/del_lisp_locator.vat +++ /dev/null @@ -1 +0,0 @@ -lisp_add_del_locator locator-set {lisp_name} sw_if_index {sw_if_index} p {priority} w {weight} del diff --git a/resources/templates/vat/lisp/del_lisp_locator_set.vat b/resources/templates/vat/lisp/del_lisp_locator_set.vat deleted file mode 100644 index 11049f9c50..0000000000 --- a/resources/templates/vat/lisp/del_lisp_locator_set.vat +++ /dev/null @@ -1 +0,0 @@ -lisp_add_del_locator_set locator-set {lisp_name} del \ No newline at end of file diff --git a/resources/templates/vat/lisp/del_lisp_map_resolver.vat b/resources/templates/vat/lisp/del_lisp_map_resolver.vat deleted file mode 100644 index 36de8a56b2..0000000000 --- a/resources/templates/vat/lisp/del_lisp_map_resolver.vat +++ /dev/null @@ -1 +0,0 @@ -lisp_add_del_map_resolver {address} del \ No newline at end of file diff --git a/resources/templates/vat/lisp/del_lisp_remote_mapping.vat b/resources/templates/vat/lisp/del_lisp_remote_mapping.vat deleted file mode 100644 index 515611ffd0..0000000000 --- a/resources/templates/vat/lisp/del_lisp_remote_mapping.vat +++ /dev/null @@ -1 +0,0 @@ -lisp_add_del_remote_mapping del vni {vni} eid {deid}/{deid_prefix} seid {seid}/{seid_prefix} rloc {rloc} diff --git a/resources/templates/vat/lisp/lisp_eid_table_add_del_map.vat b/resources/templates/vat/lisp/lisp_eid_table_add_del_map.vat deleted file mode 100644 index beba91c60a..0000000000 --- a/resources/templates/vat/lisp/lisp_eid_table_add_del_map.vat +++ /dev/null @@ -1 +0,0 @@ -lisp_eid_table_add_del_map vni {vni} {bd_or_vrf} \ No newline at end of file diff --git a/resources/templates/vat/lisp/lisp_gpe_iface.vat b/resources/templates/vat/lisp/lisp_gpe_iface.vat deleted file mode 100644 index 1f5eaf0880..0000000000 --- a/resources/templates/vat/lisp/lisp_gpe_iface.vat +++ /dev/null @@ -1 +0,0 @@ -lisp_gpe_add_del_iface {state} \ No newline at end of file diff --git a/resources/templates/vat/lisp/lisp_gpe_status.vat b/resources/templates/vat/lisp/lisp_gpe_status.vat deleted file mode 100644 index 5c4080afc5..0000000000 --- a/resources/templates/vat/lisp/lisp_gpe_status.vat +++ /dev/null @@ -1 +0,0 @@ -lisp_gpe_enable_disable {state} diff --git a/resources/templates/vat/lisp/lisp_status.vat b/resources/templates/vat/lisp/lisp_status.vat deleted file mode 100644 index d7e97577d6..0000000000 --- a/resources/templates/vat/lisp/lisp_status.vat +++ /dev/null @@ -1 +0,0 @@ -lisp_enable_disable {state} diff --git a/resources/templates/vat/lisp/show_lisp_eid_table.vat b/resources/templates/vat/lisp/show_lisp_eid_table.vat deleted file mode 100644 index 4a47a8fdef..0000000000 --- a/resources/templates/vat/lisp/show_lisp_eid_table.vat +++ /dev/null @@ -1 +0,0 @@ -lisp_eid_table_dump \ No newline at end of file diff --git a/resources/templates/vat/lisp/show_lisp_gpe_tunnel.vat b/resources/templates/vat/lisp/show_lisp_gpe_tunnel.vat deleted file mode 100644 index 802cfbb6a0..0000000000 --- a/resources/templates/vat/lisp/show_lisp_gpe_tunnel.vat +++ /dev/null @@ -1 +0,0 @@ -# TODO: Implement when VPP-334 is fixed. \ No newline at end of file diff --git a/resources/templates/vat/lisp/show_lisp_locator_set.vat b/resources/templates/vat/lisp/show_lisp_locator_set.vat deleted file mode 100644 index 4f775ff47a..0000000000 --- a/resources/templates/vat/lisp/show_lisp_locator_set.vat +++ /dev/null @@ -1 +0,0 @@ -lisp_locator_set_dump {filter} \ No newline at end of file diff --git a/resources/templates/vat/lisp/show_lisp_map_register.vat b/resources/templates/vat/lisp/show_lisp_map_register.vat deleted file mode 100644 index ea6847862e..0000000000 --- a/resources/templates/vat/lisp/show_lisp_map_register.vat +++ /dev/null @@ -1 +0,0 @@ -show_lisp_map_register_state \ No newline at end of file diff --git a/resources/templates/vat/lisp/show_lisp_map_request_mode.vat b/resources/templates/vat/lisp/show_lisp_map_request_mode.vat deleted file mode 100644 index 2c8a44ee5c..0000000000 --- a/resources/templates/vat/lisp/show_lisp_map_request_mode.vat +++ /dev/null @@ -1 +0,0 @@ -show_lisp_map_request_mode \ No newline at end of file diff --git a/resources/templates/vat/lisp/show_lisp_map_resolver.vat b/resources/templates/vat/lisp/show_lisp_map_resolver.vat deleted file mode 100644 index e74dab9e87..0000000000 --- a/resources/templates/vat/lisp/show_lisp_map_resolver.vat +++ /dev/null @@ -1 +0,0 @@ -lisp_map_resolver_dump \ No newline at end of file diff --git a/resources/templates/vat/lisp/show_lisp_map_server.vat b/resources/templates/vat/lisp/show_lisp_map_server.vat deleted file mode 100644 index 3f7dd08a85..0000000000 --- a/resources/templates/vat/lisp/show_lisp_map_server.vat +++ /dev/null @@ -1 +0,0 @@ -lisp_map_server_dump \ No newline at end of file diff --git a/resources/templates/vat/lisp/show_lisp_petr_config.vat b/resources/templates/vat/lisp/show_lisp_petr_config.vat deleted file mode 100644 index e12be15f84..0000000000 --- a/resources/templates/vat/lisp/show_lisp_petr_config.vat +++ /dev/null @@ -1 +0,0 @@ -show_lisp_use_petr \ No newline at end of file diff --git a/resources/templates/vat/lisp/show_lisp_pitr.vat b/resources/templates/vat/lisp/show_lisp_pitr.vat deleted file mode 100644 index e1280d16ba..0000000000 --- a/resources/templates/vat/lisp/show_lisp_pitr.vat +++ /dev/null @@ -1 +0,0 @@ -show_lisp_pitr \ No newline at end of file diff --git a/resources/templates/vat/lisp/show_lisp_rloc_config.vat b/resources/templates/vat/lisp/show_lisp_rloc_config.vat deleted file mode 100644 index 78c58ea92e..0000000000 --- a/resources/templates/vat/lisp/show_lisp_rloc_config.vat +++ /dev/null @@ -1 +0,0 @@ -show_lisp_rloc_probe_state \ No newline at end of file diff --git a/resources/templates/vat/lisp/show_lisp_status.vat b/resources/templates/vat/lisp/show_lisp_status.vat deleted file mode 100644 index 8d4e237ecc..0000000000 --- a/resources/templates/vat/lisp/show_lisp_status.vat +++ /dev/null @@ -1 +0,0 @@ -show_lisp_status diff --git a/resources/templates/vat/show_hardware_detail.vat b/resources/templates/vat/show_hardware_detail.vat deleted file mode 100644 index e3ac7c7576..0000000000 --- a/resources/templates/vat/show_hardware_detail.vat +++ /dev/null @@ -1 +0,0 @@ -exec show hardware detail diff --git a/resources/templates/vat/vpp_route_add.vat b/resources/templates/vat/vpp_route_add.vat deleted file mode 100644 index 73bb5acf8a..0000000000 --- a/resources/templates/vat/vpp_route_add.vat +++ /dev/null @@ -1 +0,0 @@ -ip_route_add_del {network}/{prefix_length} {vrf} {count} {multipath} {via} {sw_if_index} \ No newline at end of file -- 2.16.6