Skip to main content

Package to return structured data from the output of network devices.

Project description

Build Status Code style: black

NTC TEMPLATES

Repository of TextFSM Templates for Network Devices, and Python wrapper for TextFSM's CliTable.

TextFSM is a project built by Google that takes CLI string output and passes each line through a series of regular expressions until it finds a match. The regular expressions use named capture groups to build a text table out of the significant text. The names of the capture groups are used as column headers, and the captured values are stored as rows in the table.

This project provides a large collection of TextFSM Templates (text parsers) for a variety of Networking Vendors. In addition to the templates, there is a function that will convert the CLI output into a CliTable object; the resulting text table is converted into a list of dictionaries mapping the column headers with each row in the table.

Installation and Usage

The project can be installed using either Git or PyPI; if you would like to use the templates outside of this project, then Git is the recommended approach.

Git

$ git clone git@github.com:networktocode/ntc-templates.git
$ 
# Optional steps to install ntc-templates as a python package
$ pip install -e ntc-templates/
$ 

The install can also include the required dev packages, which can be useful for adding or editing templates:

$ git clone git@github.com:networktocode/ntc-templates.git
$ 
# Optional steps to install ntc-templates as a python package
$ pip install -e ntc-templates/[dev]
$ 

PyPI

$ pip install ntc_templates
$ 

To include the dev packages:

$ pip install ntc_templates[dev]
$ 

Usage

>>> from ntc_templates.parse import parse_output
>>> vlan_output = (
        "VLAN Name                             Status    Ports\n"
        "---- -------------------------------- --------- -------------------------------\n"
        "1    default                          active    Gi0/1\n"
        "10   Management                       active    \n"
        "50   VLan50                           active    Fa0/1, Fa0/2, Fa0/3, Fa0/4, Fa0/5,\n"
        "                                                Fa0/6, Fa0/7, Fa0/8\n"
    )
>>> vlan_parsed = parse_output(platform="cisco_ios", command="show vlan", data=vlan_output)
>>> vlan_parsed
[
    {
        'vlan_id': '1',
        'name': 'default',
        'status': 'active',
        'interfaces': ['Gi0/1']
    },
    {
        'vlan_id': '10',
        'name': 'Management',
        'status': 'active',
        'interfaces': []
    },
    {
        'vlan_id': '50',
        'name': 'VLan50', 'status': 'active',
        'interfaces': ['Fa0/1', 'Fa0/2', 'Fa0/3', 'Fa0/4', 'Fa0/5', 'Fa0/6', 'Fa0/7', 'Fa0/8']
    }
]
>>> 

Define Custom Templates Directory

To use a custom templates directory set the environmental variable NTC_TEMPLATES_DIR.

Requirements

  1. index file needs to be defined with standard structure. See
  2. Each custom template should be defined.

To manaully set variable:

export NTC_TEMPLATES_DIR=/path/to/new/location/templates

To set within your program:

import os
os.environ["NTC_TEMPLATES_DIR"] = "/path/to/new/templates/location/templates"

Contributing

Pull requests are welcomed and automatically built and tested through TravisCI.

New Templates

To contribute new templates, each new pull request must include the following:

  • TextFSM template
  • Modified version of the index file
  • Tests
    • Raw version of text to be parsed
    • YAML file containing the expected parsed dictionary

TextFSM Template

TextFSM templates should be placed in the ./templates directory and should adhere to the following NTC-Templates style. The TextFSM template name should be in the following format:

Naming

The template should be named using: {{ vendor_os }}_{{ command_with_underscores }}.textfsm

Ex: cisco_ios_show_cdp_neighbors.textfsm

Note: The vendor name must be valid from the os_choices tests, which is primarily based on Netmiko list of supported vendors. New vendors added should adhere to vendor_os.

Ex: vmware_nsx

Values

The capture group names should be in UPPERCASE.

An example of the proper format is shown below.

Value TIME (\d+:\d+:\d+)
Value TIMEZONE (\S+)
Value DAYWEEK (\w+)
Value MONTH (\d+)
Value DAY (\d+)
Value YEAR (\d+)

Start
  ^${TIME}\s+${TIMEZONE}\s+${DAYWEEK}\s+${DAY}/${MONTH}/${YEAR} -> Record
  ^. -> Error
States

If the raw output has a heading, the Start state should match on the column headings and then transition to another state that will match the device's output table with the capture groups. This helps ensure the regex patterns for the capture groups are attempting to match the correct information, and allows templates to easily add additional States for tables that have different headings. Example:

Raw Output

... omitted
Network Next Hop Metric LocPrf Weight Path
*> 111.111.111.111/32 112.112.112.112 4294967295 4294967295 65535 1000 1000 1000 i

Sample Template

Start
# Checking for header
^\s*Network\s+Next(?:\s+|-)[Hh]op\s+Metric\s+LocPrf\s+Weight\s+Path\s*$$ -> BGPTable

BGPTable
 ... omitted

Each state should end with ^. -> Error. This helps to ensure we're accounting for every line within the raw output for the command. This doesn't mean we have to capture all the data as a Value, but we do have to account for it. In addition, it is also good to provide an expression to match blank lines, ^\s*$$

An example would be the following raw output:

NAME: "3640 chassis", DESCR: "3640 chassis"
PID: , VID: 0xFF, SN: FF1045C5

The template would be the following:

Value NAME (.*)
Value DESCRIPTION (.*)

Start
  ^NAME:\s+"${NAME}",\s*DESCR:\s+"${DESCRIPTION}"
  ^PID:\s*,\s*VID:\s*\S+,\s*SN:\s*\S+
  ^\s*$$
  ^. -> Error

Taking a look at the example template above, you notice that we're using \s* and \s+. These are the preferred way to match space characters, and should be used over the literal space character. For example, This\s+is\s+preferred\s*$$ vs This is not preferred$$

  • \s* accounts for zero or more spaces (use when the output may or may not have a space between characters)
  • \s+ accounts for one or more spaces (use when output will have a space, but could have more than one space)

Index File

The Index file binds the templates to the commands being run. Special care has been taken on ordering, as there is potential for issues. e.g. show ip route picking up for show ip router vrf <vrf-name>. We have used a combination of ordering, as defined:

  • OS in alphabetical order
  • Template name in length order
  • When length is the same, use alphabetical order of command name
  • Keep space between OS's

Example:

Template, Hostname, Platform, Command

# same os, same length, used alphabetical order of command name
arista_eos_show_mlag.textfsm, .*, arista_eos, sh[[ow]] ml[[ag]]
arista_eos_show_vlan.textfsm, .*, arista_eos, sh[[ow]] vl[[an]]

# os in alphabetical order and space between cisco_asa and arista_eos
cisco_asa_dir.textfsm,  .*, cisco_asa, dir

# same os, template name length different and space between cisco_asa and cisco_ios
cisco_ios_show_capability_feature_routing.textfsm,  .*, cisco_ios, sh[[ow]] cap[[ability]] f[[eature]] r[[outing]]
cisco_ios_show_interface_transceiver.textfsm, .*, cisco_ios, sh[[ow]] int[[erface]] trans[[ceiver]]
cisco_ios_show_cdp_neighbors_detail.textfsm, .*, cisco_ios, sh[[ow]] c[[dp]] neig[[hbors]] det[[ail]]

Tests

Tests will be located in ./tests with the following hierarchy:

  • ./tests/{{ vendor_os }}/{{ command_name }}/

The {{ command_name }} directory should include the .raw file that includes the raw output of the command to be parsed, and the .yml file of the returned structured data.

$ ls tests/cisco_ios/show_clock/
cisco_ios_show_clock.yml
cisco_ios_show_clock.raw
$ 
Raw version of input text

The raw text file should contain only the output of the CLI command to be parsed. It should not contain the CLI command itself.

An example of the proper format is shown below:

$ cat tests/cisco_ios/show_clock/cisco_ios_show_clock.raw
*18:57:38.347 UTC Mon Oct 19 2015
$ 
YAML file containing expected parsed dictionary

The parsed file should match the data that is returned from the parse_output function discussed in the beginning. Dictionary keys should be in lowercase.

The parsed text file should be placed in a directory in the ./tests directory with the same name as the template file but replace .textfsm file extension with .yml. The raw text file and the parsed text file should be in the same directory. ex. ./tests/cisco_ios/show_clock/

There are available helpers to create the parsed file in the correct format (See Development Helper Scripts below).

An example of the proper format is shown below:

$ cat ./tests/cisco_ios/show_clock/cisco_ios_show_clock.yml
---
parsed_sample:
  - time: "18:57:38.347"
    timezone: "UTC"
    dayweek: "Mon"
    month: "Oct"
    day: "19"
    year: "2015"
$ 

Multiple raw and parsed files are supported per directory, and are encouraged, as there are differences depending on version, length, etc. Additional test files and more real life data helps ensure backwards compatibility is maintained as each template is updated and merged into the repo.

All YAML files must adhere to the YAML standards defined in the .yamllint file in the root directory. Yamllint provides thorough documentation of their configuration settings here.

Development Helper Scripts

A cli utility is provided to assist with properly building the parsed files. This utility depends on some packages listed in the dev install requirements; see Install and Usage for directions on installing the dev requirements. All arguments that can be passed to the script are mutually exclusive (i.e. you can only pass one argument). The file can be made executable with the chmod +x development_scripts.py command. The arguments are:

  • -y: Takes the path to a YAML file and ensures that the file adheres to the .yamllint settings
  • -yd: Takes a glob path to a directory or directories that will ensure all files ending in .yml adhere to the .yamllint settings
  • -c: Takes the path to a .raw file, and generates the parsed data and saves the results adjacent to the .raw file following the defined standards in .yamllint.
  • -cd: Takes a glob path to a directory or directories containing .raw files, and creates the appropriate parsed files in the appropriate directory.

The -y and -yd arguments are designed to allow developers to generate the expected parsed file how they want, and ensure that the formatting adheres to the defined standard for this project.

The -c and -cd arguments use lib.ntc_templates.parse.parse_output() to generate the parsed data; this means that you can use these arguments to auto-generate the test .yml file(s) for new templates; just be sure that the template's parsing behavior meets expectations. In order for the data to be parsed, the template must be placed in templates/ and the templates/index file must be updated to correctly point to the template file(s).

$ ./development_scripts.py -yd tests/cisco_ios/show_mac-address-table
tests/cisco_ios/show_mac-address-table/cisco_ios_show_mac-address-table2.yml
tests/cisco_ios/show_mac-address-table/cisco_ios_show_mac-address-table3.yml
tests/cisco_ios/show_mac-address-table/cisco_ios_show_mac-address-table5.yml
tests/cisco_ios/show_mac-address-table/cisco_ios_show_mac-address-table4.yml
tests/cisco_ios/show_mac-address-table/cisco_ios_show_mac-address-table.yml
$
$ ls tests/arista_eos/show_version/
arista_eos_show_version.raw
$
$ ./development_scripts.py -c tests/arista_eos/show_version/arista_eos_show_version.txt
$ ls tests/arista_eos/show_version/
arista_eos_show_version.raw   arista_eos_show_version.yml
$

Updating/Fixing Existing Templates

When either fixing a bug within a template or adding additional Values to be captured, additional test files should be added to ensure backwards compatibility and that the new data is being parsed correctly.

To add additional raw/parsed tests for a command:

  • Navigate to ./tests/{{ vendor_os }}/{{ command_name }}/
  • Create new .raw and .yml files within the directory, preferrably with a name identifying why the data is unique:
    • Existing raw: ./tests/cisco_ios/show_version/cisco_ios_show_version.raw
    • New raw: ./tests/cisco_ios/show_version/cisco_ios_show_version_stack_platforms.raw
    • Existing parsed: ./tests/cisco_ios/show_version/cisco_ios_show_version.yml
    • New parsed: ./tests/cisco_ios/show_version/cisco_ios_show_version_stack_platforms.yml

Testing

You can test your changes locally within your Git branch before submitting a PR. If you do not have tox already installed, you can do that using pip or your systems package manager. Tox should be ran inside the ntc-templates root directory. The tox file is configured to run against python3.6,python3.7, and python3.8, if none/some of those python versions are unavailable tox will skip them. The tox.ini file can be updated with an available Python version.

$ tox
GLOB sdist-make: /home/travis/build/networktocode/ntc-templates/setup.py
py36 create: /home/travis/build/networktocode/ntc-templates/.tox/py36
py36 inst: /home/travis/build/networktocode/ntc-templates/.tox/.tmp/package/1/ntc_templates-1.6.0.zip
py36 installed: appdirs==1.4.4,attrs==20.3.0,black==20.8b1,click==7.1.2,dataclasses==0.8,future==0.18.2,importlib-metadata==3.7.0,iniconfig==1.1.1,mypy-extensions==0.4.3,ntc-templates==1.6.0,packaging==20.9,pathspec==0.8.1,pluggy==0.13.1,py==1.10.0,pyparsing==2.4.7,pytest==6.2.2,PyYAML==5.4.1,regex==2020.11.13,ruamel.yaml==0.16.12,ruamel.yaml.clib==0.2.2,six==1.15.0,textfsm==1.1.0,toml==0.10.2,typed-ast==1.4.2,typing-extensions==3.7.4.3,yamllint==1.26.0,zipp==3.4.0
py36 run-test-pre: PYTHONHASHSEED='4147443973'
py36 run-test: commands[0] | black ./ --diff --check
All done!  🍰 9 files would be left unchanged.
py36 run-test: commands[1] | yamllint tests/
py36 run-test: commands[2] | pytest -vv
============================= test session starts ==============================
platform linux -- Python 3.6.7, pytest-6.2.2, py-1.10.0, pluggy-0.13.1 -- /home/travis/build/networktocode/ntc-templates/.tox/py36/bin/python
cachedir: .tox/py36/.pytest_cache
rootdir: /home/travis/build/networktocode/ntc-templates
collected 1065 items                                                           

tests/test_development_scripts.py::test_ensure_spacing_for_multiline_comment PASSED [  0%]
tests/test_development_scripts.py::test_ensure_space_after_octothorpe PASSED [  0%]
tests/test_development_scripts.py::test_ensure_space_comments PASSED     [  0%]
tests/test_development_scripts.py::test_update_yaml_comments PASSED      [  0%]
tests/test_development_scripts.py::test_transform_file PASSED            [  0%]
tests/test_testcases_exists.py::test_verify_parsed_and_reference_data_exists[tests/yamaha/show_environment] PASSED [ 99%]
tests/test_testcases_exists.py::test_verify_parsed_and_reference_data_exists[tests/yamaha/show_ip_route] PASSED [100%]

============================ 1065 passed in 22.59s =============================
py37 create: /home/travis/build/networktocode/ntc-templates/.tox/py37
SKIPPED: InterpreterNotFound: python3.7
py38 create: /home/travis/build/networktocode/ntc-templates/.tox/py38
SKIPPED: InterpreterNotFound: python3.8
___________________________________ summary ____________________________________
  py36: commands succeeded
SKIPPED:  py37: InterpreterNotFound: python3.7
SKIPPED:  py38: InterpreterNotFound: python3.8
  congratulations :)
The command "tox" exited with 0.


Done. Your build exited with 0.
$

Questions

For any questions or comments, please feel free to swing by the networktocode slack channel.

Sign up here

CHANGELOG

Changelog should be generated using github_changelog_generator

FAQ

From an outsiders view, some design choices, requirements, and testing procedures can seem arbitrary. The following list of FAQ is intended to help provide context and better guide users and contributors of ntc-templates.

Why is there a requirement to use Error in every template?

Ensuring that the textfsm template can account for every line is the only method to ensure that data was not accidentally missed. Take the following example. Initially we account for status to be:

Value STATUS (up|down)

Given the result of:

Interface                      Status         Protocol Description
Gi0/0/1                        admin down     down
Gi0/0/2                        up             up       ISP Connection
Gi0/0/3                        down           down

The output would miss the G0/0/1 interface, since the STATUS of admin down not known. If this was a low percentage use case, it can go undetected, and result in incorrect information being returned. Instead, by ensuring that we fail fast, an Error is raised and hopefully GitHub Issue is put in.

Then why isn't Error used in all templates?

Initially the controls were not as strong, so many templates were put in until issues like the previous became an issue.

Does the project support requests for additional templates or additional data in an existing template?

We are no longer considering additional template requests at this time. The project has existed for over 5 years (initially within ntc-ansible) and nearly 200 template at this point any additional requests are essentially edge use cases. Meaning, for five years of usage, no one else has asked for this feature. There is a limited maintainers who primarily use their free time to maintain the project.

Are you open to adding maintainers to the project?

Yes, we would consider giving a proven member of the project and community maintainer rights. Please inquiry emailing info@networktocode.com.

I simply want to add my template to the project, I do not want to add all of these tests and controls, can I just do so?

Short answer no, from an outsiders point of view the contributor requirements may seem overly complex, however features added by engineers rarely come back to support them. The burden of support is on the maintainers and a certain level of quality assurance is required for that to happen. That includes updating the index file appropriately and adding proper raw and expected value files.

Why don't you grab all of the data in the template?

There is no intention for ntc-templates to become feature complete, some of the data is less interesting, or can be better understood from other commands. This is actually an area where the project chose to be loose, as we do not want to over-burden the contributor. If you feel that the additional data should be added, you are welcome to add the feature, but it would not be considered a bug, and thus not supported by the maintainers of the this project.

Why does the index order matter?

The "greediness" of the template match ensures that there longest matches first. For example, if show ip ospf was above show ip ospf database, the show ip ospf template would be used in both cases. The additional steps are because of general programmatic hygiene.

Will you accept my template if I create it?

In most cases, yes. However, there are a few edge cases. For example if requesting to add a show cdp neighbors when there is already a show cdp neighbors details template created. That is additional complexity added to the project with little value.

Why was my issue closed?

The most likely reasons are:

  • Did not follow the Issue creation template.
  • Did not provide the data required to act upon the request.
  • A prolonged time with no response.

What is meant that this is a parsing project, not a data modeling project?

The project intends to parse, meaning post processing is assumed in order to normalize the data. This project does not intend to solve that problem set. This is often noted in keys being different between the same command on multiple OS's. This was not intentional as at first there was not strict enforcement. That being said, there is no intention to retrofit this use case for the above stated reasons. This use case is best handled in post processing.

I have never submitted a Pull Request before, how do I do so?

This is outside the scope of this project, but this video should provide the instructions on how to do so.

Does this work on windows?

Based on this PR it should, however this is not a supported option. We are willing to take in qualified Pull Requests to have the feature, but have no intention of actively supporting.

Can you provide general guidance?

This is best handled via real time communication. Feel free to join our slack community (sign up information above) and reach out on the #networktocode channel. Please be aware of timezones, downtimes, and help is performed based on goodwill and timing, and not guaranteed.

Changelog

1.7.0 (2021-03-11)

Full Changelog

Implemented enhancements:

  • Potential naming inconsistencies between ntc-templates and netmiko for fortinet devices #534

Closed issues:

  • arista_eos_show_interfaces incomplete #887
  • cisco_wlc_ssh_show_wlan_sum update - make PMIP_MOBILITY optional #871
  • cisco_nxos_show_ip_route errors out on Route Not Found #869
  • cisco_ios_show_interfaces_description.textfsm fails to parse #866
  • Having trouble with textfsm #858
  • cisco_nxos_show_ip_arp_detail.textfsm fails to parse Age field (Age results are of form 00:14:15 AND 0.732312) #851
  • arista_eos_show_interfaces_status parse failures #834
  • cisco_ios_show_mac-address-table support for pvlans #830
  • Don’t work when parse output of “show fc zone” for Dell s5000 #825
  • update nxos show interface to capture discards #819
  • change key names to match ios template #816
  • cisco_nxos_show_environment return an empty list #790
  • cisco show sip-ua register status #787
  • Issue with cisco_ios_show_vrf.textfsm template #786
  • version of OS can differ o/p, how to handle such cases #782
  • NXSOS SHOW_INVENTORY ALL #778
  • ISSUE with show bgp neighboor template IOS XR #746

Merged pull requests:

  • new alcatel_sros tmpl, 'show service sdp' #886 (h4ndzdatm0ld)
  • New Template: alcatel_sros_show_router_rsvp_interface #884 (h4ndzdatm0ld)
  • #784-cisco_asa_show_running-config_all_crypto_map.textfsm #883 (diepes)
  • New template: cisco_ios_show_alert_counters.textfsm #881 (FragmentedPacket)
  • Bugfix: Media type update for cisco_ios_show_interfaces #879 (FragmentedPacket)
  • new sros template #877 (h4ndzdatm0ld)
  • cisco_wlc_ssh_show_wlan_sum update - make PMIP_MOBILITY optional #872 (progala)
  • Fixs #869 cisco nxos show ip route not found #870 (diepes)
  • Fix readme #868 (jeffkala)
  • add test security-policy-match to palo alto #867 (jeffkala)
  • New template: yamaha #865 (akira6592)
  • Add Environment Variable Option for Custom Template Location #863 (jeffkala)
  • New Template: hp_procurve_show_port-security #862 (adraf82)
  • Adding in/out route-map parsing to cisco ios show ip bgp nei template #861 (nnaukwal)
  • Fortinet updates #860 (refriedjello)
  • Fixes #851 and add new template #857 (diepes)
  • New Templates: Cisco IOS show vrrp brief and all #856 (mjbear)
  • Adding new templates for show (radius|tacacs) summary output #855 (mjbear)
  • New Template: Cisco WLC show port summary and show stats port summary #854 (mjbear)
  • New Template: Cisco WLC show time (for time and NTP information) #853 (mjbear)
  • New Template - cisco_ios_show_object-group #850 (pkomissarov)
  • cisco_nxos_show_ip_bgp_summary_vrf update to support 32-bits ASN outputs #849 (burningnode)
  • New Template: Cisco WLC show mobility anchor #847 (mjbear)
  • New Template: Cisco WLC show redundancy summary and detail #846 (mjbear)
  • Fixes #773 CiscoASA-show_vpn-sessiondb_SW_update #845 (diepes)
  • Fixes#811 arista eos show ip route #843 (diepes)
  • updated template and added test file #842 (adraf82)
  • Fix#784 new: cisco asa show running all cryprom map #840 (diepes)
  • Fix#788 ios show int fc #839 (diepes)
  • Fixes #790 - new template cisco_nxos_show_environment.textfsm #838 (diepes)
  • Add codeowners file #837 (jmcgill298)
  • Enhancment: EOS show int status - account for LAG members #835 (jmcgill298)
  • update Cisco IOS show tacacs template to support parsing of server name in newer configurations #833 (anirudhkamath)
  • added fortinet get system arp #832 (wmclendon)
  • Enhancement: Change fortinet_fortios to fortinet per Netmiko #831 (jmcgill298)
  • New Template: hp_procurve_show_interfaces_brief.textfsm #829 (adraf82)
  • New template: Vyatta/VyOS BGP summary #828 (jpbede)
  • New template: dell_powerconnect #827 (nidebr)
  • Some sros commands #824 (kvlangenhove)
  • updated hp_procurve_show_interfaces template for backward compatibility #823 (adraf82)
  • New template: arista_eos_show_interfaces_description #822 (rich-day)
  • Bugfix: issues with cisco_nxos_show_ip_dhcp_relay_address #821 (wvandeun)
  • Bugfix: URL ACL property in cisco_wlc_ssh_show_interface_detailed #820 (wvandeun)
  • Bugfix: added 'Autostate exclude' to avoid error #818 (abaretta)
  • fix unconfigured DHCP issue in cisco_wlc_ssh_show_interface_detailed #817 (wvandeun)
  • cisco_nxos show version - extract serial from "Processor board ID" #813 (diepes)
  • Bugfix: cisco ios show ip access-list #809 (jpobeda)
  • Bugfix: IOS show lldp neig - fix neighbor name with spaces #799 (realvitya)

v1.6.0 (2020-10-26)

Full Changelog

Implemented enhancements:

  • Creation of a Faq #716

Closed issues:

  • This is not a data modeling project. So is there any data modeling project can work with this? #802
  • Black 20.b0 breaks tox test #794
  • Unable to Parse show version on IOSv Device #780
  • TXTFSM will not process template even though Regex checker says line is acceptable for ciena SAOS #779
  • cisco_nxos_show_ip_bgp_summary.textfsm doesn't account for dual line bgp when output is too wide #766
  • arista eos show mac address-table is choking on case sensitivity on line Total Mac Addresses for this criterion: 0 #764

Merged pull requests:

v1.5.0 (2020-06-15)

Full Changelog

Implemented enhancements:

  • Broadcom ICOS/Fastpath Support? #726

Fixed bugs:

  • Cisco IOS show cdp neighbors issue #727
  • Cisco IOS Show Interface Switchport does not parse multi-line VLAN Trunks #642
  • Cisco ASA Show interface does not catch unnamed interfaces #627
  • Fixes missing interfaces on down interfaces #734 (jvanderaa)

Closed issues:

  • Cisco ASA "show vpn-sessiondb anyconnect" parser doesn't support IPv6 addresses #751
  • failing testsuite #743
  • I would like to contribute the PR for adding new cisco_wlc_ssh_show_ap_image_all #739
  • Template help for multiple states #737
  • textfsm.parser.TextFSMError: State Error raised. Rule Line: 15. Input Line: show ip arp #686
  • Arista eos - sh ip bgp summ vrf all and sh ip route vrf all template #666
  • Template Creation Help: cisco_xr_admin_show_environment_power to get power supply, voltage and current #648
  • New template: hp_comware_display_interface_textFSM #634
  • cisco_asa_show_failover_state #546

Merged pull requests:

  • Bumping to version 1.5.0 #763 (FragmentedPacket)
  • Arista eos show port channel summary #757 (JoeyG1973)
  • Arista eos show mac address table #756 (JoeyG1973)
  • Template correction for broadcom_icos_show_mac-address-table #754 (alepodj)
  • Fixes #751 - IPv6 support for Cisco ASA 'show vpn-sessiondb anyconnect' #752 (smfeldman)
  • New Template added support for broadcom_icos_show_vlan_brief #750 (alepodj)
  • New Template added support for broadcom_icos_show_lldp_remote-device_all #749 (alepodj)
  • New Template added support for broadcom_icos_show_isdp_neighbors #748 (alepodj)
  • Bugfix: Account for totals - cisco_ios_show_processes_memory_sorted.textfsm #747 (FragmentedPacket)
  • Enhancement for Cisco IOS show interfaces #745 (Yakuza-UA)
  • Added interfaces to arista_eos_show_vrf template #744 (JoeyG1973)
  • Add new template for cisco_wlc_ssh_sh_ap_image_all #742 (conorwu1107)
  • Update index to handle cisco_ios show_ip_bgp_all_summary #738 (Niclnx)
  • Added support for broadcom_icos command show_mac-address-table #736 (alepodj)
  • BugFix: IOS CDP - Better handling of output #735 (jmcgill298)
  • New Template support for broadcom_icos as a new OS and added show_version command #733 (alepodj)
  • New template for ubiquity edgeswitch: show version #732 (saaverdo)
  • New Template for Cisco NX-OS: show forwarding adjacency #722 (Yakuza-UA)
  • BugFix: cisco_ios_show_interfaces_switchport: Made trunking_vlans a list, and changed regex #671 (FragmentedPacket)

* This Changelog was automatically generated by github_changelog_generator

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ntc_templates-1.7.0.tar.gz (176.8 kB view hashes)

Uploaded Source

Built Distribution

ntc_templates-1.7.0-py3-none-any.whl (285.6 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page