From 908416f22222ed3f6e56fa6efd580dbbc31b1ab2 Mon Sep 17 00:00:00 2001 From: itdependsnetworks Date: Mon, 31 Oct 2022 23:33:02 -0400 Subject: [PATCH] Change docs to mkdocs, update dev environment, move to click for scripts --- .bandit.yml | 6 + .dockerignore | 27 + .flake8 | 6 + .github/CODEOWNERS | 2 +- .../bug_report.md} | 4 + .github/ISSUE_TEMPLATE/feature_request.md | 25 + .../pull_request_template.md} | 0 .github/workflows/ci.yml | 148 +- .gitignore | 314 ++-- .pydocstyle.ini | 11 + .readthedocs.yml | 22 + .vale.ini | 20 + .yamllint | 2 +- .yamllint.yml | 12 + CHANGELOG.md | 963 ----------- Dockerfile | 32 + README.md | 477 +----- cli.py | 75 + development_scripts.py | 492 ------ docs/admin/install.md | 35 + docs/admin/release_notes/index.md | 7 + docs/admin/release_notes/version_0.9.md | 88 + docs/admin/release_notes/version_1.1.md | 160 ++ docs/admin/release_notes/version_1.2.md | 21 + docs/admin/release_notes/version_1.3.md | 100 ++ docs/admin/release_notes/version_1.4.md | 184 ++ docs/admin/release_notes/version_1.5.md | 49 + docs/admin/release_notes/version_1.6.md | 45 + docs/admin/release_notes/version_1.7.md | 81 + docs/admin/release_notes/version_2.0.md | 11 + docs/admin/release_notes/version_2.1.md | 42 + docs/admin/release_notes/version_2.2.md | 34 + docs/admin/release_notes/version_2.3.md | 49 + docs/admin/release_notes/version_3.0.md | 34 + docs/admin/release_notes/version_3.1.md | 59 + docs/admin/release_notes/version_3.2.md | 6 + docs/admin/uninstall.md | 7 + docs/admin/upgrade.md | 7 + docs/assets/extra.css | 152 ++ docs/assets/favicon.ico | Bin 0 -> 568 bytes docs/assets/networktocode_bw.png | Bin 0 -> 7562 bytes docs/assets/networktocode_logo.png | Bin 0 -> 5464 bytes docs/assets/networktocode_logo.svg | 150 ++ docs/assets/overrides/partials/copyright.html | 20 + docs/dev/code_reference/parse.md | 5 + docs/dev/contributing.md | 55 + docs/dev/dev_environment.md | 105 ++ docs/dev/dev_parser.md | 256 +++ docs/dev/extending.md | 5 + docs/images/.keep | 0 docs/images/icon-ntc-templates.png | Bin 0 -> 4703 bytes docs/index.md | 6 + docs/requirements.txt | 8 + docs/user/faq.md | 89 + docs/user/lib_getting_started.md | 47 + docs/user/lib_overview.md | 15 + mkdocs.yml | 129 ++ ntc_templates/__init__.py | 8 +- ntc_templates/parse.py | 9 +- poetry.lock | 1474 +++++++++++++++-- pyproject.toml | 125 +- tasks.py | 211 +++ tests/__init__.py | 2 +- tests/test_development_scripts.py | 507 +++++- tests/test_index_order.py | 55 +- ...red_data_against_parsed_reference_files.py | 26 +- tox.ini | 30 - 67 files changed, 4829 insertions(+), 2317 deletions(-) create mode 100644 .bandit.yml create mode 100644 .dockerignore create mode 100644 .flake8 rename .github/{ISSUE_TEMPLATE.md => ISSUE_TEMPLATE/bug_report.md} (92%) create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md rename .github/{PULL_REQUEST_TEMPLATE.md => PULL_REQUEST_TEMPLATE/pull_request_template.md} (100%) create mode 100644 .pydocstyle.ini create mode 100644 .readthedocs.yml create mode 100644 .vale.ini create mode 100644 .yamllint.yml delete mode 100644 CHANGELOG.md create mode 100644 Dockerfile create mode 100644 cli.py delete mode 100755 development_scripts.py create mode 100644 docs/admin/install.md create mode 100644 docs/admin/release_notes/index.md create mode 100644 docs/admin/release_notes/version_0.9.md create mode 100644 docs/admin/release_notes/version_1.1.md create mode 100644 docs/admin/release_notes/version_1.2.md create mode 100644 docs/admin/release_notes/version_1.3.md create mode 100644 docs/admin/release_notes/version_1.4.md create mode 100644 docs/admin/release_notes/version_1.5.md create mode 100644 docs/admin/release_notes/version_1.6.md create mode 100644 docs/admin/release_notes/version_1.7.md create mode 100644 docs/admin/release_notes/version_2.0.md create mode 100644 docs/admin/release_notes/version_2.1.md create mode 100644 docs/admin/release_notes/version_2.2.md create mode 100644 docs/admin/release_notes/version_2.3.md create mode 100644 docs/admin/release_notes/version_3.0.md create mode 100644 docs/admin/release_notes/version_3.1.md create mode 100644 docs/admin/release_notes/version_3.2.md create mode 100644 docs/admin/uninstall.md create mode 100644 docs/admin/upgrade.md create mode 100644 docs/assets/extra.css create mode 100644 docs/assets/favicon.ico create mode 100644 docs/assets/networktocode_bw.png create mode 100644 docs/assets/networktocode_logo.png create mode 100644 docs/assets/networktocode_logo.svg create mode 100644 docs/assets/overrides/partials/copyright.html create mode 100644 docs/dev/code_reference/parse.md create mode 100644 docs/dev/contributing.md create mode 100644 docs/dev/dev_environment.md create mode 100644 docs/dev/dev_parser.md create mode 100644 docs/dev/extending.md create mode 100644 docs/images/.keep create mode 100644 docs/images/icon-ntc-templates.png create mode 100644 docs/index.md create mode 100644 docs/requirements.txt create mode 100644 docs/user/faq.md create mode 100644 docs/user/lib_getting_started.md create mode 100644 docs/user/lib_overview.md create mode 100644 mkdocs.yml create mode 100644 tasks.py delete mode 100644 tox.ini diff --git a/.bandit.yml b/.bandit.yml new file mode 100644 index 0000000000..56f7a83b17 --- /dev/null +++ b/.bandit.yml @@ -0,0 +1,6 @@ +--- +skips: [] +# No need to check for security issues in the test scripts! +exclude_dirs: + - "./tests/" + - "./.venv/" diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000000..2270f4962f --- /dev/null +++ b/.dockerignore @@ -0,0 +1,27 @@ +# Docker related +development/Dockerfile +development/docker-compose*.yml +development/*.env +*.env +environments/ + +# Python +**/*.pyc +**/*.pyo +**/__pycache__/ +**/.pytest_cache/ +**/.venv/ + + +# Other +docs/_build +FAQ.md +.git/ +.gitignore +.github +tasks.py +LICENSE +**/*.log +**/.vscode/ +invoke*.yml +tasks.py diff --git a/.flake8 b/.flake8 new file mode 100644 index 0000000000..1587fc6ced --- /dev/null +++ b/.flake8 @@ -0,0 +1,6 @@ +[flake8] +# E501: Line length is enforced by Black, so flake8 doesn't need to check it +# W503: Black disagrees with this rule, as does PEP 8; Black wins +ignore = E501, W503 +exclude = + .venv diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 8ead4f8d95..4463a20a85 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,2 +1,2 @@ # Default owner(s) of all files in this repository -* @itdependsnetworks @jmcgill298 @FragmentedPacket @jvanderaa +* @itdependsnetworks @jmcgill298 @jvanderaa diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE/bug_report.md similarity index 92% rename from .github/ISSUE_TEMPLATE.md rename to .github/ISSUE_TEMPLATE/bug_report.md index a27afeedb0..b432ffac7e 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,3 +1,7 @@ +--- +name: 🐛 Bug Report +about: Report a reproducible bug in the current release of ntc-templates +--- + + +### Proposed Functionality + + +### Use Case + diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md similarity index 100% rename from .github/PULL_REQUEST_TEMPLATE.md rename to .github/PULL_REQUEST_TEMPLATE/pull_request_template.md diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a251fb92d3..ddadf7bf56 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,60 +11,182 @@ on: # yamllint disable-line rule:truthy rule:comments - "v*" pull_request: ~ +env: + IMAGE_NAME: "ntc-templates" + jobs: black: runs-on: "ubuntu-20.04" + env: + INVOKE_LOCAL: "True" steps: - name: "Check out repository code" uses: "actions/checkout@v2" - name: "Setup environment" uses: "networktocode/gh-action-setup-poetry-environment@v2" - name: "Linting: black" - run: "poetry run black ./ --diff --check" + run: "poetry run invoke black" + bandit: + runs-on: "ubuntu-20.04" + env: + INVOKE_LOCAL: "True" + steps: + - name: "Check out repository code" + uses: "actions/checkout@v2" + - name: "Setup environment" + uses: "networktocode/gh-action-setup-poetry-environment@v2" + - name: "Linting: bandit" + run: "poetry run invoke bandit" + needs: + - "black" + pydocstyle: + runs-on: "ubuntu-20.04" + env: + INVOKE_LOCAL: "True" + steps: + - name: "Check out repository code" + uses: "actions/checkout@v2" + - name: "Setup environment" + uses: "networktocode/gh-action-setup-poetry-environment@v2" + - name: "Linting: pydocstyle" + run: "poetry run invoke pydocstyle" + needs: + - "black" flake8: runs-on: "ubuntu-20.04" + env: + INVOKE_LOCAL: "True" steps: - name: "Check out repository code" uses: "actions/checkout@v2" - name: "Setup environment" uses: "networktocode/gh-action-setup-poetry-environment@v2" - name: "Linting: flake8" - run: "poetry run flake8 ./" + run: "poetry run invoke flake8" needs: - "black" yamllint: runs-on: "ubuntu-20.04" + env: + INVOKE_LOCAL: "True" steps: - name: "Check out repository code" uses: "actions/checkout@v2" - name: "Setup environment" uses: "networktocode/gh-action-setup-poetry-environment@v2" - name: "Linting: yamllint" - run: "poetry run yamllint ./" + run: "poetry run invoke yamllint" needs: - "black" - tests: + build: strategy: fail-fast: true matrix: python-version: ["3.7", "3.8", "3.9", "3.10"] runs-on: "ubuntu-20.04" + env: + PYTHON_VER: "${{ matrix.python-version }}" steps: - name: "Check out repository code" uses: "actions/checkout@v2" - - name: "Set up Python" - uses: "actions/setup-python@v2" + - name: "Setup environment" + uses: "networktocode/gh-action-setup-poetry-environment@v2" + - name: "Get image version" + run: "echo IMAGE_VER=`poetry version -s`-py${{ matrix.python-version }} >> $GITHUB_ENV" + - name: "Set up Docker Buildx" + id: "buildx" + uses: "docker/setup-buildx-action@v1" + - name: "Build" + uses: "docker/build-push-action@v2" with: - python-version: "${{ matrix.python-version }}" - - name: "Install Poetry" - run: "pip install poetry==1.1.15" - - name: "Install Python Packages" - run: "poetry install" - - name: "Running tests" - run: "poetry run pytest -v" + builder: "${{ steps.buildx.outputs.name }}" + context: "./" + push: false + tags: "${{ env.IMAGE_NAME }}:${{ env.IMAGE_VER }}" + file: "./Dockerfile" + cache-from: "type=gha,scope=${{ env.IMAGE_NAME }}-${{ env.IMAGE_VER }}-py${{ matrix.python-version }}" + cache-to: "type=gha,scope=${{ env.IMAGE_NAME }}-${{ env.IMAGE_VER }}-py${{ matrix.python-version }}" + build-args: | + PYTHON_VER=${{ env.PYTHON_VER }} needs: + - "bandit" + - "pydocstyle" - "flake8" - "yamllint" + pylint: + runs-on: "ubuntu-20.04" + strategy: + fail-fast: true + matrix: + python-version: ["3.7"] + env: + PYTHON_VER: "${{ matrix.python-version }}" + steps: + - name: "Check out repository code" + uses: "actions/checkout@v2" + - name: "Setup environment" + uses: "networktocode/gh-action-setup-poetry-environment@v2" + - name: "Get image version" + run: "echo IMAGE_VER=`poetry version -s`-py${{ matrix.python-version }} >> $GITHUB_ENV" + - name: "Set up Docker Buildx" + id: "buildx" + uses: "docker/setup-buildx-action@v1" + - name: "Load the image from cache" + uses: "docker/build-push-action@v2" + with: + builder: "${{ steps.buildx.outputs.name }}" + context: "./" + push: false + load: true + tags: "${{ env.IMAGE_NAME }}:${{ env.IMAGE_VER }}" + file: "./Dockerfile" + cache-from: "type=gha,scope=${{ env.IMAGE_NAME }}-${{ env.IMAGE_VER }}-py${{ matrix.python-version }}" + cache-to: "type=gha,scope=${{ env.IMAGE_NAME }}-${{ env.IMAGE_VER }}-py${{ matrix.python-version }}" + build-args: | + PYTHON_VER=${{ env.PYTHON_VER }} + - name: "Debug: Show docker images" + run: "docker image ls" + - name: "Linting: Pylint" + run: "poetry run invoke pylint" + needs: + - "build" + pytest: + strategy: + fail-fast: true + matrix: + python-version: ["3.7", "3.8", "3.9", "3.10"] + runs-on: "ubuntu-20.04" + env: + PYTHON_VER: "${{ matrix.python-version }}" + steps: + - name: "Check out repository code" + uses: "actions/checkout@v2" + - name: "Setup environment" + uses: "networktocode/gh-action-setup-poetry-environment@v2" + - name: "Get image version" + run: "echo IMAGE_VER=`poetry version -s`-py${{ matrix.python-version }} >> $GITHUB_ENV" + - name: "Set up Docker Buildx" + id: "buildx" + uses: "docker/setup-buildx-action@v1" + - name: "Load the image from cache" + uses: "docker/build-push-action@v2" + with: + builder: "${{ steps.buildx.outputs.name }}" + context: "./" + push: false + load: true + tags: "${{ env.IMAGE_NAME }}:${{ env.IMAGE_VER }}" + file: "./Dockerfile" + cache-from: "type=gha,scope=${{ env.IMAGE_NAME }}-${{ env.IMAGE_VER }}-py${{ matrix.python-version }}" + cache-to: "type=gha,scope=${{ env.IMAGE_NAME }}-${{ env.IMAGE_VER }}-py${{ matrix.python-version }}" + build-args: | + PYTHON_VER=${{ env.PYTHON_VER }} + - name: "Debug: Show docker images" + run: "docker image ls" + - name: "Run Tests" + run: "poetry run invoke pytest" + needs: + - "pylint" publish_gh: name: "Publish to GitHub" runs-on: "ubuntu-20.04" diff --git a/.gitignore b/.gitignore index 483bee49d6..cbb9133b68 100644 --- a/.gitignore +++ b/.gitignore @@ -1,106 +1,37 @@ -# Created by .ignore support plugin (hsz.mobi) -### Windows template -# Windows image file caches -Thumbs.db -ehthumbs.db - -# Folder config file -Desktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msm -*.msp - -# Windows shortcuts -*.lnk -### IPythonNotebook template -# Temporary data -.ipynb_checkpoints/ -### OSX template -*.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk -### JetBrains template -# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm -# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 - -# User-specific stuff: -.idea/ - -## File-based project format: -*.iws +# Ansible Retry Files +*.retry -## Plugin-specific files: - -# IntelliJ -/out/ - -# mpeltonen/sbt-idea plugin -.idea_modules/ - -# JIRA plugin -atlassian-ide-plugin.xml +# Swap files +*.swp -# Crashlytics plugin (for Android Studio and IntelliJ) -com_crashlytics_export_strings.xml -crashlytics.properties -crashlytics-build.properties -fabric.properties -### Python template # Byte-compiled / optimized / DLL files __pycache__/ -.pytest_cache/ *.py[cod] *$py.class - # C extensions *.so # Distribution / packaging .Python -env/ build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ -#lib/ +lib/ lib64/ parts/ sdist/ var/ +wheels/ +pip-wheel-metadata/ +share/python-wheels/ *.egg-info/ .installed.cfg *.egg +MANIFEST # PyInstaller # Usually these files are written by a python script from a template @@ -115,14 +46,16 @@ pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ +.nox/ .coverage .coverage.* .cache nosetests.xml coverage.xml -*,cover +*.cover +*.py,cover .hypothesis/ -.tmp/ +.pytest_cache/ # Translations *.mo @@ -131,6 +64,8 @@ coverage.xml # Django stuff: *.log local_settings.py +db.sqlite3 +db.sqlite3-journal # Flask stuff: instance/ @@ -145,50 +80,229 @@ docs/_build/ # PyBuilder target/ -# IPython Notebook +# Jupyter Notebook .ipynb_checkpoints +# IPython +profile_default/ +ipython_config.py + # pyenv .python-version -# celery beat schedule file +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff celerybeat-schedule +celerybeat.pid -# dotenv -.env +# SageMath parsed files +*.sage.py -# virtualenv +# Environments +.env +.venv +env/ venv/ ENV/ +env.bak/ +venv.bak/ # Spyder project settings .spyderproject +.spyproject # Rope project settings .ropeproject -# Cloned modules used while testing -.ntc-modules/ +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json -*.cfg~ +# Pyre type checker +.pyre/ -templates/index~ +# Editor +.vscode/ -ansible.cfg +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride -helpers/create-parsed.retry +# Thumbnails +._* -hosts +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent -*.py~ +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### Windows ### +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db -create_ntc-templates_parsed.py +# Dump file +*.stackdump -# Ignore pipenv files -**Pipfile -**Pipfile.lock +# Folder config file +[Dd]esktop.ini -# Ignore vscode config -.vscode/ +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +### PyCharm ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### PyCharm Patch ### +# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 + +# *.iml +# modules.xml +# .idea/misc.xml +# *.ipr + +# Sonarlint plugin +# https://plugins.jetbrains.com/plugin/7973-sonarlint +.idea/**/sonarlint/ + +# SonarQube Plugin +# https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin +.idea/**/sonarIssues.xml + +# Markdown Navigator plugin +# https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced +.idea/**/markdown-navigator.xml +.idea/**/markdown-navigator-enh.xml +.idea/**/markdown-navigator/ + +# Cache file creation bug +# See https://youtrack.jetbrains.com/issue/JBR-2257 +.idea/$CACHE_FILE$ + +# CodeStream plugin +# https://plugins.jetbrains.com/plugin/12206-codestream +.idea/codestream.xml + +### vscode ### +.vscode/* +*.code-workspace + +# Rando +creds.env +development/*.txt + +# Invoke overrides +invoke.yml -.nfs* +# Docs +docs/README.md +docs/CHANGELOG.md +public diff --git a/.pydocstyle.ini b/.pydocstyle.ini new file mode 100644 index 0000000000..5c9fbb15de --- /dev/null +++ b/.pydocstyle.ini @@ -0,0 +1,11 @@ +[pydocstyle] +convention = google +inherit = false +match = (?!__init__|conf).*\.py +match-dir = (?!tests)[^\.].* +# D212 is enabled by default in google convention, and complains if we have a docstring like: +# """ +# My docstring is on the line after the opening quotes instead of on the same line as them. +# """ +# We've discussed and concluded that we consider this to be a valid style choice. +add_ignore = D212 \ No newline at end of file diff --git a/.readthedocs.yml b/.readthedocs.yml new file mode 100644 index 0000000000..a9d358eff2 --- /dev/null +++ b/.readthedocs.yml @@ -0,0 +1,22 @@ +--- +# .readthedocs.yaml +# Read the Docs configuration file +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details + +# Required +version: 2 + +# Set the version of Python in the build environment. +build: + os: "ubuntu-22.04" + tools: + python: "3.10" + +mkdocs: + configuration: "mkdocs.yml" + # fail_on_warning: true + +# Use our docs/requirements.txt during installation. +python: + install: + - requirements: "docs/requirements.txt" diff --git a/.vale.ini b/.vale.ini new file mode 100644 index 0000000000..a5ed510495 --- /dev/null +++ b/.vale.ini @@ -0,0 +1,20 @@ +StylesPath = .github/styles +MinAlertLevel = suggestion + +[*.md] +BasedOnStyles = Microsoft, write-good, proselint, alex + +# Microsoft Style Guide disabled rules +Microsoft.Contractions = No +Microsoft.HeadingPunctuation = No +Microsoft.Headings = No +Microsoft.Foreign = No + +# write-good disabled rules +write-good.E-Prime = No + +# alex disabled rules +alex.Condescending = No + +# proseling disabled rules +proselint.Hyperbole = No diff --git a/.yamllint b/.yamllint index 0df5b5674b..7a2c69e50e 100644 --- a/.yamllint +++ b/.yamllint @@ -2,7 +2,7 @@ extends: "default" rules: comments: "enable" - empty-values: "enable" + empty-values: "disable" indentation: indent-sequences: "consistent" line-length: "disable" diff --git a/.yamllint.yml b/.yamllint.yml new file mode 100644 index 0000000000..b49e490c8c --- /dev/null +++ b/.yamllint.yml @@ -0,0 +1,12 @@ +--- +extends: "default" +rules: + comments: "enable" + empty-values: "disable" + indentation: + indent-sequences: "consistent" + line-length: "disable" + quoted-strings: + quote-type: "double" +ignore: | + .venv/ diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 1516d64511..0000000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,963 +0,0 @@ -# Changelog - - -## [unreleased] - -### What's Changed -* New template: cisco_ios_show_crypto_ipsec_sa_detail.textfsm by @nsnelson402 -* New template: cisco_ios_show_crypto_pki_certificates.textfsm by @nsnelson402 - -## [3.1.0] - -### What's Changed -* New template: cisco_ios_show_ip_eigrp_interfaces_detail.textfsm by @nsnelson402 in https://github.com/networktocode/ntc-templates/pull/1181 -* New template: cisco_ios_show_snmp_group.textfsm by @nsnelson402 in https://github.com/networktocode/ntc-templates/pull/1183 -* New templates & updates: Updated support for Arista EOS devices by @ReK42 in https://github.com/networktocode/ntc-templates/pull/1174 -* New template: cisco_xr_show_ipv4_interface.textfsm by @dainok in https://github.com/networktocode/ntc-templates/pull/1162 -* New templates: Add multiple zyxel templates by @elavaud in https://github.com/networktocode/ntc-templates/pull/1142 -* Bug fix: Change huawei_vrf shortest command by @Elinpf in https://github.com/networktocode/ntc-templates/pull/1141 -* Bug fix: Path separator error on windows by @Elinpf in https://github.com/networktocode/ntc-templates/pull/1139 -* New templates: Adding multiple mikrotik routeros templates by @elavaud in https://github.com/networktocode/ntc-templates/pull/1136 -* New template: aruba_os_show_ap_database_long.textfsm by @hagleyj in https://github.com/networktocode/ntc-templates/pull/1134 -* New template: aruba_os_show_ap_radio-database.textfsm by @hagleyj in https://github.com/networktocode/ntc-templates/pull/1133 -* Bug fix: EOS 4.28.XF updated output of codes in `show ip route` by @networkop in https://github.com/networktocode/ntc-templates/pull/1127 -* New template: juniper_junos_show_vlans.textfsm by @showipintbri in https://github.com/networktocode/ntc-templates/pull/1125 -* Bug fix: cisco_ios show ip bgp neighbors advertised-routes output where metric is wider than 6 chars by @viktorkertesz in https://github.com/networktocode/ntc-templates/pull/1124 -* Bug fix: cisco_ios show ip bgp output where metric is wider than 6 chars by @viktorkertesz in https://github.com/networktocode/ntc-templates/pull/1123 -* Bug fix: cisco_nxos_show_int_breief do not match mgmt and vlan by @diepes in https://github.com/networktocode/ntc-templates/pull/1119 -* Bug fix: cisco_ios_show_module updated output for c9200 @diepes in https://github.com/networktocode/ntc-templates/pull/1117 -* Changed: add vlan_id to cisco_ios_show_interfaces by @dainok in https://github.com/networktocode/ntc-templates/pull/1115 -* Bug fix: fix not advertised vlan in cisco_nxos_show_lldp_neighbors_detail by @dainok in https://github.com/networktocode/ntc-templates/pull/1114 -* Added: Additional fields for cisco_ios_show_ip_access-lists.textfsm by @mjuenema in https://github.com/networktocode/ntc-templates/pull/1113 -* Bug fix: Multiple line parsing using lists with textfsm extracting wrong details by @diepes in https://github.com/networktocode/ntc-templates/pull/1112 -* Bug fix: Cisco IOS show boot missing parameter by @diepes in https://github.com/networktocode/ntc-templates/pull/1111 -* New template: arista_eos_show_processes_top_once.textfsm by @pauljorgenson in https://github.com/networktocode/ntc-templates/pull/1110 -* Bug fix: Adding a record without the vlan field for very old HP Procurve switches by @dainok in https://github.com/networktocode/ntc-templates/pull/1108 -* New template: cisco_xr_show_install_active.textfsm by @verbosemode in https://github.com/networktocode/ntc-templates/pull/1105 -* Changed: Clarifies docs about length order by @jvanderaa in https://github.com/networktocode/ntc-templates/pull/1099 -* New template: ubiquiti_edgerouter_show_dhcp_leases.textfsm by @jvanderaa in https://github.com/networktocode/ntc-templates/pull/1097 -* Bug fix: hanges the CRLF to LF to pass tests by @jvanderaa in https://github.com/networktocode/ntc-templates/pull/1096 -* Changed: Additional fields for cisco_nxos_show_ip_route.textfsm by @lamiskin in https://github.com/networktocode/ntc-templates/pull/1093 -* Changed: Additional fields for cisco_nxos_show_ip_interface.textfsm by @lamiskin in https://github.com/networktocode/ntc-templates/pull/1092 -* Changed: Additional fields for cisco_ios_show_standby.textfsm by @lamiskin in https://github.com/networktocode/ntc-templates/pull/1091 -* Changed: Additional fields for cisco_ios_show_module_status.textfsm by @lamiskin in https://github.com/networktocode/ntc-templates/pull/1090 -* Changed: Additional fields for cisco_ios_show_ip_interface.textfsm by @lamiskin in https://github.com/networktocode/ntc-templates/pull/1089 -* Changed: Additional fields for cisco_ios_show_interfaces_switchport.textfsm by @lamiskin in https://github.com/networktocode/ntc-templates/pull/1088 -* Changed: Additional fields for cisco_ios_show_etherchannel_summary.textfsm by @lamiskin in https://github.com/networktocode/ntc-templates/pull/1087 -* Changed: Additional fields for cisco_ios_show_lldp_neighbors_detail.textfsm by @lamiskin in https://github.com/networktocode/ntc-templates/pull/1086 -* Changed: Additional fields for cisco_asa_show_interface.textfsm by @lamiskin in https://github.com/networktocode/ntc-templates/pull/1084 -* Bug fix: show platform diag does not return the rommon version of the line cards by @network-shark in https://github.com/networktocode/ntc-templates/pull/1081 -* New template: zyxel_os_cfg_nat_get.textfsm by @elavaud in https://github.com/networktocode/ntc-templates/pull/1073 -* New template: zyxel_os_cfg_ipalias_get.textfsm by @elavaud in https://github.com/networktocode/ntc-templates/pull/1068 -* New template: ubiquiti_edgerouter_show_version.textfsm by @elavaud in https://github.com/networktocode/ntc-templates/pull/1065 -* New template: ubiquiti_edgerouter_show_interfaces_ethernet_physical.textfsm by @elavaud in https://github.com/networktocode/ntc-templates/pull/1064 -* New template: ubiquiti_edgerouter_show_arp.textfsm by @elavaud in https://github.com/networktocode/ntc-templates/pull/1062 -* Bug fix: aruba_os_show_ap_database model parsing error by @hagleyj in https://github.com/networktocode/ntc-templates/pull/1055 -* Bug fix: cisco_nxos_show_ip_interface parsing error by @diepes in https://github.com/networktocode/ntc-templates/pull/1046 -* Bug fix: Update choices for Protocol to include 'notpresent' option on arista_eos_show_interfaces_description by @scetron in https://github.com/networktocode/ntc-templates/pull/1044 -* New template: aruba_os_show_ap_database.textfsm by @hagleyj in https://github.com/networktocode/ntc-templates/pull/1042 -* Bug fix: cisco_nxos_show_cdp_neighbors_detail update for supporting multiple versions by @Niltak in https://github.com/networktocode/ntc-templates/pull/1039 -* Changed: Updated show boot template to include new formatting for Cisco IOS Gibraltar output by @shanecbauman in https://github.com/networktocode/ntc-templates/pull/1038 -* Bug fix: cisco_nxos_show_ip_bgp.textfsm not parsing correctly by @diepes in https://github.com/networktocode/ntc-templates/pull/1033 -* Added: FTD output example from Cisco support site by @jvanderaa in https://github.com/networktocode/ntc-templates/pull/1032 -* New template: cisco_ios_show_ip_nat_translations.textfsm by @ksaegusa in https://github.com/networktocode/ntc-templates/pull/1028 -* Bug fix: cisco_ios_show_interfaces_status.textfsm State Error by @ZamElek in https://github.com/networktocode/ntc-templates/pull/1023 -* Bug fix: IOS show mac address Type3 and Type4. Additional test files by @armartirosyan in https://github.com/networktocode/ntc-templates/pull/1019 -* New template: cisco_asa_show_cpu_usage_detailed.textfsm by @yone2ks in https://github.com/networktocode/ntc-templates/pull/1014 -* Bug fix: cisco_ios_show_ip_eigrp_topology not parsing correctly by @diepes in https://github.com/networktocode/ntc-templates/pull/1013 - -## [3.0.0](https://github.com/networktocode/ntc-templates/tree/3.0.0) (2021-10-28) - -[Full Changlog](https://github.com/networktocode/ntc-templates/compare/v2.3.2...3.0.0) - -### Breaking Changes - -- Template `cisco_ios_show_mac-address-table` has `DESTINATION_PORT` as a list of ports now instead of a single string entry (#994) - -### What's Changed -* cisco_ios_show_access-session: Adding Identity to MAC column by @ahlara-devcore in https://github.com/networktocode/ntc-templates/pull/990 -* [New Template] Ciena - traffic-profile standard-profile by @georgesnow in https://github.com/networktocode/ntc-templates/pull/981 -* New template: cisco_nxos_show_ip_interface_vrf_all.textfsm by @AJatCDW in https://github.com/networktocode/ntc-templates/pull/978 -* New template: juniper_junos_show_system_uptime.textfsm by @antonalekseev in https://github.com/networktocode/ntc-templates/pull/975 -* Template Change: cisco_ios, show archive by @QuasarKid in https://github.com/networktocode/ntc-templates/pull/905 -* Bugfix: change date format in hp_comware_display_clock.textfsm by @antonalekseev in https://github.com/networktocode/ntc-templates/pull/977 -* update arista interface template + raw by @scetron in https://github.com/networktocode/ntc-templates/pull/963 -* New Template: cisco_ios_show_dhcp_lease by @lamiskin in https://github.com/networktocode/ntc-templates/pull/991 -* Fix ios_mac-addr type2 by @armartirosyan in https://github.com/networktocode/ntc-templates/pull/994 -* fix parsing with int addresses = 0 by @dainok in https://github.com/networktocode/ntc-templates/pull/982 -* New template for huawei VRP + fix. by @ak-empiak in https://github.com/networktocode/ntc-templates/pull/998 -* added VLAN value and search pattern by @dm-bell-networking in https://github.com/networktocode/ntc-templates/pull/1002 -* Ciso IOS show mac and show module fix by @armartirosyan in https://github.com/networktocode/ntc-templates/pull/1006 -* Junos show chassis by @georgesnow in https://github.com/networktocode/ntc-templates/pull/997 - -### New Contributors -* @ahlara-devcore made their first contribution in https://github.com/networktocode/ntc-templates/pull/990 -* @AJatCDW made their first contribution in https://github.com/networktocode/ntc-templates/pull/978 -* @antonalekseev made their first contribution in https://github.com/networktocode/ntc-templates/pull/975 -* @lamiskin made their first contribution in https://github.com/networktocode/ntc-templates/pull/991 -* @armartirosyan made their first contribution in https://github.com/networktocode/ntc-templates/pull/994 -* @ak-empiak made their first contribution in https://github.com/networktocode/ntc-templates/pull/998 -* @dm-bell-networking made their first contribution in https://github.com/networktocode/ntc-templates/pull/1002 - -**Full Changelog**: https://github.com/networktocode/ntc-templates/compare/v2.3.2...v3.0.0 -## [2.3.2](https://github.com/networktocode/ntc-templates/tree/2.3.2) (2021-09-13) - -[Full Changelog](https://github.com/networktocode/ntc-templates/compare/v2.3.1...2.3.2) - -**Bugfixes** - -- cisco\_ios\_show\_ip\_bgp\_summary Account for dotted ASN notation [\#987](https://github.com/networktocode/ntc-templates/pull/987) ([thomasbridge74](https://github.com/thomasbridge74)) -- cisco\_nxos\_show\_interface\_status Account for blank type [\#980](https://github.com/networktocode/ntc-templates/pull/980) ([Kani999](https://github.com/Kani999)) -- cisco\_ios\_show\_interfaces Account for `App Interface` [\#968](https://github.com/networktocode/ntc-templates/pull/968) ([a-finocchiaro](https://github.com/a-finocchiaro)) - -## [2.3.1](https://github.com/networktocode/ntc-templates/tree/2.3.1) (2021-08-30) - -[Full Changelog](https://github.com/networktocode/ntc-templates/compare/v2.3.0...2.3.1) - -**Closed issues:** - -- cisco\_ios\_show\_ip\_access-lists Account for singluar match [\#972](https://github.com/networktocode/ntc-templates/issues/972) ([mitchell-foxworth](https://github.com/mitchell-foxworth)) - -**Merged pull requests:** - -- ntc_templates/templates/cisco_ios_show_ip_access-lists.textfsm [\#973](https://github.com/networktocode/ntc-templates/pull/973) ([mitchell-foxworth](https://github.com/mitchell-foxworth)) - -## [2.3.0](https://github.com/networktocode/ntc-templates/tree/2.3.0) (2021-08-27) - -[Full Changelog](https://github.com/networktocode/ntc-templates/compare/v2.2.2...2.3.0) - -**Closed issues:** - -- cisco\_ios\_show\_ip\_access-lists template needs updated to include LOG_TYPE options [\#969](https://github.com/networktocode/ntc-templates/issues/969) ([joewesch](https://github.com/joewesch)) - -**Merged pull requests:** - -- ntc_templates/templates/aruba_aoscx_show_aaa_authentication_port-access_interface_all_client-status.textfsm [\#927](https://github.com/networktocode/ntc-templates/pull/927) ([scetron](https://github.com/scetron)) - -**New Templates:** - -- aruba_aoscx_show_aaa_authentication_port-access_interface_all_client-status.textfsm -- aruba_aoscx_show_arp_all-vrfs.textfsm -- aruba_aoscx_show_bfd_all-vrfs.textfsm -- aruba_aoscx_show_bgp_all-vrfs_all_summary.textfsm -- aruba_aoscx_show_bgp_all_all-vrfs_summary.textfsm -- aruba_aoscx_show_interface.textfsm -- aruba_aoscx_show_interface_dom_detail.textfsm -- aruba_aoscx_show_ip_route_all-vrfs.textfsm -- aruba_aoscx_show_lldp_neighbors-info_detail.textfsm -- aruba_aoscx_show_mac-address-table.textfsm -- aruba_aoscx_show_ntp_associations.textfsm -- aruba_aoscx_show_vsf_detail.textfsm - -## [2.2.2](https://github.com/networktocode/ntc-templates/tree/2.1.0) (2021-08-02) - -[Full Changelog](https://github.com/networktocode/ntc-templates/compare/v2.2.0...2.2.2) - -**Closed issues:** - -- cisco\_ios\_show\_ip\_access-lists template needs updated to include additional ICMP_TYPE options [\#964](https://github.com/networktocode/ntc-templates/issues/964) -- cisco\_ios\_show\_version template needs updated to account for StackWise Virtual Domains [\#924](https://github.com/networktocode/ntc-templates/issues/924) - -**Merged pull requests:** - -- cisco\_ios\_show\_ip\_access-lists.textfsm: Updated to include mask-request in template. [\#965](https://github.com/networktocode/ntc-templates/pull/944) ([nsnelson402](https://github.com/nsnelson402)) -- cisco\_ios\_show\_version.textfsm: Updated to account for StackWise Virtual Domains template. [\#960](https://github.com/networktocode/ntc-templates/pull/960) ([itdependsnetworks](https://github.com/itdependsnetworks)) - -## [2.2.0](https://github.com/networktocode/ntc-templates/tree/2.1.0) (2021-08-02) - -[Full Changelog](https://github.com/networktocode/ntc-templates/compare/v2.1.0...2.2.0) - -**Closed issues:** - -- cisco\_ios\_show\_ip\_access-lists template needs updated to include precedence and tos in *_PORT_MATCH [\#954](https://github.com/networktocode/ntc-templates/issues/954) -- cisco\_nxos\_show\_interface\_transceiver transceiver template failure [\#952](https://github.com/networktocode/ntc-templates/issues/952) - -**Merged pull requests:** - -- cisco_ios_show_version: Cisco IOS uptime parsing more granular (days, hours, etc.) [\#944](https://github.com/networktocode/ntc-templates/pull/944) ([joewesch](https://github.com/joewesch)) -- New Template: cisco_ios_show_crypto_session_details [\#947](https://github.com/networktocode/ntc-templates/pull/947) ([h4ndzdatm0ld](https://github.com/h4ndzdatm0ld)) -- cisco_ios_show_vrf.texfsm: Parse a vrf with no interfaces [\#918](https://github.com/networktocode/ntc-templates/pull/918) ([dpnetca](https://github.com/dpnetca)) -- cisco_ios_show_interfaces_switchport: Modified Trunk state to handle multiline trunking lists [\#907](https://github.com/networktocode/ntc-templates/pull/907) ([mickyhale](https://github.com/mickyhale)) -- Fix nxos_show_interface_transceiver failure [\#953](https://github.com/networktocode/ntc-templates/pull/953) ([chipn](https://github.com/chipn)) -- Updated cisco_ios_show_ip_access-lists.textfsm to include the SRC_PORT_MATCH and DST_PORT_MATCH values for precedence and tos [\#955](https://github.com/networktocode/ntc-templates/pull/955) ([nsnelson402](https://github.com/nsnelson402)) - -## [2.1.0](https://github.com/networktocode/ntc-templates/tree/2.1.0) (2021-06-24) - -[Full Changelog](https://github.com/networktocode/ntc-templates/compare/v2.0.0...2.1.0) - -**Implemented enhancements:** - -- Move to Poetry for dependency and publishing [\#729](https://github.com/networktocode/ntc-templates/issues/729) - -**Closed issues:** - -- cisco\_nxos\_show\_cdp\_neighbors\_detail 'str' object has no attribute 'seek'. [\#936](https://github.com/networktocode/ntc-templates/issues/936) -- show int status returns error \(seems template error\) for particular switch for other switches it does work \(iOS\). [\#922](https://github.com/networktocode/ntc-templates/issues/922) -- IPinfusuion OCNOS support request [\#913](https://github.com/networktocode/ntc-templates/issues/913) -- cisco\_ios\_show\_interfaces\_status.textfsm \(no interface in monitoring state\) [\#878](https://github.com/networktocode/ntc-templates/issues/878) -- Arista\_eos: show ip bgp summary Error [\#844](https://github.com/networktocode/ntc-templates/issues/844) -- arista\_eos\_show\_ip\_route parse exception [\#811](https://github.com/networktocode/ntc-templates/issues/811) -- cisco nxos show interface status issue when FC ports are present [\#788](https://github.com/networktocode/ntc-templates/issues/788) -- cisco\_asa\_show\_running\_cryprom\_map does not parse crypto maps without "set security association lifetime" [\#784](https://github.com/networktocode/ntc-templates/issues/784) -- Cisco ASA show vpn-sessiondb invalid and not returning data after ASA SW update [\#773](https://github.com/networktocode/ntc-templates/issues/773) -- cannot import name 'clitable' from 'textfsm' [\#731](https://github.com/networktocode/ntc-templates/issues/731) - -**Merged pull requests:** - -- Adding Restarted to show version template for cisco ios [\#940](https://github.com/networktocode/ntc-templates/pull/940) ([ksrattani](https://github.com/ksrattani)) -- cisco\_nxos add f-path vlan type [\#937](https://github.com/networktocode/ntc-templates/pull/937) ([JargeZ](https://github.com/JargeZ)) -- Fix issue \#929 [\#934](https://github.com/networktocode/ntc-templates/pull/934) ([matt852](https://github.com/matt852)) -- New Template: Alcatel, sh router ospf int [\#931](https://github.com/networktocode/ntc-templates/pull/931) ([h4ndzdatm0ld](https://github.com/h4ndzdatm0ld)) -- New Template: SROS "show system cpu" [\#930](https://github.com/networktocode/ntc-templates/pull/930) ([h4ndzdatm0ld](https://github.com/h4ndzdatm0ld)) -- Adds monitoring port for show interfaces status [\#928](https://github.com/networktocode/ntc-templates/pull/928) ([jvanderaa](https://github.com/jvanderaa)) -- New Template: All BGP VPNv4 Neighbors [\#911](https://github.com/networktocode/ntc-templates/pull/911) ([markh0338](https://github.com/markh0338)) -- Added Known Issues section to document Micah's finding/issue [\#902](https://github.com/networktocode/ntc-templates/pull/902) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- Added deploy option to auto deploy on tags [\#901](https://github.com/networktocode/ntc-templates/pull/901) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- sros, new template - sh router interface, -vrf \# optional [\#898](https://github.com/networktocode/ntc-templates/pull/898) ([h4ndzdatm0ld](https://github.com/h4ndzdatm0ld)) -- Add end of line for matching empty lines [\#897](https://github.com/networktocode/ntc-templates/pull/897) ([jmcgill298](https://github.com/jmcgill298)) -- New Template: ruckus\_fastiron, show mac-address [\#896](https://github.com/networktocode/ntc-templates/pull/896) ([QuasarKid](https://github.com/QuasarKid)) -- New Template: ruckus\_fastiron, show version [\#894](https://github.com/networktocode/ntc-templates/pull/894) ([QuasarKid](https://github.com/QuasarKid)) -- New Template: alcatel\_sros, sh router mpls lsp [\#893](https://github.com/networktocode/ntc-templates/pull/893) ([h4ndzdatm0ld](https://github.com/h4ndzdatm0ld)) -- New Template: alcatel\_sros, sap-using [\#892](https://github.com/networktocode/ntc-templates/pull/892) ([h4ndzdatm0ld](https://github.com/h4ndzdatm0ld)) -- New Template: alcatel\_sros, sdp-using [\#891](https://github.com/networktocode/ntc-templates/pull/891) ([h4ndzdatm0ld](https://github.com/h4ndzdatm0ld)) -- add new template show port-security interface [\#885](https://github.com/networktocode/ntc-templates/pull/885) ([jeffkala](https://github.com/jeffkala)) -- Bugfix: Type for cisco\_nxos\_show\_interface\_status [\#880](https://github.com/networktocode/ntc-templates/pull/880) ([FragmentedPacket](https://github.com/FragmentedPacket)) - -## [v2.0.0](https://github.com/networktocode/ntc-templates/tree/v2.0.0) (2021-03-12) - -[Full Changelog](https://github.com/networktocode/ntc-templates/compare/v1.7.0...v2.0.0) - -**Merged pull requests:** - -- Release v2.0.0 [\#890](https://github.com/networktocode/ntc-templates/pull/890) ([jmcgill298](https://github.com/jmcgill298)) -- Migrate packaging to use poetry [\#882](https://github.com/networktocode/ntc-templates/pull/882) ([jmcgill298](https://github.com/jmcgill298)) -- Add Dell Force 10 show ip interface brief [\#875](https://github.com/networktocode/ntc-templates/pull/875) ([soer7022](https://github.com/soer7022)) -- cisco\_wlc\_ssh\_show\_wlan\_sum update - make PMIP\_MOBILITY optional [\#872](https://github.com/networktocode/ntc-templates/pull/872) ([progala](https://github.com/progala)) - -## [v1.7.0](https://github.com/networktocode/ntc-templates/tree/v1.7.0) (2021-03-12) - -[Full Changelog](https://github.com/networktocode/ntc-templates/compare/v1.6.0...v1.7.0) - -**Implemented enhancements:** - -- Potential naming inconsistencies between ntc-templates and netmiko for fortinet devices [\#534](https://github.com/networktocode/ntc-templates/issues/534) - -**Closed issues:** - -- arista\_eos\_show\_interfaces incomplete [\#887](https://github.com/networktocode/ntc-templates/issues/887) -- cisco\_wlc\_ssh\_show\_wlan\_sum update - make PMIP\_MOBILITY optional [\#871](https://github.com/networktocode/ntc-templates/issues/871) -- cisco\_nxos\_show\_ip\_route errors out on Route Not Found [\#869](https://github.com/networktocode/ntc-templates/issues/869) -- cisco\_ios\_show\_interfaces\_description.textfsm fails to parse [\#866](https://github.com/networktocode/ntc-templates/issues/866) -- Having trouble with textfsm [\#858](https://github.com/networktocode/ntc-templates/issues/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](https://github.com/networktocode/ntc-templates/issues/851) -- arista\_eos\_show\_interfaces\_status parse failures [\#834](https://github.com/networktocode/ntc-templates/issues/834) -- cisco\_ios\_show\_mac-address-table support for pvlans [\#830](https://github.com/networktocode/ntc-templates/issues/830) -- Don’t work when parse output of “show fc zone” for Dell s5000 [\#825](https://github.com/networktocode/ntc-templates/issues/825) -- update nxos show interface to capture discards [\#819](https://github.com/networktocode/ntc-templates/issues/819) -- change key names to match ios template [\#816](https://github.com/networktocode/ntc-templates/issues/816) -- cisco\_nxos\_show\_environment return an empty list [\#790](https://github.com/networktocode/ntc-templates/issues/790) -- cisco show sip-ua register status [\#787](https://github.com/networktocode/ntc-templates/issues/787) -- Issue with cisco\_ios\_show\_vrf.textfsm template [\#786](https://github.com/networktocode/ntc-templates/issues/786) -- version of OS can differ o/p, how to handle such cases [\#782](https://github.com/networktocode/ntc-templates/issues/782) -- NXSOS SHOW\_INVENTORY ALL [\#778](https://github.com/networktocode/ntc-templates/issues/778) -- ISSUE with show bgp neighboor template IOS XR [\#746](https://github.com/networktocode/ntc-templates/issues/746) - -**Merged pull requests:** - -- New Template: ruckus\_fastiron, show interfaces brief [\#895](https://github.com/networktocode/ntc-templates/pull/895) ([QuasarKid](https://github.com/QuasarKid)) -- Release v1.7.0 [\#889](https://github.com/networktocode/ntc-templates/pull/889) ([jmcgill298](https://github.com/jmcgill298)) -- new alcatel\_sros tmpl, 'show service sdp' [\#886](https://github.com/networktocode/ntc-templates/pull/886) ([h4ndzdatm0ld](https://github.com/h4ndzdatm0ld)) -- New Template: alcatel\_sros\_show\_router\_rsvp\_interface [\#884](https://github.com/networktocode/ntc-templates/pull/884) ([h4ndzdatm0ld](https://github.com/h4ndzdatm0ld)) -- \#784-cisco\_asa\_show\_running-config\_all\_crypto\_map.textfsm [\#883](https://github.com/networktocode/ntc-templates/pull/883) ([diepes](https://github.com/diepes)) -- New template: cisco\_ios\_show\_alert\_counters.textfsm [\#881](https://github.com/networktocode/ntc-templates/pull/881) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- Bugfix: Media type update for cisco\_ios\_show\_interfaces [\#879](https://github.com/networktocode/ntc-templates/pull/879) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- new sros template [\#877](https://github.com/networktocode/ntc-templates/pull/877) ([h4ndzdatm0ld](https://github.com/h4ndzdatm0ld)) -- Fixs \#869 cisco nxos show ip route not found [\#870](https://github.com/networktocode/ntc-templates/pull/870) ([diepes](https://github.com/diepes)) -- Fix readme [\#868](https://github.com/networktocode/ntc-templates/pull/868) ([jeffkala](https://github.com/jeffkala)) -- add test security-policy-match to palo alto [\#867](https://github.com/networktocode/ntc-templates/pull/867) ([jeffkala](https://github.com/jeffkala)) -- New template: yamaha [\#865](https://github.com/networktocode/ntc-templates/pull/865) ([akira6592](https://github.com/akira6592)) -- Add Environment Variable Option for Custom Template Location [\#863](https://github.com/networktocode/ntc-templates/pull/863) ([jeffkala](https://github.com/jeffkala)) -- New Template: hp\_procurve\_show\_port-security [\#862](https://github.com/networktocode/ntc-templates/pull/862) ([adraf82](https://github.com/adraf82)) -- Adding in/out route-map parsing to cisco ios show ip bgp nei template [\#861](https://github.com/networktocode/ntc-templates/pull/861) ([nnaukwal](https://github.com/nnaukwal)) -- Fortinet updates [\#860](https://github.com/networktocode/ntc-templates/pull/860) ([refriedjello](https://github.com/refriedjello)) -- Fixes \#851 and add new template [\#857](https://github.com/networktocode/ntc-templates/pull/857) ([diepes](https://github.com/diepes)) -- New Templates: Cisco IOS show vrrp brief and all [\#856](https://github.com/networktocode/ntc-templates/pull/856) ([mjbear](https://github.com/mjbear)) -- Adding new templates for show \(radius|tacacs\) summary output [\#855](https://github.com/networktocode/ntc-templates/pull/855) ([mjbear](https://github.com/mjbear)) -- New Template: Cisco WLC show port summary and show stats port summary [\#854](https://github.com/networktocode/ntc-templates/pull/854) ([mjbear](https://github.com/mjbear)) -- New Template: Cisco WLC show time \(for time and NTP information\) [\#853](https://github.com/networktocode/ntc-templates/pull/853) ([mjbear](https://github.com/mjbear)) -- New Template - cisco\_ios\_show\_object-group [\#850](https://github.com/networktocode/ntc-templates/pull/850) ([pkomissarov](https://github.com/pkomissarov)) -- cisco\_nxos\_show\_ip\_bgp\_summary\_vrf update to support 32-bits ASN outputs [\#849](https://github.com/networktocode/ntc-templates/pull/849) ([burningnode](https://github.com/burningnode)) -- New Template: Cisco WLC show mobility anchor [\#847](https://github.com/networktocode/ntc-templates/pull/847) ([mjbear](https://github.com/mjbear)) -- New Template: Cisco WLC show redundancy summary and detail [\#846](https://github.com/networktocode/ntc-templates/pull/846) ([mjbear](https://github.com/mjbear)) -- Fixes \#773 CiscoASA-show\_vpn-sessiondb\_SW\_update [\#845](https://github.com/networktocode/ntc-templates/pull/845) ([diepes](https://github.com/diepes)) -- Fixes\#811 arista eos show ip route [\#843](https://github.com/networktocode/ntc-templates/pull/843) ([diepes](https://github.com/diepes)) -- updated template and added test file [\#842](https://github.com/networktocode/ntc-templates/pull/842) ([adraf82](https://github.com/adraf82)) -- Fix\#784 new: cisco asa show running all cryprom map [\#840](https://github.com/networktocode/ntc-templates/pull/840) ([diepes](https://github.com/diepes)) -- Fix\#788 ios show int fc [\#839](https://github.com/networktocode/ntc-templates/pull/839) ([diepes](https://github.com/diepes)) -- Fixes \#790 - new template cisco\_nxos\_show\_environment.textfsm [\#838](https://github.com/networktocode/ntc-templates/pull/838) ([diepes](https://github.com/diepes)) -- Add codeowners file [\#837](https://github.com/networktocode/ntc-templates/pull/837) ([jmcgill298](https://github.com/jmcgill298)) -- Enhancment: EOS show int status - account for LAG members [\#835](https://github.com/networktocode/ntc-templates/pull/835) ([jmcgill298](https://github.com/jmcgill298)) -- update Cisco IOS show tacacs template to support parsing of server name in newer configurations [\#833](https://github.com/networktocode/ntc-templates/pull/833) ([anirudhkamath](https://github.com/anirudhkamath)) -- added fortinet get system arp [\#832](https://github.com/networktocode/ntc-templates/pull/832) ([wmclendon](https://github.com/wmclendon)) -- Enhancement: Change fortinet\_fortios to fortinet per Netmiko [\#831](https://github.com/networktocode/ntc-templates/pull/831) ([jmcgill298](https://github.com/jmcgill298)) -- New Template: hp\_procurve\_show\_interfaces\_brief.textfsm [\#829](https://github.com/networktocode/ntc-templates/pull/829) ([adraf82](https://github.com/adraf82)) -- New template: Vyatta/VyOS BGP summary [\#828](https://github.com/networktocode/ntc-templates/pull/828) ([jpbede](https://github.com/jpbede)) -- New template: dell\_powerconnect [\#827](https://github.com/networktocode/ntc-templates/pull/827) ([nidebr](https://github.com/nidebr)) -- Some sros commands [\#824](https://github.com/networktocode/ntc-templates/pull/824) ([kvlangenhove](https://github.com/kvlangenhove)) -- updated hp\_procurve\_show\_interfaces template for backward compatibility [\#823](https://github.com/networktocode/ntc-templates/pull/823) ([adraf82](https://github.com/adraf82)) -- New template: arista\_eos\_show\_interfaces\_description [\#822](https://github.com/networktocode/ntc-templates/pull/822) ([rich-day](https://github.com/rich-day)) -- Bugfix: issues with cisco\_nxos\_show\_ip\_dhcp\_relay\_address [\#821](https://github.com/networktocode/ntc-templates/pull/821) ([wvandeun](https://github.com/wvandeun)) -- Bugfix: URL ACL property in cisco\_wlc\_ssh\_show\_interface\_detailed [\#820](https://github.com/networktocode/ntc-templates/pull/820) ([wvandeun](https://github.com/wvandeun)) -- Bugfix: added 'Autostate exclude' to avoid error [\#818](https://github.com/networktocode/ntc-templates/pull/818) ([abaretta](https://github.com/abaretta)) -- fix unconfigured DHCP issue in cisco\_wlc\_ssh\_show\_interface\_detailed [\#817](https://github.com/networktocode/ntc-templates/pull/817) ([wvandeun](https://github.com/wvandeun)) -- cisco\_nxos show version - extract serial from "Processor board ID" [\#813](https://github.com/networktocode/ntc-templates/pull/813) ([diepes](https://github.com/diepes)) -- Bugfix: cisco ios show ip access-list [\#809](https://github.com/networktocode/ntc-templates/pull/809) ([jpobeda](https://github.com/jpobeda)) -- Bugfix: IOS show lldp neig - fix neighbor name with spaces [\#799](https://github.com/networktocode/ntc-templates/pull/799) ([realvitya](https://github.com/realvitya)) - -## [v1.6.0](https://github.com/networktocode/ntc-templates/tree/v1.6.0) (2020-10-26) - -[Full Changelog](https://github.com/networktocode/ntc-templates/compare/v1.5.0...v1.6.0) - -**Implemented enhancements:** - -- Creation of a Faq [\#716](https://github.com/networktocode/ntc-templates/issues/716) - -**Closed issues:** - -- This is not a data modeling project. So is there any data modeling project can work with this? [\#802](https://github.com/networktocode/ntc-templates/issues/802) -- Black 20.b0 breaks tox test [\#794](https://github.com/networktocode/ntc-templates/issues/794) -- Unable to Parse show version on IOSv Device [\#780](https://github.com/networktocode/ntc-templates/issues/780) -- TXTFSM will not process template even though Regex checker says line is acceptable for ciena SAOS [\#779](https://github.com/networktocode/ntc-templates/issues/779) -- cisco\_nxos\_show\_ip\_bgp\_summary.textfsm doesn't account for dual line bgp when output is too wide [\#766](https://github.com/networktocode/ntc-templates/issues/766) -- arista eos show mac address-table is choking on case sensitivity on line Total Mac Addresses for this criterion: 0 [\#764](https://github.com/networktocode/ntc-templates/issues/764) - -**Merged pull requests:** - -- Bugfix: ASA show interface - missing case handled for no values for duplex & speed [\#815](https://github.com/networktocode/ntc-templates/pull/815) ([starlightdreamer](https://github.com/starlightdreamer)) -- Linux arp a [\#814](https://github.com/networktocode/ntc-templates/pull/814) ([jifox](https://github.com/jifox)) -- add template and tests for cisco\_wlc\_ssh\_show\_interface\_detailed [\#812](https://github.com/networktocode/ntc-templates/pull/812) ([wvandeun](https://github.com/wvandeun)) -- fix issue in cisco\_wlc\_ssh\_show\_interface\_summary template [\#810](https://github.com/networktocode/ntc-templates/pull/810) ([wvandeun](https://github.com/wvandeun)) -- Bugfix: cisco\_ios\_show\_running\_partition\_access\_list [\#808](https://github.com/networktocode/ntc-templates/pull/808) ([jpobeda](https://github.com/jpobeda)) -- Release 1.6.0 [\#807](https://github.com/networktocode/ntc-templates/pull/807) ([jmcgill298](https://github.com/jmcgill298)) -- changes tests to import from lib [\#806](https://github.com/networktocode/ntc-templates/pull/806) ([jmcgill298](https://github.com/jmcgill298)) -- modify for show inventory all. [\#804](https://github.com/networktocode/ntc-templates/pull/804) ([yshu95](https://github.com/yshu95)) -- Change TextFSM Windows failure to a runtime failure \(instead of an import failure\) [\#803](https://github.com/networktocode/ntc-templates/pull/803) ([ktbyers](https://github.com/ktbyers)) -- Added juniper\_junos\_show\_lldp\_neighbors [\#797](https://github.com/networktocode/ntc-templates/pull/797) ([qduk](https://github.com/qduk)) -- New Template - hp\_procurve\_show\_interfaces [\#796](https://github.com/networktocode/ntc-templates/pull/796) ([adraf82](https://github.com/adraf82)) -- Bugfix: Re-formatted development\_scripts.py and tests/test\_testcases\_… [\#795](https://github.com/networktocode/ntc-templates/pull/795) ([mjuenema](https://github.com/mjuenema)) -- Fix typos in README.md [\#792](https://github.com/networktocode/ntc-templates/pull/792) ([epryan](https://github.com/epryan)) -- update arista\_eos\_show\_inventory [\#791](https://github.com/networktocode/ntc-templates/pull/791) ([yshu95](https://github.com/yshu95)) -- Detect hostname on NX-OS platforms [\#789](https://github.com/networktocode/ntc-templates/pull/789) ([Yakuza-UA](https://github.com/Yakuza-UA)) -- Cisco ASA show access-list command templates update. [\#783](https://github.com/networktocode/ntc-templates/pull/783) ([HideoYukutake](https://github.com/HideoYukutake)) -- Updates to include capture on single word, no number model number [\#781](https://github.com/networktocode/ntc-templates/pull/781) ([jvanderaa](https://github.com/jvanderaa)) -- Bugfix: Account for "powered-up" value in the output of nxos show module [\#774](https://github.com/networktocode/ntc-templates/pull/774) ([mtbutler07](https://github.com/mtbutler07)) -- Dual line support for Cisco NX-OS 'ip bgp summary' command [\#772](https://github.com/networktocode/ntc-templates/pull/772) ([rtkennedy](https://github.com/rtkennedy)) -- Arista eos show mac address table [\#765](https://github.com/networktocode/ntc-templates/pull/765) ([JoeyG1973](https://github.com/JoeyG1973)) -- New Template: cisco\_nxos\_show\_ip\_interface [\#761](https://github.com/networktocode/ntc-templates/pull/761) ([network-dave](https://github.com/network-dave)) -- New Template: cisco\_nxos\_show\_hsrp\_all [\#760](https://github.com/networktocode/ntc-templates/pull/760) ([network-dave](https://github.com/network-dave)) -- New Template: cisco\_nxos\_show\_license\_usage [\#759](https://github.com/networktocode/ntc-templates/pull/759) ([network-dave](https://github.com/network-dave)) -- New Template: cisco\_nxos\_show\_interface\_description [\#758](https://github.com/networktocode/ntc-templates/pull/758) ([network-dave](https://github.com/network-dave)) -- Fixes \#716 [\#753](https://github.com/networktocode/ntc-templates/pull/753) ([itdependsnetworks](https://github.com/itdependsnetworks)) - -## [v1.5.0](https://github.com/networktocode/ntc-templates/tree/v1.5.0) (2020-06-15) - -[Full Changelog](https://github.com/networktocode/ntc-templates/compare/v1.4.2...v1.5.0) - -**Implemented enhancements:** - -- Broadcom ICOS/Fastpath Support? [\#726](https://github.com/networktocode/ntc-templates/issues/726) - -**Fixed bugs:** - -- Cisco IOS show cdp neighbors issue [\#727](https://github.com/networktocode/ntc-templates/issues/727) -- Cisco IOS Show Interface Switchport does not parse multi-line VLAN Trunks [\#642](https://github.com/networktocode/ntc-templates/issues/642) -- Cisco ASA Show interface does not catch unnamed interfaces [\#627](https://github.com/networktocode/ntc-templates/issues/627) -- Fixes missing interfaces on down interfaces [\#734](https://github.com/networktocode/ntc-templates/pull/734) ([jvanderaa](https://github.com/jvanderaa)) - -**Closed issues:** - -- Cisco ASA "show vpn-sessiondb anyconnect" parser doesn't support IPv6 addresses [\#751](https://github.com/networktocode/ntc-templates/issues/751) -- failing testsuite [\#743](https://github.com/networktocode/ntc-templates/issues/743) -- I would like to contribute the PR for adding new cisco\_wlc\_ssh\_show\_ap\_image\_all [\#739](https://github.com/networktocode/ntc-templates/issues/739) -- Template help for multiple states [\#737](https://github.com/networktocode/ntc-templates/issues/737) -- textfsm.parser.TextFSMError: State Error raised. Rule Line: 15. Input Line: show ip arp [\#686](https://github.com/networktocode/ntc-templates/issues/686) -- Arista eos - sh ip bgp summ vrf all and sh ip route vrf all template [\#666](https://github.com/networktocode/ntc-templates/issues/666) -- Template Creation Help: cisco\_xr\_admin\_show\_environment\_power to get power supply, voltage and current [\#648](https://github.com/networktocode/ntc-templates/issues/648) -- New template: hp\_comware\_display\_interface\_textFSM [\#634](https://github.com/networktocode/ntc-templates/issues/634) -- cisco\_asa\_show\_failover\_state [\#546](https://github.com/networktocode/ntc-templates/issues/546) - -**Merged pull requests:** - -- Bumping to version 1.5.0 [\#763](https://github.com/networktocode/ntc-templates/pull/763) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- Arista eos show port channel summary [\#757](https://github.com/networktocode/ntc-templates/pull/757) ([JoeyG1973](https://github.com/JoeyG1973)) -- Arista eos show mac address table [\#756](https://github.com/networktocode/ntc-templates/pull/756) ([JoeyG1973](https://github.com/JoeyG1973)) -- Template correction for broadcom\_icos\_show\_mac-address-table [\#754](https://github.com/networktocode/ntc-templates/pull/754) ([alepodj](https://github.com/alepodj)) -- Fixes \#751 - IPv6 support for Cisco ASA 'show vpn-sessiondb anyconnect' [\#752](https://github.com/networktocode/ntc-templates/pull/752) ([smfeldman](https://github.com/smfeldman)) -- New Template added support for broadcom\_icos\_show\_vlan\_brief [\#750](https://github.com/networktocode/ntc-templates/pull/750) ([alepodj](https://github.com/alepodj)) -- New Template added support for broadcom\_icos\_show\_lldp\_remote-device\_all [\#749](https://github.com/networktocode/ntc-templates/pull/749) ([alepodj](https://github.com/alepodj)) -- New Template added support for broadcom\_icos\_show\_isdp\_neighbors [\#748](https://github.com/networktocode/ntc-templates/pull/748) ([alepodj](https://github.com/alepodj)) -- Bugfix: Account for totals - cisco\_ios\_show\_processes\_memory\_sorted.textfsm [\#747](https://github.com/networktocode/ntc-templates/pull/747) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- Enhancement for Cisco IOS show interfaces [\#745](https://github.com/networktocode/ntc-templates/pull/745) ([Yakuza-UA](https://github.com/Yakuza-UA)) -- Added interfaces to arista\_eos\_show\_vrf template [\#744](https://github.com/networktocode/ntc-templates/pull/744) ([JoeyG1973](https://github.com/JoeyG1973)) -- Add new template for cisco\_wlc\_ssh\_sh\_ap\_image\_all [\#742](https://github.com/networktocode/ntc-templates/pull/742) ([conorwoo](https://github.com/conorwoo)) -- Update index to handle cisco\_ios show\_ip\_bgp\_all\_summary [\#738](https://github.com/networktocode/ntc-templates/pull/738) ([Niclnx](https://github.com/Niclnx)) -- Added support for broadcom\_icos command show\_mac-address-table [\#736](https://github.com/networktocode/ntc-templates/pull/736) ([alepodj](https://github.com/alepodj)) -- BugFix: IOS CDP - Better handling of output [\#735](https://github.com/networktocode/ntc-templates/pull/735) ([jmcgill298](https://github.com/jmcgill298)) -- New Template support for broadcom\_icos as a new OS and added show\_version command [\#733](https://github.com/networktocode/ntc-templates/pull/733) ([alepodj](https://github.com/alepodj)) -- New template for ubiquity edgeswitch: show version [\#732](https://github.com/networktocode/ntc-templates/pull/732) ([saaverdo](https://github.com/saaverdo)) -- New Template for Cisco NX-OS: show forwarding adjacency [\#722](https://github.com/networktocode/ntc-templates/pull/722) ([Yakuza-UA](https://github.com/Yakuza-UA)) -- BugFix: cisco\_ios\_show\_interfaces\_switchport: Made trunking\_vlans a list, and changed regex [\#671](https://github.com/networktocode/ntc-templates/pull/671) ([FragmentedPacket](https://github.com/FragmentedPacket)) - -## [v1.4.2](https://github.com/networktocode/ntc-templates/tree/v1.4.2) (2020-05-26) - -[Full Changelog](https://github.com/networktocode/ntc-templates/compare/v1.4.1...v1.4.2) - -**Fixed bugs:** - -- cisco\_ios "show ip ospf database router" fails if OSPF domain includes an ASBR or an ABR [\#690](https://github.com/networktocode/ntc-templates/issues/690) -- Arista EOS show ip route parse error [\#668](https://github.com/networktocode/ntc-templates/issues/668) -- cisco\_ios\_show\_ip\_interface does not deal with ip address negotiated on Tunnel interface [\#644](https://github.com/networktocode/ntc-templates/issues/644) - -**Closed issues:** - -- Cisco IOS - textfsm.parser.TextFSMError: State Error raised. Rule Line: 17. [\#718](https://github.com/networktocode/ntc-templates/issues/718) -- show mac address-table Error: State Error raised. Rule Line: 41. [\#715](https://github.com/networktocode/ntc-templates/issues/715) -- show mac address-table no dictionary in response [\#714](https://github.com/networktocode/ntc-templates/issues/714) -- Having trouble with alcatel\_sros templates [\#698](https://github.com/networktocode/ntc-templates/issues/698) -- Cisco show cdp neighbor details leaves whitespace in capabilities field [\#683](https://github.com/networktocode/ntc-templates/issues/683) -- cisco\_ios neighbor summary per address family new request. [\#664](https://github.com/networktocode/ntc-templates/issues/664) -- cisco\_ios BGP neighbor advertised and received routes request. [\#663](https://github.com/networktocode/ntc-templates/issues/663) -- Ciena naming doesn’t conform to Netmiko [\#662](https://github.com/networktocode/ntc-templates/issues/662) -- Problem to add or install ntc-templates: [\#658](https://github.com/networktocode/ntc-templates/issues/658) -- show\_vlan template for cisco ios does not return more than 60 interfaces [\#653](https://github.com/networktocode/ntc-templates/issues/653) -- Unable to parse data by using "cisco\_ios\_show\_ip\_route\_summary.textfsm" [\#643](https://github.com/networktocode/ntc-templates/issues/643) -- template request: show ip bgp neighbors x.x.x.x advertised-routes [\#639](https://github.com/networktocode/ntc-templates/issues/639) - -**Merged pull requests:** - -- Bump version to 1.4.2 [\#728](https://github.com/networktocode/ntc-templates/pull/728) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- 718 fix [\#725](https://github.com/networktocode/ntc-templates/pull/725) ([itdependsnetworks](https://github.com/itdependsnetworks)) -- Update to enforce double-quote [\#724](https://github.com/networktocode/ntc-templates/pull/724) ([itdependsnetworks](https://github.com/itdependsnetworks)) -- Enhance Template for Cisco IOS: show adjacency [\#721](https://github.com/networktocode/ntc-templates/pull/721) ([Yakuza-UA](https://github.com/Yakuza-UA)) -- New templates: Cisco s300 - LLDP Neighbors, Interfaces status, Mac address table [\#719](https://github.com/networktocode/ntc-templates/pull/719) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- EOS can have N/A in the age field for show ip arp [\#717](https://github.com/networktocode/ntc-templates/pull/717) ([ktbyers](https://github.com/ktbyers)) -- New Template: juniper\_junos\_show\_lacp\_interfaces [\#713](https://github.com/networktocode/ntc-templates/pull/713) ([ichisuke55](https://github.com/ichisuke55)) -- New Template: paloalto\_panos\_show\_interface\_management.textfsm [\#712](https://github.com/networktocode/ntc-templates/pull/712) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- Bugfix: EOS - show\_interfaces - Added proper link\_status capture for admin down [\#711](https://github.com/networktocode/ntc-templates/pull/711) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- Bugfix: Panos sh intf hardware - Account for unk for SPEED/Duplex [\#710](https://github.com/networktocode/ntc-templates/pull/710) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- BugFix: Updated index file to work for show ip bgp neighbors x.x.x.x adv-routes [\#709](https://github.com/networktocode/ntc-templates/pull/709) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- BugFix: Ciena Saos: Added more use cases to vlan\_show [\#707](https://github.com/networktocode/ntc-templates/pull/707) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- paloalto\_panos\_debug\_swm\_status.textfsm new template [\#706](https://github.com/networktocode/ntc-templates/pull/706) ([ancoleman](https://github.com/ancoleman)) -- New Template for Cisco NX-OS: show ip adjacency [\#704](https://github.com/networktocode/ntc-templates/pull/704) ([Yakuza-UA](https://github.com/Yakuza-UA)) -- New Template for Cisco IOS: show ip vrf interfaces [\#702](https://github.com/networktocode/ntc-templates/pull/702) ([Yakuza-UA](https://github.com/Yakuza-UA)) -- Existing Template for Cisco NX-OS: show ip interface brief \(VRF support added\) [\#701](https://github.com/networktocode/ntc-templates/pull/701) ([Yakuza-UA](https://github.com/Yakuza-UA)) -- New Template: juniper\_junos\_show\_ethenet-switching\_table.textfsm [\#700](https://github.com/networktocode/ntc-templates/pull/700) ([ichisuke55](https://github.com/ichisuke55)) -- New Template for Cisco IOS: traceroute \ \[options\] [\#699](https://github.com/networktocode/ntc-templates/pull/699) ([Yakuza-UA](https://github.com/Yakuza-UA)) -- BugFix: show vpn-sessiondb anyconnect - Index and Username ends up on… [\#697](https://github.com/networktocode/ntc-templates/pull/697) ([anttof](https://github.com/anttof)) -- Asa bgp summary [\#696](https://github.com/networktocode/ntc-templates/pull/696) ([corvese](https://github.com/corvese)) -- New Template for Cisco IOS: show ip cef \[detail\] [\#695](https://github.com/networktocode/ntc-templates/pull/695) ([Yakuza-UA](https://github.com/Yakuza-UA)) -- Ciena sshkeystatus [\#693](https://github.com/networktocode/ntc-templates/pull/693) ([georgesnow](https://github.com/georgesnow)) -- Cisco IOS 'show adjacency .\* detail' [\#692](https://github.com/networktocode/ntc-templates/pull/692) ([Yakuza-UA](https://github.com/Yakuza-UA)) -- Bugfix: Accounted for ASBR/ABR in cisco\_ios\_show\_ip\_ospf\_database\_router [\#691](https://github.com/networktocode/ntc-templates/pull/691) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- HP Procurve show lldp info remote device [\#689](https://github.com/networktocode/ntc-templates/pull/689) ([sliddjur](https://github.com/sliddjur)) -- HP Procurve show lldp info remote-device detail [\#688](https://github.com/networktocode/ntc-templates/pull/688) ([sliddjur](https://github.com/sliddjur)) -- HP Procurve show trunks [\#687](https://github.com/networktocode/ntc-templates/pull/687) ([sliddjur](https://github.com/sliddjur)) -- BugFix: \(IOS\) - show cdp neighbors detail - Prevent capturing trailing whitespace for capabilities [\#684](https://github.com/networktocode/ntc-templates/pull/684) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- BugFix: IOS - show ip bgp summary: Added new field ADDR\_FAMILY for any that may have an address family [\#679](https://github.com/networktocode/ntc-templates/pull/679) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- BugFix: IOS - show ip bgp - Account for VRF info within routing table [\#678](https://github.com/networktocode/ntc-templates/pull/678) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- New Template: \(IOS\) show\_ip\_bgp\_neighbors\_advertised\_routes [\#674](https://github.com/networktocode/ntc-templates/pull/674) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- Enhancement: Added CRC and Abort Values to ios\_show\_interfaces template [\#673](https://github.com/networktocode/ntc-templates/pull/673) ([mtbutler07](https://github.com/mtbutler07)) -- Remove "terminal" dependency [\#672](https://github.com/networktocode/ntc-templates/pull/672) ([ktbyers](https://github.com/ktbyers)) -- BugFix: cisco\_ios\_show\_ip\_interface: Account for Internet address that is negotiated [\#670](https://github.com/networktocode/ntc-templates/pull/670) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- BugFix: arista\_eos\_show\_ip\_route: Accounting for new data for WARNING output & capture ecmp routes [\#669](https://github.com/networktocode/ntc-templates/pull/669) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- Enhancement: cisco\_ios\_show\_redundancy - Add New fields [\#667](https://github.com/networktocode/ntc-templates/pull/667) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- Ciena SAOS templates \(naming fix\) [\#665](https://github.com/networktocode/ntc-templates/pull/665) ([georgesnow](https://github.com/georgesnow)) -- Adds support for Cisco FTD [\#654](https://github.com/networktocode/ntc-templates/pull/654) ([micahculpepper](https://github.com/micahculpepper)) -- New Template: hp\_comware\_display\_ip\_routing-table & hp\_comware\_display\_device\_manuinfo [\#623](https://github.com/networktocode/ntc-templates/pull/623) ([xdai555](https://github.com/xdai555)) - -## [v1.4.1](https://github.com/networktocode/ntc-templates/tree/v1.4.1) (2020-04-23) - -[Full Changelog](https://github.com/networktocode/ntc-templates/compare/v1.4.0...v1.4.1) - -**Closed issues:** - -- cisco\_ios\_show\_mac-address-table.textfsm "N/A" in vlan field. [\#657](https://github.com/networktocode/ntc-templates/issues/657) -- platform="cisco\_ios", command="sh ip route summary" returning an empty array. [\#655](https://github.com/networktocode/ntc-templates/issues/655) -- Beginning of output for cisco\_ios "show ip ospf database \" may or may not be a space character [\#649](https://github.com/networktocode/ntc-templates/issues/649) -- Cisco ASA show\_route parsing for alternative multiline format [\#646](https://github.com/networktocode/ntc-templates/issues/646) -- Cisco ASA AnyConnect Errors with Tunnel Group on different line [\#630](https://github.com/networktocode/ntc-templates/issues/630) -- Create Template for Cisco ASA - show vpn-sessiondb anyconnect [\#624](https://github.com/networktocode/ntc-templates/issues/624) -- Juniper Junos add fpc:X, {master:X} for many commans stdout [\#621](https://github.com/networktocode/ntc-templates/issues/621) - -**Merged pull requests:** - -- Forgot to bump version in lib/ntc\_templates/\_\_init\_\_.py [\#661](https://github.com/networktocode/ntc-templates/pull/661) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- Added information for all new changes between 1.4.0 and now [\#660](https://github.com/networktocode/ntc-templates/pull/660) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- BugFix: cisco\_ios\_show\_mac-address-table: Allows N/A in the VLAN field by changing it from word to non-whitespace [\#659](https://github.com/networktocode/ntc-templates/pull/659) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- BugFix: cisco\_ios show ip ospf database router and network: Make leading spaces optional [\#650](https://github.com/networktocode/ntc-templates/pull/650) ([ariesgeek](https://github.com/ariesgeek)) -- Cisco ASA show\_route [\#647](https://github.com/networktocode/ntc-templates/pull/647) ([fatred](https://github.com/fatred)) -- Enhancement: cisco\_asa\_show\_inventory support inventory items w/o SN [\#638](https://github.com/networktocode/ntc-templates/pull/638) ([wvandeun](https://github.com/wvandeun)) -- show band-select template [\#637](https://github.com/networktocode/ntc-templates/pull/637) ([timjsmith24](https://github.com/timjsmith24)) -- Adds Cisco ASA show vpn-sessiondb [\#636](https://github.com/networktocode/ntc-templates/pull/636) ([jvanderaa](https://github.com/jvanderaa)) -- add cisco\_ios\_show\_ip\_route\_summary [\#635](https://github.com/networktocode/ntc-templates/pull/635) ([kjoyce77](https://github.com/kjoyce77)) -- Bugfix: cisco asa show nat [\#632](https://github.com/networktocode/ntc-templates/pull/632) ([joewesch](https://github.com/joewesch)) -- Updates based on hung sessions and different command output [\#631](https://github.com/networktocode/ntc-templates/pull/631) ([jvanderaa](https://github.com/jvanderaa)) -- Bugfix: Cisco ASA ipsec sa name compatibility [\#629](https://github.com/networktocode/ntc-templates/pull/629) ([joewesch](https://github.com/joewesch)) -- cisco\_wlc show mobility summary [\#628](https://github.com/networktocode/ntc-templates/pull/628) ([timjsmith24](https://github.com/timjsmith24)) -- Updates Cisco ASA `show vpn-sessiondb anyconnect` [\#626](https://github.com/networktocode/ntc-templates/pull/626) ([jvanderaa](https://github.com/jvanderaa)) -- Adds template for Cisco ASA "show vpn-sessiondb anyconnect" [\#625](https://github.com/networktocode/ntc-templates/pull/625) ([jvanderaa](https://github.com/jvanderaa)) -- Junos virtual chassis [\#622](https://github.com/networktocode/ntc-templates/pull/622) ([ainamori](https://github.com/ainamori)) -- allow space in fex description [\#620](https://github.com/networktocode/ntc-templates/pull/620) ([daanvdsanden](https://github.com/daanvdsanden)) -- New Template: hp\_comware\_display\_lldp\_neighbor-information\_verbose [\#619](https://github.com/networktocode/ntc-templates/pull/619) ([xdai555](https://github.com/xdai555)) -- New Template: cisco\_ios\_show\_ip\_ospf\_database\_network [\#618](https://github.com/networktocode/ntc-templates/pull/618) ([ChristopherJHart](https://github.com/ChristopherJHart)) -- BugFix: Remove reliance on static spacing for cisco\_ios\_show\_ip\_ospf\_database\_router [\#617](https://github.com/networktocode/ntc-templates/pull/617) ([ChristopherJHart](https://github.com/ChristopherJHart)) -- BugFix: Removed reliance on static spacing for cisco\_ios\_show\_interfaces\_status [\#614](https://github.com/networktocode/ntc-templates/pull/614) ([FragmentedPacket](https://github.com/FragmentedPacket)) - -## [v1.4.0](https://github.com/networktocode/ntc-templates/tree/v1.4.0) (2020-03-09) - -[Full Changelog](https://github.com/networktocode/ntc-templates/compare/v1.3.0...v1.4.0) - -**Implemented enhancements:** - -- Testing that test cases exist has an exception for 4 templates that need to be rectified [\#550](https://github.com/networktocode/ntc-templates/issues/550) -- Huawei - display lldp neighbor formatting [\#396](https://github.com/networktocode/ntc-templates/issues/396) -- Adding vlan name to access vlan and native vlan on NXOS [\#612](https://github.com/networktocode/ntc-templates/pull/612) ([daanvdsanden](https://github.com/daanvdsanden)) -- Enhancement: cisco\_nxos\_show\_vlan: Added interfaces [\#604](https://github.com/networktocode/ntc-templates/pull/604) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- Enhancement: IOS lldp neighbors - add capabilities capture group [\#553](https://github.com/networktocode/ntc-templates/pull/553) ([ewmanthei](https://github.com/ewmanthei)) -- Enhancement: Use ".textfsm" extension for IDEs [\#543](https://github.com/networktocode/ntc-templates/pull/543) ([jmcgill298](https://github.com/jmcgill298)) -- YAMLLINT: Add yamllint to tox testing [\#406](https://github.com/networktocode/ntc-templates/pull/406) ([jmcgill298](https://github.com/jmcgill298)) - -**Fixed bugs:** - -- parse\_output returns empty after interface has been modified by first run of script [\#613](https://github.com/networktocode/ntc-templates/issues/613) -- arista\_eos\_show\_ip\_route.textfsm fails on vrrp route display [\#588](https://github.com/networktocode/ntc-templates/issues/588) -- ASA show failover bug when using IPS module [\#547](https://github.com/networktocode/ntc-templates/issues/547) -- cisco\_nxos\_show\_version does not display N5K platform [\#545](https://github.com/networktocode/ntc-templates/issues/545) -- Fix regex: Update VyOS template to match addresses without netmask de… [\#608](https://github.com/networktocode/ntc-templates/pull/608) ([sliddjur](https://github.com/sliddjur)) -- Fixed regex for fortinet bgp template and added new template standards [\#592](https://github.com/networktocode/ntc-templates/pull/592) ([corvese](https://github.com/corvese)) -- BugFix: Cisco show switch detail with mac persistency wait time [\#584](https://github.com/networktocode/ntc-templates/pull/584) ([msom](https://github.com/msom)) - -**Closed issues:** - -- cisco\_nxos\_show\_vlan does not show ports, thank god cisco\_ios\_show\_vlan works [\#601](https://github.com/networktocode/ntc-templates/issues/601) -- regex to match whitespace, words, or mix of both, and cut off trailing whitespace? [\#566](https://github.com/networktocode/ntc-templates/issues/566) -- Bug: Alcatel SROS show service id index issue [\#556](https://github.com/networktocode/ntc-templates/issues/556) -- Cisco IOS Show MAC Address-Table Errors on Last Line [\#544](https://github.com/networktocode/ntc-templates/issues/544) -- Cisco IOS Show Run Template [\#469](https://github.com/networktocode/ntc-templates/issues/469) -- show ip route IOS vs NXOS [\#382](https://github.com/networktocode/ntc-templates/issues/382) -- Add tests for index file to Travis [\#207](https://github.com/networktocode/ntc-templates/issues/207) -- Using the .textfsm extension for templates [\#171](https://github.com/networktocode/ntc-templates/issues/171) - -**Merged pull requests:** - -- Bumping version to 1.4.0 [\#616](https://github.com/networktocode/ntc-templates/pull/616) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- Documentation: Update changelog for 1.4.0 release [\#615](https://github.com/networktocode/ntc-templates/pull/615) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- Added line to get the port mode of an interface [\#611](https://github.com/networktocode/ntc-templates/pull/611) ([daanvdsanden](https://github.com/daanvdsanden)) -- update show arp for aruba\_os [\#610](https://github.com/networktocode/ntc-templates/pull/610) ([dmwcode](https://github.com/dmwcode)) -- New Template: hp comware show ip interface [\#609](https://github.com/networktocode/ntc-templates/pull/609) ([sliddjur](https://github.com/sliddjur)) -- New Template: cisco\_ios\_show\_ip\_ospf\_database\_router [\#606](https://github.com/networktocode/ntc-templates/pull/606) ([ChristopherJHart](https://github.com/ChristopherJHart)) -- New Template: cisco\_s300\_show\_version [\#605](https://github.com/networktocode/ntc-templates/pull/605) ([wdennis](https://github.com/wdennis)) -- Enhancements: IOS show ip access-list [\#603](https://github.com/networktocode/ntc-templates/pull/603) ([jpobeda](https://github.com/jpobeda)) -- Cisco nxos show vrf interface [\#602](https://github.com/networktocode/ntc-templates/pull/602) ([JoeyG1973](https://github.com/JoeyG1973)) -- New Template Show Mpls interface [\#600](https://github.com/networktocode/ntc-templates/pull/600) ([alekgozali](https://github.com/alekgozali)) -- New Template : Show Etherchannel Summary [\#599](https://github.com/networktocode/ntc-templates/pull/599) ([alekgozali](https://github.com/alekgozali)) -- Fixes for cisco\_ios\_show\_running-config\_partition\_access-list template [\#598](https://github.com/networktocode/ntc-templates/pull/598) ([jpobeda](https://github.com/jpobeda)) -- add huawei vrp display version [\#597](https://github.com/networktocode/ntc-templates/pull/597) ([lutfisan](https://github.com/lutfisan)) -- Cisco XR - admin show environment power - template [\#596](https://github.com/networktocode/ntc-templates/pull/596) ([hijm](https://github.com/hijm)) -- Added Checkpoint GAIA show arp dynamic all template [\#595](https://github.com/networktocode/ntc-templates/pull/595) ([dys152](https://github.com/dys152)) -- add show arp for aruba\_os [\#594](https://github.com/networktocode/ntc-templates/pull/594) ([dmwcode](https://github.com/dmwcode)) -- New Template - CISCO IOS - Show Module [\#593](https://github.com/networktocode/ntc-templates/pull/593) ([alekgozali](https://github.com/alekgozali)) -- New Template: cisco\_nxos\_show\_vdc.textfsm [\#591](https://github.com/networktocode/ntc-templates/pull/591) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- New Template: cisco\_ios\_show\_ip\_bgp\_neighbors.textfsm [\#590](https://github.com/networktocode/ntc-templates/pull/590) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- BugFix: arista\_eos\_show\_ip\_route: added new vrf format and secondary route catch [\#589](https://github.com/networktocode/ntc-templates/pull/589) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- Bug Fix: Cisco IOS show interfaces switchport [\#587](https://github.com/networktocode/ntc-templates/pull/587) ([kwrobert](https://github.com/kwrobert)) -- Bug Fix: Cisco IOS show mac address-table [\#585](https://github.com/networktocode/ntc-templates/pull/585) ([kwrobert](https://github.com/kwrobert)) -- Jschulman cisco nxos allow missing transceiver type [\#582](https://github.com/networktocode/ntc-templates/pull/582) ([jeremyschulman](https://github.com/jeremyschulman)) -- New Template: Cisco WLC show wlan summary [\#581](https://github.com/networktocode/ntc-templates/pull/581) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- New Template Pull Request - cisco\_xr\_show\_interfaces\_summary [\#580](https://github.com/networktocode/ntc-templates/pull/580) ([hijm](https://github.com/hijm)) -- New Templates: Fortinet get system interface and status [\#578](https://github.com/networktocode/ntc-templates/pull/578) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- Bug Fix for cisco ios show mac address-table parser [\#577](https://github.com/networktocode/ntc-templates/pull/577) ([kwrobert](https://github.com/kwrobert)) -- New Templat: Huawei display lldp neighbor [\#576](https://github.com/networktocode/ntc-templates/pull/576) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- BugFix: NXOS show version - Add n5k platform regex [\#575](https://github.com/networktocode/ntc-templates/pull/575) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- Bug Fix: ASA Show failover - Account for new data [\#574](https://github.com/networktocode/ntc-templates/pull/574) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- New Template: Show arp - ASA [\#573](https://github.com/networktocode/ntc-templates/pull/573) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- Add SERIAL to Cisco IOS LLDP Neighbors Detail [\#572](https://github.com/networktocode/ntc-templates/pull/572) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- New Template: Cisco XR - show arp [\#567](https://github.com/networktocode/ntc-templates/pull/567) ([migueloangelo](https://github.com/migueloangelo)) -- cisco\_ios\_show\_license - avoid trailing white spaces [\#565](https://github.com/networktocode/ntc-templates/pull/565) ([migueloangelo](https://github.com/migueloangelo)) -- New Template for Cisco NXOS - show\_interface\_transceiver [\#564](https://github.com/networktocode/ntc-templates/pull/564) ([dgarros](https://github.com/dgarros)) -- Enhancement: IOS show int switchport - Add ADMIN\_MODE Group [\#563](https://github.com/networktocode/ntc-templates/pull/563) ([jmcgill298](https://github.com/jmcgill298)) -- Cisco ASA Show Logging Template [\#562](https://github.com/networktocode/ntc-templates/pull/562) ([afoster213](https://github.com/afoster213)) -- New Template for Cisco IOS Log Messages [\#554](https://github.com/networktocode/ntc-templates/pull/554) ([afoster213](https://github.com/afoster213)) -- Cleanup some testing [\#551](https://github.com/networktocode/ntc-templates/pull/551) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- Fixes \#544: Added new parsed sample based on 3750G 15.0\(2\)SE11 code, … [\#548](https://github.com/networktocode/ntc-templates/pull/548) ([jvanderaa](https://github.com/jvanderaa)) -- PYTHON FORMATTING: Add Black to tox file [\#407](https://github.com/networktocode/ntc-templates/pull/407) ([jmcgill298](https://github.com/jmcgill298)) - -## [v1.3.0](https://github.com/networktocode/ntc-templates/tree/v1.3.0) (2019-11-18) - -[Full Changelog](https://github.com/networktocode/ntc-templates/compare/v1.2.1...v1.3.0) - -**Implemented enhancements:** - -- cisco\_ios\_show\_standby\_brief.template support for interfaces and output in two lines [\#483](https://github.com/networktocode/ntc-templates/issues/483) -- New template cisco\_ios\_show\_snmp\_user.template [\#390](https://github.com/networktocode/ntc-templates/issues/390) -- added last\_link\_flapped to nxos\_show\_interface [\#531](https://github.com/networktocode/ntc-templates/pull/531) ([aSauerwein](https://github.com/aSauerwein)) -- Adding Values for route-map names fetch for nxos\_sh\_ip\_bgp\_nei [\#481](https://github.com/networktocode/ntc-templates/pull/481) ([nnaukwal](https://github.com/nnaukwal)) -- Added BGP up/down time to sh ip bgp summary [\#476](https://github.com/networktocode/ntc-templates/pull/476) ([corvese](https://github.com/corvese)) -- Update cisco\_ios\_show\_ip\_eigrp\_topology.template [\#445](https://github.com/networktocode/ntc-templates/pull/445) ([thomasbridge74](https://github.com/thomasbridge74)) -- Cisco wlc template [\#391](https://github.com/networktocode/ntc-templates/pull/391) ([hisaza](https://github.com/hisaza)) -- Cisco xr show route vrf all [\#378](https://github.com/networktocode/ntc-templates/pull/378) ([Warsenius](https://github.com/Warsenius)) - -**Fixed bugs:** - -- cisco\_ios\_show\_interfaces\_switchport.template broken [\#537](https://github.com/networktocode/ntc-templates/issues/537) -- "Cisco IOS show authentication session" issue when session count exceeds ~10 [\#473](https://github.com/networktocode/ntc-templates/issues/473) -- cisco\_ios\_show\_ip\_interface.template does not deal with peer address on virtual-access interface [\#461](https://github.com/networktocode/ntc-templates/issues/461) -- arista\_eos\_show\_interfaces\_status.template does not deal with disabled ports properly [\#460](https://github.com/networktocode/ntc-templates/issues/460) -- cisco\_ios\_show\_ip\_eigrp\_topology.template does not deal with redistributed routes. [\#459](https://github.com/networktocode/ntc-templates/issues/459) -- Cisco ASA - show failover error [\#424](https://github.com/networktocode/ntc-templates/issues/424) -- wrong info returned when not space between interface name and number from show cdp neighbor [\#415](https://github.com/networktocode/ntc-templates/issues/415) -- show\_mac\_address-table - Output contains single dictionary [\#385](https://github.com/networktocode/ntc-templates/issues/385) -- Fix netflow and wccp lines [\#494](https://github.com/networktocode/ntc-templates/pull/494) ([targuan](https://github.com/targuan)) -- Fix mac address table [\#485](https://github.com/networktocode/ntc-templates/pull/485) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- Issue 415 cdp [\#480](https://github.com/networktocode/ntc-templates/pull/480) ([mullaneywt](https://github.com/mullaneywt)) -- Issue 472 patch [\#479](https://github.com/networktocode/ntc-templates/pull/479) ([mullaneywt](https://github.com/mullaneywt)) -- fixed ports [\#471](https://github.com/networktocode/ntc-templates/pull/471) ([dainok](https://github.com/dainok)) -- Fixes \#424: Cisco ASA - show failover error. [\#465](https://github.com/networktocode/ntc-templates/pull/465) ([deesel](https://github.com/deesel)) -- Issue \#384 cisco\_asa\_show\_route - Fix uptime issue [\#401](https://github.com/networktocode/ntc-templates/pull/401) ([brandomando](https://github.com/brandomando)) - -**Closed issues:** - -- cisco\_asa bug in 9.10.1.22 causes `show inventory` template to fail [\#498](https://github.com/networktocode/ntc-templates/issues/498) -- Cisco IOS LLDP [\#484](https://github.com/networktocode/ntc-templates/issues/484) -- cisco\_nxos\_show\_interface\_brief does not deal with pvlan and fabric interfaces [\#472](https://github.com/networktocode/ntc-templates/issues/472) -- cisco\_ios\_show\_lldp\_neighbors\_detail failing when last neighbor includes" MED information" section [\#444](https://github.com/networktocode/ntc-templates/issues/444) -- New Template: cisco\_ios\_show\_license [\#440](https://github.com/networktocode/ntc-templates/issues/440) -- nxos\_show\_interface\_status\_template error [\#420](https://github.com/networktocode/ntc-templates/issues/420) -- README Documentation missing setup information [\#411](https://github.com/networktocode/ntc-templates/issues/411) -- Arista and show int status [\#410](https://github.com/networktocode/ntc-templates/issues/410) -- Cisco ASA show route template error [\#384](https://github.com/networktocode/ntc-templates/issues/384) -- Build is failing in Travis CI [\#240](https://github.com/networktocode/ntc-templates/issues/240) - -**Merged pull requests:** - -- Update CHANGELOG and bump version [\#542](https://github.com/networktocode/ntc-templates/pull/542) ([jmcgill298](https://github.com/jmcgill298)) -- Update state transitions to provide more consistency across platforms [\#541](https://github.com/networktocode/ntc-templates/pull/541) ([jmcgill298](https://github.com/jmcgill298)) -- cisco\_ios\_show\_environment\_temperature.template, iOS, show environment temperature [\#540](https://github.com/networktocode/ntc-templates/pull/540) ([bobbytayar](https://github.com/bobbytayar)) -- show interface summary [\#539](https://github.com/networktocode/ntc-templates/pull/539) ([timjsmith24](https://github.com/timjsmith24)) -- Fixes 537 - IOS show interfaces switchport - Changed output [\#538](https://github.com/networktocode/ntc-templates/pull/538) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- Issue 440 [\#533](https://github.com/networktocode/ntc-templates/pull/533) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- Show snmp user [\#532](https://github.com/networktocode/ntc-templates/pull/532) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- Enhancement - fortinet - get router info bgp summary [\#529](https://github.com/networktocode/ntc-templates/pull/529) ([corvese](https://github.com/corvese)) -- Enhancement: Update templates to record on new entry [\#528](https://github.com/networktocode/ntc-templates/pull/528) ([jmcgill298](https://github.com/jmcgill298)) -- Cisco voice vlan [\#527](https://github.com/networktocode/ntc-templates/pull/527) ([ThreeFDDI](https://github.com/ThreeFDDI)) -- Adv 802dot11 channel [\#526](https://github.com/networktocode/ntc-templates/pull/526) ([timjsmith24](https://github.com/timjsmith24)) -- BugFix: IOS - Add capturing of timestamp data for vty lines that auto print one [\#525](https://github.com/networktocode/ntc-templates/pull/525) ([jmcgill298](https://github.com/jmcgill298)) -- New Template - EOS - show vrf [\#524](https://github.com/networktocode/ntc-templates/pull/524) ([jmcgill298](https://github.com/jmcgill298)) -- Enhancement - IOS - show mac-address - add data validation and tests [\#523](https://github.com/networktocode/ntc-templates/pull/523) ([jmcgill298](https://github.com/jmcgill298)) -- Enhancement - EOS - Allow show bgp summary to be used for show bgp evpn summary [\#522](https://github.com/networktocode/ntc-templates/pull/522) ([jmcgill298](https://github.com/jmcgill298)) -- Enhancement - EOS|NXOS - sh ip route add capturing of VRF [\#521](https://github.com/networktocode/ntc-templates/pull/521) ([jmcgill298](https://github.com/jmcgill298)) -- Enhancement: IOS|EOS - show bgp summ - Account for VRF syntax [\#520](https://github.com/networktocode/ntc-templates/pull/520) ([jmcgill298](https://github.com/jmcgill298)) -- BugFix: XR - show version - account for CRS output [\#519](https://github.com/networktocode/ntc-templates/pull/519) ([jmcgill298](https://github.com/jmcgill298)) -- New Template - Ciena - software show [\#518](https://github.com/networktocode/ntc-templates/pull/518) ([jmcgill298](https://github.com/jmcgill298)) -- BugFix: EOS - show bgp summ - match RID/AS more precisely [\#517](https://github.com/networktocode/ntc-templates/pull/517) ([jmcgill298](https://github.com/jmcgill298)) -- BugFix: IOS - show ip int - account for serial intfs [\#516](https://github.com/networktocode/ntc-templates/pull/516) ([jmcgill298](https://github.com/jmcgill298)) -- New Template: WLC - show inventory [\#515](https://github.com/networktocode/ntc-templates/pull/515) ([jmcgill298](https://github.com/jmcgill298)) -- New Template - IOS - show process memory sorted [\#514](https://github.com/networktocode/ntc-templates/pull/514) ([jmcgill298](https://github.com/jmcgill298)) -- New Template: WLC - show rf profile-summary [\#513](https://github.com/networktocode/ntc-templates/pull/513) ([jmcgill298](https://github.com/jmcgill298)) -- New Templates - Huawei VRP - display interface and display temp [\#512](https://github.com/networktocode/ntc-templates/pull/512) ([jmcgill298](https://github.com/jmcgill298)) -- New Template: WLC - show 802.11 cleanair config [\#510](https://github.com/networktocode/ntc-templates/pull/510) ([jmcgill298](https://github.com/jmcgill298)) -- BugFix: WLC 80211 - Add missing EoL to matching empty lines [\#508](https://github.com/networktocode/ntc-templates/pull/508) ([jmcgill298](https://github.com/jmcgill298)) -- cisco nxos bgp neighbor defect fix [\#505](https://github.com/networktocode/ntc-templates/pull/505) ([nnaukwal](https://github.com/nnaukwal)) -- BugFix: IOS show standby brief - support multiline output [\#503](https://github.com/networktocode/ntc-templates/pull/503) ([jmcgill298](https://github.com/jmcgill298)) -- Cisco WLC Command - Show 802 11a|b [\#501](https://github.com/networktocode/ntc-templates/pull/501) ([timjsmith24](https://github.com/timjsmith24)) -- Fixes498 - Cisco ASA with Extra Output in `show inventory` [\#499](https://github.com/networktocode/ntc-templates/pull/499) ([jvanderaa](https://github.com/jvanderaa)) -- Enhancement: ASA - Convert show version serial to list [\#497](https://github.com/networktocode/ntc-templates/pull/497) ([jmcgill298](https://github.com/jmcgill298)) -- Add arista eos show ip helper [\#496](https://github.com/networktocode/ntc-templates/pull/496) ([targuan](https://github.com/targuan)) -- Fix \#461 [\#495](https://github.com/networktocode/ntc-templates/pull/495) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- Add ruckus\_fastiron show arp template [\#493](https://github.com/networktocode/ntc-templates/pull/493) ([QuasarKid](https://github.com/QuasarKid)) -- New Template: cisco\_xr\_show\_ipv6\_neighbors [\#492](https://github.com/networktocode/ntc-templates/pull/492) ([charlesmonson](https://github.com/charlesmonson)) -- Switch detail [\#491](https://github.com/networktocode/ntc-templates/pull/491) ([jmcgill298](https://github.com/jmcgill298)) -- Cisco NXoS template for "show forwarding ipv4 route" [\#489](https://github.com/networktocode/ntc-templates/pull/489) ([nnaukwal](https://github.com/nnaukwal)) -- Fix \#460 [\#488](https://github.com/networktocode/ntc-templates/pull/488) ([targuan](https://github.com/targuan)) -- Add test case for 3650/3850 output [\#487](https://github.com/networktocode/ntc-templates/pull/487) ([targuan](https://github.com/targuan)) -- nxos - Template for show route-map command [\#486](https://github.com/networktocode/ntc-templates/pull/486) ([nnaukwal](https://github.com/nnaukwal)) -- Cisco XR admin show inventory [\#482](https://github.com/networktocode/ntc-templates/pull/482) ([charlesmonson](https://github.com/charlesmonson)) -- Add template cisco\_nxos\_show\_ip\_interface\_brief [\#478](https://github.com/networktocode/ntc-templates/pull/478) ([mullaneywt](https://github.com/mullaneywt)) -- BugFix: allow various time formats for ip mroute [\#474](https://github.com/networktocode/ntc-templates/pull/474) ([jmcgill298](https://github.com/jmcgill298)) -- template for show arp in watchguard [\#468](https://github.com/networktocode/ntc-templates/pull/468) ([dainok](https://github.com/dainok)) -- Paloalto panos arp fix [\#466](https://github.com/networktocode/ntc-templates/pull/466) ([dainok](https://github.com/dainok)) -- HP Comware `display counters \(inbound|outbound\) interface` [\#464](https://github.com/networktocode/ntc-templates/pull/464) ([ad8-bdl](https://github.com/ad8-bdl)) -- ASA show asp drop changes [\#446](https://github.com/networktocode/ntc-templates/pull/446) ([vaneuk](https://github.com/vaneuk)) -- add cisco\_wlc\_ssh\_show\_exclusionlist [\#425](https://github.com/networktocode/ntc-templates/pull/425) ([ancker010](https://github.com/ancker010)) -- fix: show ip bgp examples appear to be swapped [\#421](https://github.com/networktocode/ntc-templates/pull/421) ([cmccormack](https://github.com/cmccormack)) -- Bugfix: asa\_dir template to account for change in raw output [\#419](https://github.com/networktocode/ntc-templates/pull/419) ([FragmentedPacket](https://github.com/FragmentedPacket)) - -## [v1.2.1](https://github.com/networktocode/ntc-templates/tree/v1.2.1) (2019-09-26) - -[Full Changelog](https://github.com/networktocode/ntc-templates/compare/v1.2.0...v1.2.1) - -## [v1.2.0](https://github.com/networktocode/ntc-templates/tree/v1.2.0) (2019-09-26) - -[Full Changelog](https://github.com/networktocode/ntc-templates/compare/v1.1.1...v1.2.0) - -**Implemented enhancements:** - -- FileNotFoundError on Windows 10 [\#455](https://github.com/networktocode/ntc-templates/issues/455) -- Cisco ASA - Missing capture of Software Compile Date [\#387](https://github.com/networktocode/ntc-templates/issues/387) - -**Merged pull requests:** - -- Updates as requested [\#470](https://github.com/networktocode/ntc-templates/pull/470) ([jvanderaa](https://github.com/jvanderaa)) -- Remove extraneous \(duplicate\) test [\#463](https://github.com/networktocode/ntc-templates/pull/463) ([ad8-bdl](https://github.com/ad8-bdl)) -- Support for locating templates when installing local directory on Windows - Fixes \#455 [\#456](https://github.com/networktocode/ntc-templates/pull/456) ([jmcgill298](https://github.com/jmcgill298)) -- Update cisco\_xr\_show\_version.template [\#442](https://github.com/networktocode/ntc-templates/pull/442) ([mspiez](https://github.com/mspiez)) -- Cisco xr show interfaces duplex and mac for bundle ethernet [\#389](https://github.com/networktocode/ntc-templates/pull/389) ([Warsenius](https://github.com/Warsenius)) - -## [v1.1.1](https://github.com/networktocode/ntc-templates/tree/v1.1.1) (2019-08-08) - -[Full Changelog](https://github.com/networktocode/ntc-templates/compare/0.9.0...v1.1.1) - -**Implemented enhancements:** - -- cisco\_ios\_show\_version.template Add Licensing [\#256](https://github.com/networktocode/ntc-templates/issues/256) -- Adding cisco\_ios\_show\_ip\_interface [\#322](https://github.com/networktocode/ntc-templates/pull/322) ([vladola](https://github.com/vladola)) -- Packaging [\#288](https://github.com/networktocode/ntc-templates/pull/288) ([micahculpepper](https://github.com/micahculpepper)) - -**Fixed bugs:** - -- nxos show interface status issue [\#426](https://github.com/networktocode/ntc-templates/issues/426) -- CISCO\_XR\_SH\_INTF: Parsed file shows that not all interfaces in raw are being parsed/recorded [\#282](https://github.com/networktocode/ntc-templates/issues/282) -- Test files for aruba os need renamed. [\#224](https://github.com/networktocode/ntc-templates/issues/224) - -**Closed issues:** - -- show\_lldp\_neighbors.template failing when switch + domain name is \> 19 characters [\#375](https://github.com/networktocode/ntc-templates/issues/375) -- cisco\_ios\_show\_lldp\_neighbor\_detail failing when `Physical media capabilities` are `Other/unknown` [\#374](https://github.com/networktocode/ntc-templates/issues/374) -- Master branch fails tox tests [\#361](https://github.com/networktocode/ntc-templates/issues/361) -- cisco\_nxos\_show\_interface\_status.template [\#333](https://github.com/networktocode/ntc-templates/issues/333) -- cisco\_nxos\_show\_interface\_status.template: error on 10G and 40G interfaces [\#331](https://github.com/networktocode/ntc-templates/issues/331) -- cisco\_ios\_show\_vlan.template not recorded complete list of interfaces [\#328](https://github.com/networktocode/ntc-templates/issues/328) -- Problem with parsing ASA ACL [\#287](https://github.com/networktocode/ntc-templates/issues/287) -- New Template Request [\#286](https://github.com/networktocode/ntc-templates/issues/286) -- cisco\_xr\_show\_interfaces.template line 4 regex incorrect [\#280](https://github.com/networktocode/ntc-templates/issues/280) -- cisco\_xr\_show\_cdp\_neighbors\_detail.template shows remote and local interface incorrectly [\#277](https://github.com/networktocode/ntc-templates/issues/277) -- Multiple Failing Use Cases in Cisco IOS ACL Template [\#245](https://github.com/networktocode/ntc-templates/issues/245) -- cisco\_asa\_show\_vpn-sessiondb\_detail\_l2l.template not parsing [\#231](https://github.com/networktocode/ntc-templates/issues/231) -- show interface status for cisco\_nxos returns incorrect 'name' and 'port' objects if there are spaces in the description. [\#196](https://github.com/networktocode/ntc-templates/issues/196) -- cisco\_xr\_show\_ip\_route uptime format and protocol sub-type support [\#185](https://github.com/networktocode/ntc-templates/issues/185) - -**Merged pull requests:** - -- Update readme [\#452](https://github.com/networktocode/ntc-templates/pull/452) ([jmcgill298](https://github.com/jmcgill298)) -- Fix spacing new templates [\#443](https://github.com/networktocode/ntc-templates/pull/443) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- Fixes \#224 Updating aurba test file names to match folder/file naming pattern [\#439](https://github.com/networktocode/ntc-templates/pull/439) ([myyellowshoe](https://github.com/myyellowshoe)) -- add Cisco IOS XR 'show ip interface brief' command [\#438](https://github.com/networktocode/ntc-templates/pull/438) ([dampfhamm3r](https://github.com/dampfhamm3r)) -- Cisco nxos show interfaces switchport [\#434](https://github.com/networktocode/ntc-templates/pull/434) ([dainok](https://github.com/dainok)) -- Cisco ios show interfaces switchport [\#433](https://github.com/networktocode/ntc-templates/pull/433) ([dainok](https://github.com/dainok)) -- Paloalto panos show arp all [\#432](https://github.com/networktocode/ntc-templates/pull/432) ([dainok](https://github.com/dainok)) -- Paloalto panos show mac all [\#431](https://github.com/networktocode/ntc-templates/pull/431) ([dainok](https://github.com/dainok)) -- Hp procurve show mac address [\#430](https://github.com/networktocode/ntc-templates/pull/430) ([dainok](https://github.com/dainok)) -- New template cisco\_ios\_show\_snmp\_user.template [\#429](https://github.com/networktocode/ntc-templates/pull/429) ([jifox](https://github.com/jifox)) -- nxos\_show\_interface\_status: Allows capture of Fabric Exte type [\#427](https://github.com/networktocode/ntc-templates/pull/427) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- Tests [\#402](https://github.com/networktocode/ntc-templates/pull/402) ([jmcgill298](https://github.com/jmcgill298)) -- Feature/improve cisco ios show vrf [\#395](https://github.com/networktocode/ntc-templates/pull/395) ([MatthiasGabriel](https://github.com/MatthiasGabriel)) -- Feature/cisco ios show hosts [\#394](https://github.com/networktocode/ntc-templates/pull/394) ([MatthiasGabriel](https://github.com/MatthiasGabriel)) -- cisco\_nxos\_show\_version extension for pulling PLATFORM from N9K [\#393](https://github.com/networktocode/ntc-templates/pull/393) ([jonesbra](https://github.com/jonesbra)) -- Cisco IOS - show dmvpn - New template [\#392](https://github.com/networktocode/ntc-templates/pull/392) ([adrydale](https://github.com/adrydale)) -- updated template to catch NSR N/A state [\#381](https://github.com/networktocode/ntc-templates/pull/381) ([Warsenius](https://github.com/Warsenius)) -- show ospf neighbor NEIGHBOR\_UPTIME no match when output in 1w2d format [\#380](https://github.com/networktocode/ntc-templates/pull/380) ([Warsenius](https://github.com/Warsenius)) -- Fixes 374 - Adds example of Other/unknown media on LLDP for a device … [\#377](https://github.com/networktocode/ntc-templates/pull/377) ([jvanderaa](https://github.com/jvanderaa)) -- Updated the template to get first 20 chars on LLDP neighbor for case … [\#376](https://github.com/networktocode/ntc-templates/pull/376) ([jvanderaa](https://github.com/jvanderaa)) -- add Cisco IOS show ip flow toptalkers [\#373](https://github.com/networktocode/ntc-templates/pull/373) ([lscarmic](https://github.com/lscarmic)) -- Updated LLDP Neighbor Detail for matching on some devices that were missing. [\#372](https://github.com/networktocode/ntc-templates/pull/372) ([jvanderaa](https://github.com/jvanderaa)) -- Add show\_boot template for cisco\_ios [\#371](https://github.com/networktocode/ntc-templates/pull/371) ([FragmentedPacket](https://github.com/FragmentedPacket)) -- Update cisco\_nxos\_show\_interface\_status.template [\#370](https://github.com/networktocode/ntc-templates/pull/370) ([Pluppo](https://github.com/Pluppo)) -- IOS SHOW INTERFACES : adding regexes for skipped values & parsed results [\#368](https://github.com/networktocode/ntc-templates/pull/368) ([lachlanjholmes](https://github.com/lachlanjholmes)) -- Add Cisco IOS show ipv6 neighbors [\#363](https://github.com/networktocode/ntc-templates/pull/363) ([kimoldfield](https://github.com/kimoldfield)) -- XR SHOW LPTS PIFIB HARDWARE POLICE LOCATION: Add new template [\#360](https://github.com/networktocode/ntc-templates/pull/360) ([jmcgill298](https://github.com/jmcgill298)) -- XR SHOW DROPS NP ALL: Add new template [\#359](https://github.com/networktocode/ntc-templates/pull/359) ([jmcgill298](https://github.com/jmcgill298)) -- XR SHOW CONTROLLERS FABRIC FIA ERRORS INGRESS: Add new template [\#358](https://github.com/networktocode/ntc-templates/pull/358) ([jmcgill298](https://github.com/jmcgill298)) -- XR SHOW CONTROLLERS FABRIC FIA ERRORS EGRESS: Add new template [\#357](https://github.com/networktocode/ntc-templates/pull/357) ([jmcgill298](https://github.com/jmcgill298)) -- XR SHOW CONTROLLERS FABRIC FIA DROPS INGRESS: Add new template [\#356](https://github.com/networktocode/ntc-templates/pull/356) ([jmcgill298](https://github.com/jmcgill298)) -- XR SHOW CONTROLLERS FABRIC FIA DROPS EGRESS: Add new template [\#355](https://github.com/networktocode/ntc-templates/pull/355) ([jmcgill298](https://github.com/jmcgill298)) -- CISCO XR SHOW CEF DROPS LOCATION: Add new template [\#354](https://github.com/networktocode/ntc-templates/pull/354) ([jmcgill298](https://github.com/jmcgill298)) -- XR SHOW ASIC ERRORS: Add new template [\#353](https://github.com/networktocode/ntc-templates/pull/353) ([jmcgill298](https://github.com/jmcgill298)) -- XR SHOW BGP: Add new template [\#351](https://github.com/networktocode/ntc-templates/pull/351) ([jmcgill298](https://github.com/jmcgill298)) -- XR SHOW HSRP: Add new template [\#350](https://github.com/networktocode/ntc-templates/pull/350) ([jmcgill298](https://github.com/jmcgill298)) -- XR SHOW CONTROLLERS: Bug Fix [\#349](https://github.com/networktocode/ntc-templates/pull/349) ([jmcgill298](https://github.com/jmcgill298)) -- Create cisco\_ios\_show\_interfaces\_description.template [\#348](https://github.com/networktocode/ntc-templates/pull/348) ([adrydale](https://github.com/adrydale)) -- Aos vlan [\#345](https://github.com/networktocode/ntc-templates/pull/345) ([jmcgill298](https://github.com/jmcgill298)) -- Tacacs cisco [\#344](https://github.com/networktocode/ntc-templates/pull/344) ([jmcgill298](https://github.com/jmcgill298)) -- EOS SHOW MODULE: Add new template [\#343](https://github.com/networktocode/ntc-templates/pull/343) ([jmcgill298](https://github.com/jmcgill298)) -- Patch 2 [\#342](https://github.com/networktocode/ntc-templates/pull/342) ([jmcgill298](https://github.com/jmcgill298)) -- CISCO XR SHOW BGP NEIGH: Add new template [\#341](https://github.com/networktocode/ntc-templates/pull/341) ([jmcgill298](https://github.com/jmcgill298)) -- cisco\_ios\_show\_ip\_bgp: Fix whitespace change in command output [\#340](https://github.com/networktocode/ntc-templates/pull/340) ([paneu](https://github.com/paneu)) -- CISCO\_ASA\_SHOW\_LICENSE\_ALL: Add new template [\#339](https://github.com/networktocode/ntc-templates/pull/339) ([jmcgill298](https://github.com/jmcgill298)) -- CISCO\_ASA\_SHOW\_ASP\_DROP: Add new template [\#338](https://github.com/networktocode/ntc-templates/pull/338) ([jmcgill298](https://github.com/jmcgill298)) -- `ASA INTERFACE DETAIL`: Add new template [\#337](https://github.com/networktocode/ntc-templates/pull/337) ([jmcgill298](https://github.com/jmcgill298)) -- `NETIRON SHOW RUN INTF`: Broaden template scope [\#336](https://github.com/networktocode/ntc-templates/pull/336) ([jmcgill298](https://github.com/jmcgill298)) -- checkpoint\_gaia\_show\_ntp\_servers: Add new template [\#335](https://github.com/networktocode/ntc-templates/pull/335) ([JCapretta](https://github.com/JCapretta)) -- `cisco\_nxos\_show\_interface\_status`: Fixes issue \#333 [\#334](https://github.com/networktocode/ntc-templates/pull/334) ([JCapretta](https://github.com/JCapretta)) -- `cisco\_nxos\_show\_interface\_status`: Fixes issue \#331 [\#332](https://github.com/networktocode/ntc-templates/pull/332) ([JCapretta](https://github.com/JCapretta)) -- Checkpoint gaia show dns.template [\#330](https://github.com/networktocode/ntc-templates/pull/330) ([JCapretta](https://github.com/JCapretta)) -- Modified cisco\_ios\_show\_vlan.template \(\#328\) [\#329](https://github.com/networktocode/ntc-templates/pull/329) ([JCapretta](https://github.com/JCapretta)) -- cisco ios show ip interface: Incorporate \#229 into \#322 [\#326](https://github.com/networktocode/ntc-templates/pull/326) ([jmcgill298](https://github.com/jmcgill298)) -- ASA SHOW RESOURCE: Add new template [\#325](https://github.com/networktocode/ntc-templates/pull/325) ([jmcgill298](https://github.com/jmcgill298)) -- ASA VPN-SESSIONDB: Bug Fixes with new data [\#323](https://github.com/networktocode/ntc-templates/pull/323) ([jmcgill298](https://github.com/jmcgill298)) -- IOS DIR: Account for spaces in permissions [\#321](https://github.com/networktocode/ntc-templates/pull/321) ([jmcgill298](https://github.com/jmcgill298)) -- NX-OS show l2rib internal permanently-frozen-list template [\#320](https://github.com/networktocode/ntc-templates/pull/320) ([vaneuk](https://github.com/vaneuk)) -- Bugfix: cisco asa show access list [\#313](https://github.com/networktocode/ntc-templates/pull/313) ([joewesch](https://github.com/joewesch)) -- Adding cisco\_asa\_show\_nat [\#312](https://github.com/networktocode/ntc-templates/pull/312) ([joewesch](https://github.com/joewesch)) -- cisco\_ios\_show\_dot1x\_all command [\#308](https://github.com/networktocode/ntc-templates/pull/308) ([realvitya](https://github.com/realvitya)) -- Add INPUT\_PACKETS, INPUT\_ERRORS, OUTPUT\_PACKETS, OUTPUT\_ERRORS fields to cisco\_ios\_show\_interfaces & cisco\_nxos\_show\_interface templates [\#307](https://github.com/networktocode/ntc-templates/pull/307) ([wvandeun](https://github.com/wvandeun)) -- Added cisco\_asa "show running-config object network" template [\#306](https://github.com/networktocode/ntc-templates/pull/306) ([joewesch](https://github.com/joewesch)) -- PARSE: Update parse module to account for new and old TextFSM packaging [\#305](https://github.com/networktocode/ntc-templates/pull/305) ([jmcgill298](https://github.com/jmcgill298)) -- Modified cisco\_asa\_show\_crypto\_ipsec\_sa [\#304](https://github.com/networktocode/ntc-templates/pull/304) ([joewesch](https://github.com/joewesch)) -- Added cisco\_asa\_show\_asp\_table\_vpn-context\_detail [\#303](https://github.com/networktocode/ntc-templates/pull/303) ([joewesch](https://github.com/joewesch)) -- Modified cisco\_asa\_show\_object-group\_network.template [\#302](https://github.com/networktocode/ntc-templates/pull/302) ([joewesch](https://github.com/joewesch)) -- Adding support for avaya\_ers\_show\_logging\_config command [\#301](https://github.com/networktocode/ntc-templates/pull/301) ([kadecole](https://github.com/kadecole)) -- change travis and tox to use textfsm [\#300](https://github.com/networktocode/ntc-templates/pull/300) ([jmcgill298](https://github.com/jmcgill298)) -- Change requirements to use `textfsm` instead of `gtextfsm` [\#299](https://github.com/networktocode/ntc-templates/pull/299) ([jmcgill298](https://github.com/jmcgill298)) -- added juniper\_junos\_show\_version.template [\#298](https://github.com/networktocode/ntc-templates/pull/298) ([jkraszewski](https://github.com/jkraszewski)) -- added juniper\_junos\_show\_chassis\_cluster\_status.template [\#297](https://github.com/networktocode/ntc-templates/pull/297) ([jkraszewski](https://github.com/jkraszewski)) -- add juniper\_junos\_show\_chassis\_cluster\_interfaces [\#296](https://github.com/networktocode/ntc-templates/pull/296) ([jkraszewski](https://github.com/jkraszewski)) -- added juniper\_junos\_show\_arp\_no-resolve.template [\#295](https://github.com/networktocode/ntc-templates/pull/295) ([jkraszewski](https://github.com/jkraszewski)) -- modified cisco\_ios\_show\_ip\_arp.template [\#293](https://github.com/networktocode/ntc-templates/pull/293) ([jkraszewski](https://github.com/jkraszewski)) -- added brocade\_fastiron\_show\_mac-address.template [\#292](https://github.com/networktocode/ntc-templates/pull/292) ([jkraszewski](https://github.com/jkraszewski)) -- added brocade\_fastiron\_show\_lldp\_neighbors [\#291](https://github.com/networktocode/ntc-templates/pull/291) ([jkraszewski](https://github.com/jkraszewski)) -- modified brocade\_fastiron\_show\_interfaces\_brief.template [\#290](https://github.com/networktocode/ntc-templates/pull/290) ([jkraszewski](https://github.com/jkraszewski)) -- Brocade fastiron show arp [\#289](https://github.com/networktocode/ntc-templates/pull/289) ([jkraszewski](https://github.com/jkraszewski)) -- Add template for "show ip eigrp neighbors" on Cisco IOS [\#285](https://github.com/networktocode/ntc-templates/pull/285) ([Tachashi](https://github.com/Tachashi)) -- INDEX UPDATES: Fix filenames to use full command syntax [\#284](https://github.com/networktocode/ntc-templates/pull/284) ([jmcgill298](https://github.com/jmcgill298)) -- XR\_SH\_INTF: Update regex to properly capture data - Fixes \#282 [\#283](https://github.com/networktocode/ntc-templates/pull/283) ([jmcgill298](https://github.com/jmcgill298)) -- XR\_SHOW\_INTF: Correct capturing of IP Address info - Fixes \#280 [\#281](https://github.com/networktocode/ntc-templates/pull/281) ([jmcgill298](https://github.com/jmcgill298)) -- XR\_SH\_CDP: Reverse 'REMOTE\_PORT' and 'LOCAL\_PORT' Groups - Fixes \#277 [\#279](https://github.com/networktocode/ntc-templates/pull/279) ([jmcgill298](https://github.com/jmcgill298)) -- CISCO\_ASA\_SH\_FAIL: Update 'SERVICE\_STATE' groups to conform to Cisco'… [\#278](https://github.com/networktocode/ntc-templates/pull/278) ([jmcgill298](https://github.com/jmcgill298)) -- Account for device 'Not Ready' [\#276](https://github.com/networktocode/ntc-templates/pull/276) ([jmcgill298](https://github.com/jmcgill298)) -- CISCO ASA SHOW FAILOVER: Update parsers to account for new data [\#275](https://github.com/networktocode/ntc-templates/pull/275) ([jmcgill298](https://github.com/jmcgill298)) -- Added template for show ip eigrp topology [\#274](https://github.com/networktocode/ntc-templates/pull/274) ([jmcgill298](https://github.com/jmcgill298)) -- Cisco wlc ssh show ap config general [\#273](https://github.com/networktocode/ntc-templates/pull/273) ([jmcgill298](https://github.com/jmcgill298)) -- added show ap summary for Cisco WLC [\#272](https://github.com/networktocode/ntc-templates/pull/272) ([jmcgill298](https://github.com/jmcgill298)) -- Add RELOAD\_REASON to Record [\#271](https://github.com/networktocode/ntc-templates/pull/271) ([jmcgill298](https://github.com/jmcgill298)) -- Add templates for Vyatta [\#270](https://github.com/networktocode/ntc-templates/pull/270) ([jmcgill298](https://github.com/jmcgill298)) -- Add new OS and commands: Ubiquiti edgeswitch: show vlan and show arp support [\#269](https://github.com/networktocode/ntc-templates/pull/269) ([jmcgill298](https://github.com/jmcgill298)) -- Adding support for avaya\_ers\_show\_mlt command [\#268](https://github.com/networktocode/ntc-templates/pull/268) ([jmcgill298](https://github.com/jmcgill298)) -- adding cisco\_xr\_show\_controllers\_hundredgigabitethernet.template [\#267](https://github.com/networktocode/ntc-templates/pull/267) ([jmcgill298](https://github.com/jmcgill298)) -- Update Cisco IOS-XR template for `show ip route` command [\#266](https://github.com/networktocode/ntc-templates/pull/266) ([jmcgill298](https://github.com/jmcgill298)) -- added template for cisco xr : "admin show environment fan" ,"admin show vm" and "show version" [\#264](https://github.com/networktocode/ntc-templates/pull/264) ([jmcgill298](https://github.com/jmcgill298)) -- CISCO IOS SHOW REDUNDANCY: Add new template [\#263](https://github.com/networktocode/ntc-templates/pull/263) ([jmcgill298](https://github.com/jmcgill298)) -- CISCO ASA SHOW XLATE: Add new template [\#262](https://github.com/networktocode/ntc-templates/pull/262) ([jmcgill298](https://github.com/jmcgill298)) -- CISCO ASA SHOW FAILOVER: Add template for failover status [\#260](https://github.com/networktocode/ntc-templates/pull/260) ([jmcgill298](https://github.com/jmcgill298)) -- Add match for empty lines or lines that are only spaces [\#257](https://github.com/networktocode/ntc-templates/pull/257) ([jmcgill298](https://github.com/jmcgill298)) -- Updated show inventory to catch space on the name field [\#252](https://github.com/networktocode/ntc-templates/pull/252) ([amb1s1](https://github.com/amb1s1)) -- CISCO\_IOS\_SHOW\_IP\_PREFIX-LIST: Add new template [\#251](https://github.com/networktocode/ntc-templates/pull/251) ([jmcgill298](https://github.com/jmcgill298)) -- Ios show ip access list [\#250](https://github.com/networktocode/ntc-templates/pull/250) ([jmcgill298](https://github.com/jmcgill298)) -- Add support for standard ACL to include matching the 'match counts' [\#249](https://github.com/networktocode/ntc-templates/pull/249) ([jmcgill298](https://github.com/jmcgill298)) -- CISCO\_IOS\_SHOW\_IP\_ACCESS-LISTS: Add support for parsing connection st… [\#248](https://github.com/networktocode/ntc-templates/pull/248) ([jmcgill298](https://github.com/jmcgill298)) -- FIXES \#245 - CISCO\_IOS\_SHOW\_IP\_ACCESS-LISTS: [\#247](https://github.com/networktocode/ntc-templates/pull/247) ([jmcgill298](https://github.com/jmcgill298)) -- CISCO\_IOS\_SHOW\_ROUTE-MAP: Add new template [\#244](https://github.com/networktocode/ntc-templates/pull/244) ([jmcgill298](https://github.com/jmcgill298)) -- Cisco asa show inventory [\#243](https://github.com/networktocode/ntc-templates/pull/243) ([amb1s1](https://github.com/amb1s1)) -- CISCO\_IOS\_SHOW\_IP\_BGP\_SUMMARY: Add collecting ROUTER\_ID and LOCAL\_AS to parser. [\#242](https://github.com/networktocode/ntc-templates/pull/242) ([jmcgill298](https://github.com/jmcgill298)) -- Brocade fastiron show version [\#241](https://github.com/networktocode/ntc-templates/pull/241) ([jmcgill298](https://github.com/jmcgill298)) -- Fixed cisco\_ios\_show\_cdp\_neighbors when devices has 4+ capabilities [\#235](https://github.com/networktocode/ntc-templates/pull/235) ([bdowling](https://github.com/bdowling)) -- CISCO\_IOS\_SHOW\_RUNNING-CONFIG\_PARTITION\_ROUTE-MAP: Update record stat… [\#233](https://github.com/networktocode/ntc-templates/pull/233) ([jmcgill298](https://github.com/jmcgill298)) -- added show running-config partition route-map [\#228](https://github.com/networktocode/ntc-templates/pull/228) ([AutoJunjie](https://github.com/AutoJunjie)) -- Update TravisCI to use pypi instead of git clone with Pip [\#226](https://github.com/networktocode/ntc-templates/pull/226) ([jmcgill298](https://github.com/jmcgill298)) -- Added/modified show cap/lldp neighbors detail for cisco\*, brocade\*. Added cisco\_ios\_show\_ip\_device\_tracking\_all, cisco\_ios\_show\_ip\_source\_binding [\#225](https://github.com/networktocode/ntc-templates/pull/225) ([hilash](https://github.com/hilash)) -- Nxos communit list [\#220](https://github.com/networktocode/ntc-templates/pull/220) ([jmcgill298](https://github.com/jmcgill298)) -- Add support for cisco show ip mroute [\#216](https://github.com/networktocode/ntc-templates/pull/216) ([rhoriguchi](https://github.com/rhoriguchi)) -- Find MAC addresses in cisco IOS show version. [\#214](https://github.com/networktocode/ntc-templates/pull/214) ([kimoldfield](https://github.com/kimoldfield)) -- NXOS\_SHOW\_INTERFACE\_STATUS: Update template to better handle name wit… Fixes \#196 [\#204](https://github.com/networktocode/ntc-templates/pull/204) ([jmcgill298](https://github.com/jmcgill298)) -- Adding support for avaya\_ers\_show\_mlt\_all-members command [\#202](https://github.com/networktocode/ntc-templates/pull/202) ([kadecole](https://github.com/kadecole)) -- add arista dir flash: [\#187](https://github.com/networktocode/ntc-templates/pull/187) ([ydave](https://github.com/ydave)) -- Update the file to support Cap F on output [\#156](https://github.com/networktocode/ntc-templates/pull/156) ([amb1s1](https://github.com/amb1s1)) -- update cisco\_nxos\_show\_version to support 5ks [\#154](https://github.com/networktocode/ntc-templates/pull/154) ([amb1s1](https://github.com/amb1s1)) - -## [0.9.0](https://github.com/networktocode/ntc-templates/tree/0.9.0) (2018-07-05) - -[Full Changelog](https://github.com/networktocode/ntc-templates/compare/cc61388f3c6e4543b878e426b30420173d6b6bc4...0.9.0) - -**Closed issues:** - -- Unable to parse out subinterface information from Cisco IOS content [\#197](https://github.com/networktocode/ntc-templates/issues/197) -- how to use this template can any once give 1 example and its result for more and better understanding [\#193](https://github.com/networktocode/ntc-templates/issues/193) -- show cdp neighbors for cisco\_ios returns string instead of structured list [\#189](https://github.com/networktocode/ntc-templates/issues/189) -- Template update: cisco\_ios\_show\_vlan to get interface list [\#175](https://github.com/networktocode/ntc-templates/issues/175) -- python3 support [\#149](https://github.com/networktocode/ntc-templates/issues/149) -- Template update: cisco\_nxos\_show\_cdp\_neighbors [\#147](https://github.com/networktocode/ntc-templates/issues/147) -- NXOS-Show\_Interfaces not finding Vlan Interfaces when additional interfaces are past the config. Also potential to provide wrong information. [\#135](https://github.com/networktocode/ntc-templates/issues/135) -- hp\_procurve\_show\_vlans.template empty output [\#124](https://github.com/networktocode/ntc-templates/issues/124) -- 'show memory statistics' cisco switch/rotuer template [\#121](https://github.com/networktocode/ntc-templates/issues/121) -- Cisco ASA show version template [\#110](https://github.com/networktocode/ntc-templates/issues/110) -- License question [\#92](https://github.com/networktocode/ntc-templates/issues/92) -- cisco\_ios\_show\_ip\_bgp.template some entries are not parsed [\#87](https://github.com/networktocode/ntc-templates/issues/87) -- missing tests folder for cisco\_ios\_show\_ip\_bgp [\#74](https://github.com/networktocode/ntc-templates/issues/74) -- Issues with trying to use the test-template playbook [\#73](https://github.com/networktocode/ntc-templates/issues/73) -- ios show mac address-table [\#59](https://github.com/networktocode/ntc-templates/issues/59) -- nxos show lldp neighbors failing when there is hostname is long [\#58](https://github.com/networktocode/ntc-templates/issues/58) -- arista route template [\#57](https://github.com/networktocode/ntc-templates/issues/57) -- ios show standby brief active/standby state [\#52](https://github.com/networktocode/ntc-templates/issues/52) -- Need help on parsing the show platform diag output [\#48](https://github.com/networktocode/ntc-templates/issues/48) -- need a help on escaping the parenthesis [\#47](https://github.com/networktocode/ntc-templates/issues/47) -- Need an info [\#46](https://github.com/networktocode/ntc-templates/issues/46) -- Difference between Start and Record Start? [\#41](https://github.com/networktocode/ntc-templates/issues/41) - -**Merged pull requests:** - -- Cleanup [\#221](https://github.com/networktocode/ntc-templates/pull/221) ([GGabriele](https://github.com/GGabriele)) -- Fixed README formatting and typos [\#215](https://github.com/networktocode/ntc-templates/pull/215) ([LindsayHill](https://github.com/LindsayHill)) -- Move Record to Interface opening line to ensure each unaccounted for … [\#212](https://github.com/networktocode/ntc-templates/pull/212) ([jmcgill298](https://github.com/jmcgill298)) -- CISCO\_IOS\_SHOW\_VLAN: Add support for capturing interfaces associated … [\#210](https://github.com/networktocode/ntc-templates/pull/210) ([jmcgill298](https://github.com/jmcgill298)) -- Update with virtual interfaces [\#209](https://github.com/networktocode/ntc-templates/pull/209) ([jvanderaa](https://github.com/jvanderaa)) -- NXOS\_SHOW\_CDP\_NEIGHBORS: Add additonal capture groups [\#208](https://github.com/networktocode/ntc-templates/pull/208) ([jmcgill298](https://github.com/jmcgill298)) -- IOS\_SHOW\_INTERFACES: Add additional logic to account for sub-interfaces [\#206](https://github.com/networktocode/ntc-templates/pull/206) ([jmcgill298](https://github.com/jmcgill298)) -- INDEX: Fix index file out of order [\#205](https://github.com/networktocode/ntc-templates/pull/205) ([jmcgill298](https://github.com/jmcgill298)) -- Procurve show vlans [\#201](https://github.com/networktocode/ntc-templates/pull/201) ([jmcgill298](https://github.com/jmcgill298)) -- add pytest chache to gitignore [\#200](https://github.com/networktocode/ntc-templates/pull/200) ([jmcgill298](https://github.com/jmcgill298)) -- Fix index file out of order [\#199](https://github.com/networktocode/ntc-templates/pull/199) ([jmcgill298](https://github.com/jmcgill298)) -- Fix printing to use function for py3 compatibility [\#198](https://github.com/networktocode/ntc-templates/pull/198) ([jmcgill298](https://github.com/jmcgill298)) -- Adding 4 templates [\#192](https://github.com/networktocode/ntc-templates/pull/192) ([rishabh5j](https://github.com/rishabh5j)) -- adding bash\_df\_-h and show\_reload\_cause templates for arista\_eos [\#182](https://github.com/networktocode/ntc-templates/pull/182) ([Sandeepsr](https://github.com/Sandeepsr)) -- adding cisco\_xr show\_controller\_fabric\_plane\_all and admin\_show\_contr… [\#181](https://github.com/networktocode/ntc-templates/pull/181) ([Sandeepsr](https://github.com/Sandeepsr)) -- Adding "get route" template for IPv4 for Juniper NetScreen \(screenos\) [\#180](https://github.com/networktocode/ntc-templates/pull/180) ([burningnode](https://github.com/burningnode)) -- cisco xr lldp and route [\#176](https://github.com/networktocode/ntc-templates/pull/176) ([itdependsnetworks](https://github.com/itdependsnetworks)) -- adding arista\_macsec\_templates [\#174](https://github.com/networktocode/ntc-templates/pull/174) ([Sandeepsr](https://github.com/Sandeepsr)) -- adding cisco\_xr\_show\_ip\_bgp\_summary.template [\#170](https://github.com/networktocode/ntc-templates/pull/170) ([Sandeepsr](https://github.com/Sandeepsr)) -- added show vrf and show ip arp for nxos [\#167](https://github.com/networktocode/ntc-templates/pull/167) ([vaneuk](https://github.com/vaneuk)) -- IOS\_SHOW\_RUN\_CONFIG\_PARTITION\_ACL: Add new template [\#166](https://github.com/networktocode/ntc-templates/pull/166) ([jmcgill298](https://github.com/jmcgill298)) -- IOS\_SHOW\_IP\_ACL: new template [\#165](https://github.com/networktocode/ntc-templates/pull/165) ([jmcgill298](https://github.com/jmcgill298)) -- ASA\_SHOW\_IP\_ACCESS\_LIST: Add catch-all error [\#164](https://github.com/networktocode/ntc-templates/pull/164) ([jmcgill298](https://github.com/jmcgill298)) -- change top dir logic [\#163](https://github.com/networktocode/ntc-templates/pull/163) ([itdependsnetworks](https://github.com/itdependsnetworks)) -- Update cisco\_nxos\_show\_lldp\_neighbors.template & index file [\#162](https://github.com/networktocode/ntc-templates/pull/162) ([termlen0](https://github.com/termlen0)) -- Avaya vsp show software [\#161](https://github.com/networktocode/ntc-templates/pull/161) ([kadecole](https://github.com/kadecole)) -- added show config sess summ [\#160](https://github.com/networktocode/ntc-templates/pull/160) ([jedelman8](https://github.com/jedelman8)) -- adding arista\_eos\_show\_interfaces\_transceiver.template and edit arist… [\#159](https://github.com/networktocode/ntc-templates/pull/159) ([Sandeepsr](https://github.com/Sandeepsr)) -- Alex up [\#158](https://github.com/networktocode/ntc-templates/pull/158) ([itdependsnetworks](https://github.com/itdependsnetworks)) -- Avaya ers show interface name [\#157](https://github.com/networktocode/ntc-templates/pull/157) ([kadecole](https://github.com/kadecole)) -- Added Avaya ERS templates [\#155](https://github.com/networktocode/ntc-templates/pull/155) ([kadecole](https://github.com/kadecole)) -- Adjusted hp\_procurve\_show\_vlans.template to account for varying outputs. [\#148](https://github.com/networktocode/ntc-templates/pull/148) ([tsimson](https://github.com/tsimson)) -- Added Avaya ERS templates [\#146](https://github.com/networktocode/ntc-templates/pull/146) ([OfWolfAndMan](https://github.com/OfWolfAndMan)) -- Show power commands [\#144](https://github.com/networktocode/ntc-templates/pull/144) ([ericdost](https://github.com/ericdost)) -- Fix CDP to work with 3 capablities in cdp output [\#143](https://github.com/networktocode/ntc-templates/pull/143) ([itdependsnetworks](https://github.com/itdependsnetworks)) -- update nxos show interface for vlan [\#140](https://github.com/networktocode/ntc-templates/pull/140) ([itdependsnetworks](https://github.com/itdependsnetworks)) -- Ios sh status [\#139](https://github.com/networktocode/ntc-templates/pull/139) ([itdependsnetworks](https://github.com/itdependsnetworks)) -- Update NXOS show-ip-route for more scenarios [\#138](https://github.com/networktocode/ntc-templates/pull/138) ([jamiecaesar](https://github.com/jamiecaesar)) -- Show environment power all [\#137](https://github.com/networktocode/ntc-templates/pull/137) ([ericdost](https://github.com/ericdost)) -- Add ASA VPN Troubelshooting Commands [\#136](https://github.com/networktocode/ntc-templates/pull/136) ([jmcgill298](https://github.com/jmcgill298)) -- Added new template: Cisco ASA show interface [\#134](https://github.com/networktocode/ntc-templates/pull/134) ([jvanderaa](https://github.com/jvanderaa)) -- Updated IOS show-ip-route to handle additional cases [\#133](https://github.com/networktocode/ntc-templates/pull/133) ([jamiecaesar](https://github.com/jamiecaesar)) -- Add ASA Templates [\#131](https://github.com/networktocode/ntc-templates/pull/131) ([jmcgill298](https://github.com/jmcgill298)) -- fix pfs when no value present [\#129](https://github.com/networktocode/ntc-templates/pull/129) ([jmcgill298](https://github.com/jmcgill298)) -- add asa sh run crypto map [\#128](https://github.com/networktocode/ntc-templates/pull/128) ([jmcgill298](https://github.com/jmcgill298)) -- Dgjustice nxos show ip bgp nei [\#126](https://github.com/networktocode/ntc-templates/pull/126) ([dgjustice](https://github.com/dgjustice)) -- Fixing cisco\_ios\_show\_interfaces\_status [\#125](https://github.com/networktocode/ntc-templates/pull/125) ([GGabriele](https://github.com/GGabriele)) -- update xr controllers [\#123](https://github.com/networktocode/ntc-templates/pull/123) ([itdependsnetworks](https://github.com/itdependsnetworks)) -- Additional Templates for Cisco IOS [\#122](https://github.com/networktocode/ntc-templates/pull/122) ([rpollard00](https://github.com/rpollard00)) -- change show interface to interfaces [\#120](https://github.com/networktocode/ntc-templates/pull/120) ([itdependsnetworks](https://github.com/itdependsnetworks)) -- add speed + duplex to ios show interfaces [\#119](https://github.com/networktocode/ntc-templates/pull/119) ([itdependsnetworks](https://github.com/itdependsnetworks)) -- update ios show proc cpu [\#118](https://github.com/networktocode/ntc-templates/pull/118) ([itdependsnetworks](https://github.com/itdependsnetworks)) -- update nxos show proc cpu [\#117](https://github.com/networktocode/ntc-templates/pull/117) ([itdependsnetworks](https://github.com/itdependsnetworks)) - - - -\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)* diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000..873bee7a4e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,32 @@ +ARG PYTHON_VER + +FROM python:${PYTHON_VER}-slim + +# Install all OS package upgrades and dependencies needed to run Nautobot in production +# hadolint ignore=DL3005,DL3008,DL3013 +RUN apt-get update && \ + apt-get upgrade -y && \ + apt-get install --no-install-recommends -y git mime-support curl libxml2 libmariadb3 openssl && \ + apt-get autoremove -y && \ + apt-get clean all && \ + rm -rf /var/lib/apt/lists/* && \ + pip --no-cache-dir install --upgrade pip wheel + +RUN pip install --upgrade pip + +RUN curl -sSL https://install.python-poetry.org -o /tmp/install-poetry.py && \ + python /tmp/install-poetry.py --version 1.2.0 && \ + rm -f /tmp/install-poetry.py + +# Add poetry install location to the $PATH +ENV PATH="${PATH}:/root/.local/bin" + +WORKDIR /local +COPY pyproject.toml poetry.lock /local/ + +RUN poetry config virtualenvs.create false \ + && poetry install --no-interaction --no-ansi + +# Do not break dependency caching before installing project +COPY . . +RUN poetry install diff --git a/README.md b/README.md index ff8f6f70be..706b393a60 100644 --- a/README.md +++ b/README.md @@ -1,464 +1,37 @@ -[![Build Status](https://travis-ci.org/networktocode/ntc-templates.svg?branch=master)](https://travis-ci.org/networktocode/ntc-templates) -[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/ambv/black) +# NTC Templates -NTC TEMPLATES -============= +

+ +
+ + + + +
+

-Repository of TextFSM Templates for Network Devices, and Python wrapper for TextFSM's CliTable. +## Overview -[TextFSM](https://github.com/google/textfsm/wiki) 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. +Repository of TextFSM Templates for Network Devices, and Python wrapper for TextFSM's CliTable. TextFSM is a tool to help make parsing cli commands more manageable. -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. +## Documentation +Full web-based HTML documentation for this library can be found over on the [NTC Templates Docs](https://ntc-templates.readthedocs.io) website: -> As of v2.0.0, this project uses [Poetry](https://python-poetry.org/) for packaging and distribution. In order to use poetry, the `templates` directory has been moved to `ntc_templates/templates` +- [User Guide](https://ntc-templates.readthedocs.io/en/latest/user/lib_overview/) - Overview, Using the library, Getting Started. +- [Administrator Guide](https://ntc-templates.readthedocs.io/en/latest/admin/install/) - How to Install, Configure, Upgrade, or Uninstall the library. +- [Developer Guide](https://ntc-templates.readthedocs.io/en/latest/dev/contributing/) - Extending the library, Code Reference, Contribution Guide. +- [Release Notes / Changelog](https://ntc-templates.readthedocs.io/en/latest/admin/release_notes/). +- [Frequently Asked Questions](https://ntc-templates.readthedocs.io/en/latest/user/faq/). -Installation and Usage ----------------------- -The project can be installed using either Git + Poetry or PyPI. +### Contributing to the Docs -#### Git +All the Markdown source for the library documentation can be found under the [docs](https://github.com/networktocode/ntc-templates/tree/develop/docs) folder in this repository. For simple edits, a Markdown capable editor is sufficient - clone the repository and edit away. -```shell -$ git clone git@github.com:networktocode/ntc-templates.git -$ -# Optional steps to install ntc-templates as a python package -$ poetry install -$ -``` +If you need to view the fully generated documentation site, you can build it with [mkdocs](https://www.mkdocs.org/). A container hosting the docs will be started using the invoke commands (details in the [Development Environment Guide](https://ntc-templates.readthedocs.io/en/latest/dev/dev_environment/#docker-development-environment)) on [http://localhost:8001](http://localhost:8001). As your changes are saved, the live docs will be automatically reloaded. -#### PyPI +Any PRs with fixes or improvements are very welcome! -```shell -$ pip install ntc_templates -$ -``` +## Questions -#### Usage - -```python ->>> 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](#Index-File) -2. Each custom template should be defined. - -To manaully set variable: -```shell -export NTC_TEMPLATES_DIR=/path/to/new/location/templates -``` - -To set within your program: -```python -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](https://github.com/networktocode/ntc-templates/blob/master/tests/test_index_order.py#L59) tests, which is primarily based on [Netmiko](https://github.com/ktbyers/netmiko/tree/master/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 `. We have used a combination of ordering, as defined: - - - OS in alphabetical order - - Template name in length order (longest to shortest) - - 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. -```bash -$ 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: - -```bash -$ 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: -```bash -$ 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](https://yamllint.readthedocs.io/en/stable/rules.html). - -##### 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 `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 `ntc_templates/templates/` and the `ntc_templates/templates/index` file must be updated to correctly point to the template file(s). - -```bash -$ ./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. -```bash -$ 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](https://networktocode.slack.com). - -Sign up [here](http://slack.networktocode.com/) - -CHANGELOG ---------- - -Changelog should be generated using [github_changelog_generator](https://github.com/github-changelog-generator/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](https://www.youtube.com/watch?v=rgbCcBNZcdQ) should provide the instructions on -how to do so. - -_Does this work on windows?_ - -Based on this [PR](https://github.com/networktocode/ntc-templates/pull/672) 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. - -### Known Issues - -#### Cannot import name clitable from textfsm -**ntc-templates** depends on **textfsm**, which hasn't published a source distribution to pypi in a while. See https://github.com/google/textfsm/issues/65. - -This means that for users with a build chain that depends on source distributions only (i.e. no wheels), ntc-templates appears to have a bug: - -``` -File "/usr/local/Cellar/foo/version/libexec/lib/python3.7/site-packages/ntc_templates/parse.py", line 3, in - from textfsm import clitable -ImportError: cannot import name 'clitable' from 'textfsm' -``` - -What's actually happening here is that textfsm provides a source distribution only up to version 0.4.1 (2018-04-09) but the ntc-templates code relies on the interface from version 1.1.0 (2019-07-24) which is only available as a wheel. So the way for users to fix this problem if they encounter it is to install textfsm 1.1.0. - -`pip install textfsm==1.1.0` - -> This was taken from https://github.com/networktocode/ntc-templates/issues/731 +For any questions or comments, please check the [FAQ](https://ntc-templates.readthedocs.io/en/latest/user/faq/) first. Feel free to also swing by the [Network to Code Slack](https://networktocode.slack.com/) (channel `#networktocode`), sign up [here](http://slack.networktocode.com/) if you don't have an account. diff --git a/cli.py b/cli.py new file mode 100644 index 0000000000..64ffd54cbc --- /dev/null +++ b/cli.py @@ -0,0 +1,75 @@ +"""CLI for acitool.""" +import click + +from tests.test_development_scripts import ( + build_parsed_data_from_dir, + build_parsed_data_from_output, + transform_file, + transform_glob, +) + + +@click.group() +def base(): + """Base entry for click.""" + + +@click.command() +@click.option( + "-f", + "--file", + "file", + type=str, + help="File that you are targetting.", +) +def clean_yaml_file(file): + """Transform a yaml file to expected output.""" + transform_file(file) + + +@click.command() +@click.option( + "-f", + "--folder", + "folder", + type=str, + help="Folder that you are targetting.", +) +def clean_yaml_folder(folder): + """Transform a yaml file to expected output to a folder.""" + transform_glob(folder) + + +@click.command() +@click.option( + "-f", + "--file", + "file", + type=str, + help="File that you are targetting.", +) +def gen_yaml_file(file): + """Generate a yaml file from raw a data file.""" + build_parsed_data_from_output(file, "./tests/") + + +@click.command() +@click.option( + "-f", + "--folder", + "folder", + type=str, + help="Folder that you are targetting.", +) +def gen_yaml_folder(folder): + """Generate a yaml file from folder of raw data files.""" + build_parsed_data_from_dir(folder, "./tests/") + + +base.add_command(clean_yaml_file) +base.add_command(clean_yaml_folder) +base.add_command(gen_yaml_file) +base.add_command(gen_yaml_folder) + +if __name__ == "__main__": + base() diff --git a/development_scripts.py b/development_scripts.py deleted file mode 100755 index d8ffee24f9..0000000000 --- a/development_scripts.py +++ /dev/null @@ -1,492 +0,0 @@ -#!/usr/bin/env python -import os -import re -import glob -import numbers -import argparse - -from ruamel.yaml import YAML -from ruamel.yaml.scalarstring import DoubleQuotedScalarString as DQ -from ntc_templates.parse import parse_output - - -FILE_PATH = os.path.abspath(__file__) -FILE_DIR = os.path.dirname(FILE_PATH) -TEST_DIR = "{0}/tests".format(FILE_DIR) -YAML_OBJECT = YAML() -YAML_OBJECT.explicit_start = True -YAML_OBJECT.indent(sequence=4, offset=2) -YAML_OBJECT.block_style = True -RE_MULTILINE_REMARK = re.compile(r"(.*\n\s*#)(.*)") - - -def ensure_spacing_for_multiline_comment(remark): - """ - Finds all comments and ensures a single space after "#" symbol. - - Args: - remark (str): The remark of a comment from a ``ruamel.yaml.token.CommentToken``. - - Returns: - str: The ``remark`` formatted with a single space after comment start, "#" - - Example: - >>> remark = "comment 11\n# comment 12\n#comment 13\n" - >>> remark_formatted = ensure_spacing_for_multiline_comment(remark) - >>> # Formatting has normalized each comment to have a single space after the "#" - >>> remark_formatted - 'comment 11\n# comment 12\n# comment 13' - >>> - """ - remarks = re.findall(RE_MULTILINE_REMARK, remark) - # remarks that don't have a subsequent comment are not captured by regex - if not remarks: - remarks = (("", remark),) - # Example remarks: [('comment \n#', ' comment2 '), ('\n #', 'comment3 # 9')] - remark_formatted = "".join([entry[0] + " " + entry[1].strip() for entry in remarks]) - return remark_formatted - - -def ensure_space_after_octothorpe(comment): - """ - Ensures a single space is between the "#" and first letter of a comment. - - Args: - comment (ruamel.yaml.token.CommentToken): The comment to update. - - Returns: - None: The comment is updated in place. - - Example: - >>> yml = ruamel.yaml.YAML() - >>> with open("test.yml", encoding="utf-8") as fh: - ... print(fh.read()) - ... fh.seek(0) - ... data = yml.load(fh) - ... - --- - a: 5 # comment 1 - b: 6 #comment 2 - #comment 3 - c: - - 7 #comment 4 - #comment 5 - - 8 - #comment 6 - d: - #comment 7 - e: a #comment 8 - f: - - 9 - #comment 9 - - 10 - - a: - a: 8 - #comment 10 - b: 1 - - b: 1 - - 9 - #comment 11 - # comment 12 - #comment 13 - - >>> type(data) - - >>> comment = data.ca.items["b"][2] - >>> comment - CommentToken('#comment 2\n#comment 3\n', line: 2, col: 5) - >>> ensure_space_after_octothorpe(comment) - >>> # Both comments within the CommentToken object - >>> # now have a space between the "#" and the first symbol - >>> comment - CommentToken('# comment 2\n# comment 3\n', line: 2, col: 5) - >>> - """ - if comment is not None: - # Comments can start with whitespace, - # so partition is used to preserve that in the final result - space, octothorpe, remark = comment.value.partition("#") - remark_formatted = ensure_spacing_for_multiline_comment(remark) - comment.value = f"{space}# {remark_formatted.lstrip()}\n" - - -def ensure_space_comments(comments): - """ - Ensures there is a space after the "#" in comments. - - Args: - comments (iter): The comments from ruamel.yaml.YAML() object. - - Returns: - None: Comments are update in place. - - Example: - >>> yml = ruamel.yaml.YAML() - >>> with open("test.yml", encoding="utf-8") as fh: - ... print(fh.read()) - ... fh.seek(0) - ... data = yml.load(fh) - ... - --- - a: 5 # comment 1 - b: 6 #comment 2 - #comment 3 - c: - - 7 #comment 4 - #comment 5 - - 8 - #comment 6 - d: - #comment 7 - e: a #comment 8 - f: - - 9 - #comment 9 - - 10 - - a: - a: 8 - #comment 10 - b: 1 - - b: 1 - - 9 - #comment 11 - # comment 12 - #comment 13 - - >>> type(data) - - >>> comments = data.ca.items.values() - >>> comments - dict_values([ - [None, None, CommentToken('# comment 1\n', line: 1, col: 5), None], - [None, None, CommentToken('#comment 2\n#comment 3\n', line: 2, col: 5), None], - [None, None, None, [CommentToken('#comment 7\n', line: 10, col: 2)]] - ]) - >>> ensure_space_comments(comments) - >>> # Every comment now has a space between the "#" and the first symbol - >>> comments - dict_values([ - [None, None, CommentToken('# comment 1\n', line: 1, col: 5), None], - [None, None, CommentToken('# comment 2\n# comment 3\n', line: 2, col: 5), None], - [None, None, None, [CommentToken('# comment 7\n', line: 10, col: 2)]] - ]) - >>> - """ - comment_objects = (comment for comment_list in comments for comment in comment_list) - for comment in comment_objects: - # Some comments are nested inside an additional list - if not isinstance(comment, list): - ensure_space_after_octothorpe(comment) - else: - for cmt in comment: - ensure_space_after_octothorpe(cmt) - - -def update_yaml_comments(yaml_object): - """ - Ensures comments have a space after the "#" on itself and its entries - - Args: - yaml_object (ruamel.yaml.comments.CommentedMap | ruamel.yaml.comments.CommentedSeq): The list or dict object. - - Returns: - None: Comments are updated in place. - - Example: - >>> yml = ruamel.yaml.YAML() - >>> with open("test.yml", encoding="utf-8") as fh: - ... print(fh.read()) - ... fh.seek(0) - ... data = yml.load(fh) - ... - --- - a: 5 # comment 1 - b: 6 #comment 2 - #comment 3 - c: - - 7 #comment 4 - #comment 5 - - 8 - #comment 6 - d: - #comment 7 - e: a #comment 8 - f: - - 9 - #comment 9 - - 10 - - a: - a: 8 - #comment 10 - b: 1 - - b: 1 - - 9 - #comment 11 - # comment 12 - #comment 13 - - >>> type(data) - - >>> update_yaml_comments(data) - >>> with open("test.yml", "w", encoding="utf-8") as fh - ... yml.dump(data, fh) - ... - >>> - # Notice that comments now have a space between the hash and first symbol. - >>> with open("test.yml", encoding="utf-8") as fh: - ... print(fh.read()) - ... - a: 5 # comment 1 - b: 6 # comment 2 - #comment 3 - c: - - 7 # comment 4 - #comment 5 - - 8 - # comment 6 - d: - # comment 7 - e: a # comment 8 - f: - - 9 - # comment 9 - - 10 - - a: - a: 8 - # comment 10 - b: 1 - - b: 1 - - 9 - # comment 11 - # comment 12 - # comment 13 - - >>> - """ - comments = yaml_object.ca.items.values() - ensure_space_comments(comments) - try: - yaml_object_values = yaml_object.values() - except AttributeError: - yaml_object_values = yaml_object - - for entry in yaml_object_values: - if isinstance(entry, dict) or isinstance(entry, list): - update_yaml_comments(entry) - - -def transform_file(filepath): - """ - Loads YAML file and formats to adhere to yamllint config. - - Args: - filepath (str): The full path to a YAML file. - - Returns: - None: File I/O is performed to ensure YAML file adheres to yamllint config. - - Example: - >>> filepath = "tests/cisco_ios/show_version/cisco_ios_show_version.yml" - >>> transform_parsed(filepath) - >>> - """ - with open(filepath, encoding="utf-8") as parsed_file: - parsed_object = YAML_OBJECT.load(parsed_file) - - ensure_yaml_standards(parsed_object, filepath) - - -def transform_glob(dirpath): - """ - Globs for YAML files and formats to adhere to yamllint config. - - Every file in ``dirpath`` ending in ``.yml`` will be formatted according to - yamllint config. Since this is using glob, the directory string passed in can - also include glob syntax (see ``Example``) - - Args: - dirpath (str): The path to search for files with ``.yml`` extension. - - Returns: - None: File I/O is performed to ensure YAML files adhere to yamllint config. - - Example: - >>> dirpath = "tests/*/*" - >>> transform_parsed(dirpath) - # Each filename is printed to the terminal - >>> - """ - # This commented out code was used for mass renaming of files; - # it is probably not needed anymore - # for file in glob.iglob("{0}/*.parsed".format(dirpath)): - # os.rename(file, file.replace(file[-6:], "yml")) - for file in glob.iglob("{0}/*.yml".format(dirpath)): - print(file) - transform_file(file) - - -def ensure_yaml_standards(parsed_object, output_path): - """ - Ensures YAML files adhere to yamllint config as defined in this project. - - Args: - parsed_object (dict): The TextFSM/CliTable data converted to a list of dicts. - The list of dicts must be the value of a dictionary key, ``parsed_sample``. - output_path (str): The filepath to write the ``parsed_object`` to. - - Returns: - None: File I/O is performed to write ``parsed_object`` to ``output_path``. - """ - for entry in parsed_object["parsed_sample"]: - # TextFSM conversion will allways be a list of dicts - for key, value in entry.items(): - # TextFSM capture groups always return strings or lists - # This also accounts for numbers incase the YAML was done by hand - if isinstance(value, (str, numbers.Number)): - entry[key] = DQ(value) - else: - entry[key] = [DQ(val) for val in value] - try: - update_yaml_comments(parsed_object) - except AttributeError: - pass - - with open(output_path, "w", encoding="utf-8") as parsed_file: - YAML_OBJECT.dump(parsed_object, parsed_file) - - -def parse_test_filepath(filepath): - """ - Parses fullpath of test file to obtain platform, command, and filename info. - - Args: - filepath (str): The path to a test file from platform directory or earlier. - - Returns: - tuple: Strings of platform, command, and the filename without the extension. - - Example: - >>> filepath = "tests/cisco_ios/show_version/cisco_ios_show_version.raw" - >>> platform, command, filename = parse_test_filepath(filepath) - >>> print(platform) - cisco_ios - >>> print(command) - show version - >>> print(filename) - cisco_ios_show_version - >>> - """ - command_dir, filename = os.path.split(filepath) - platform_dir, command = os.path.split(command_dir) - test_dir, platform = os.path.split(platform_dir) - - command_without_underscores = command.replace("_", " ") - filename_without_extension, extension = filename.rsplit(".", 1) - - return platform, command_without_underscores, filename_without_extension - - -def build_parsed_data_from_output(filepath, test_dir=TEST_DIR): - """ - Generates a YAML file from the file containing the command output. - - The command output should be stored in a file in the appropriate directory; - for example, ``tests/cisco_ios/show_version/cisco_ios_show_version.raw`` - This uses ``lib.ntc_templates.parse.parse_output``, so the template must - be in the ``templates/`` directory, and ``templates/index`` must be updated - with the correct entry for the template. - - Args: - filepath (str): The path to the file containing sample command output. - test_dir (str): The root directory to story the resulting YAML file. - - Returns - None: File I/O is performed to generate a YAML file pased on command output. - - Example: - >>> root_dir = "tests/cisco_ios/show_version" - >>> os.listdir(root_dir) - ['cisco_ios_show_version.raw'] - >>> filepath = "tests/cisco_ios/show_version/cisco_ios_show_version.raw" - >>> build_parsed_data_from_output(filepath) - >>> os.listdir(root_dir) - ['cisco_ios_show_version.raw', 'cisco_ios_show_version.yml'] - >>> - """ - platform, command, filename = parse_test_filepath(filepath) - with open(filepath, encoding="utf-8") as output_file: - output_data = output_file.read() - - structured_data = parse_output(platform, command, output_data) - - command_with_underscores = command.replace(" ", "_") - yaml_file = "{0}/{1}/{2}/{3}.yml".format( - test_dir, platform, command_with_underscores, filename - ) - ensure_yaml_standards({"parsed_sample": structured_data}, yaml_file) - - -def build_parsed_data_from_dir(dirpath, test_dir=TEST_DIR): - """ - Globs for files ending in ``.raw`` and generates YAML files based on TextFSM ouptut. - - Every file in ``dirpath`` ending in ``.raw`` will be parsed with TextFSM and written - to a YAML file following the yamllint config standards. Since this is using glob, the - directory string passed in can also include glob syntax. - - Args: - dirpath (str): The path to search for files with ``.raw`` extension. - - Returns: - None: File I/O is performed to ensure YAML files exist for each test output file. - - Example: - >>> dirpath = "tests/cisco_ios/show_mac-address-table" - >>> build_parsed_data_from_dir(dirpath) - # Each filename is printed to the terminal - >>> - """ - for file in glob.iglob("{0}/*.raw".format(dirpath)): - print(file) - build_parsed_data_from_output(file, test_dir) - - -if __name__ == "__main__": - parser = argparse.ArgumentParser( - description="Ensures YAML files match project standards" - ) - group = parser.add_mutually_exclusive_group() - group.add_argument("-y", "--yaml_file", type=str, help="The path to a YAML file.") - group.add_argument( - "-yd", - "--yaml_dir", - type=str, - help='The directory path to look for all files ending in ".yml"', - ) - group.add_argument( - "-c", - "--command_file", - type=str, - help="The path to the file containing command output.", - ) - group.add_argument( - "-cd", - "--command_dir", - type=str, - help='The directory path to look for all files ending in ".raw"', - ) - - args = parser.parse_args() - yaml_file = args.yaml_file - yaml_dir = args.yaml_dir - command_file = args.command_file - command_dir = args.command_dir - - if yaml_file is not None: - transform_file(yaml_file) - elif yaml_dir is not None: - transform_glob(yaml_dir) - elif command_file is not None: - build_parsed_data_from_output(command_file) - else: - build_parsed_data_from_dir(command_dir) diff --git a/docs/admin/install.md b/docs/admin/install.md new file mode 100644 index 0000000000..2299d6ed51 --- /dev/null +++ b/docs/admin/install.md @@ -0,0 +1,35 @@ +# Installation + +> As of v2.0.0, this project uses [Poetry](https://python-poetry.org/) for packaging and distribution. In order to use poetry, the `templates` directory has been moved to `ntc_templates/templates` + +Option 1: Install from PyPI. + +```bash +$ pip install ntc-templates +``` + +Option 2: Install from a GitHub branch, such as develop as shown below. + +```bash +$ pip install git+https://github.com/networktocode/ntc-templates.git@develop +``` + +# 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. +2. Each custom template should be defined. + +To manaully set variable: +```shell +export NTC_TEMPLATES_DIR=/path/to/new/location/templates +``` + +To set within your program: +```python +import os +os.environ["NTC_TEMPLATES_DIR"] = "/path/to/new/templates/location/templates" +``` diff --git a/docs/admin/release_notes/index.md b/docs/admin/release_notes/index.md new file mode 100644 index 0000000000..66701b0ca7 --- /dev/null +++ b/docs/admin/release_notes/index.md @@ -0,0 +1,7 @@ +# Release Notes + +All the published release notes can be found via the navigation menu. All patch releases are included in the same minor release (e.g. `v1.2`) document. + +## CHANGELOG + +Changelog should be generated using [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator) diff --git a/docs/admin/release_notes/version_0.9.md b/docs/admin/release_notes/version_0.9.md new file mode 100644 index 0000000000..71daf81f89 --- /dev/null +++ b/docs/admin/release_notes/version_0.9.md @@ -0,0 +1,88 @@ +## [0.9.0](https://github.com/networktocode/ntc-templates/tree/0.9.0) (2018-07-05) + +[Full Changelog](https://github.com/networktocode/ntc-templates/compare/cc61388f3c6e4543b878e426b30420173d6b6bc4...0.9.0) + +**Closed issues:** + +- Unable to parse out subinterface information from Cisco IOS content [\#197](https://github.com/networktocode/ntc-templates/issues/197) +- how to use this template can any once give 1 example and its result for more and better understanding [\#193](https://github.com/networktocode/ntc-templates/issues/193) +- show cdp neighbors for cisco\_ios returns string instead of structured list [\#189](https://github.com/networktocode/ntc-templates/issues/189) +- Template update: cisco\_ios\_show\_vlan to get interface list [\#175](https://github.com/networktocode/ntc-templates/issues/175) +- python3 support [\#149](https://github.com/networktocode/ntc-templates/issues/149) +- Template update: cisco\_nxos\_show\_cdp\_neighbors [\#147](https://github.com/networktocode/ntc-templates/issues/147) +- NXOS-Show\_Interfaces not finding Vlan Interfaces when additional interfaces are past the config. Also potential to provide wrong information. [\#135](https://github.com/networktocode/ntc-templates/issues/135) +- hp\_procurve\_show\_vlans.template empty output [\#124](https://github.com/networktocode/ntc-templates/issues/124) +- 'show memory statistics' cisco switch/rotuer template [\#121](https://github.com/networktocode/ntc-templates/issues/121) +- Cisco ASA show version template [\#110](https://github.com/networktocode/ntc-templates/issues/110) +- License question [\#92](https://github.com/networktocode/ntc-templates/issues/92) +- cisco\_ios\_show\_ip\_bgp.template some entries are not parsed [\#87](https://github.com/networktocode/ntc-templates/issues/87) +- missing tests folder for cisco\_ios\_show\_ip\_bgp [\#74](https://github.com/networktocode/ntc-templates/issues/74) +- Issues with trying to use the test-template playbook [\#73](https://github.com/networktocode/ntc-templates/issues/73) +- ios show mac address-table [\#59](https://github.com/networktocode/ntc-templates/issues/59) +- nxos show lldp neighbors failing when there is hostname is long [\#58](https://github.com/networktocode/ntc-templates/issues/58) +- arista route template [\#57](https://github.com/networktocode/ntc-templates/issues/57) +- ios show standby brief active/standby state [\#52](https://github.com/networktocode/ntc-templates/issues/52) +- Need help on parsing the show platform diag output [\#48](https://github.com/networktocode/ntc-templates/issues/48) +- need a help on escaping the parenthesis [\#47](https://github.com/networktocode/ntc-templates/issues/47) +- Need an info [\#46](https://github.com/networktocode/ntc-templates/issues/46) +- Difference between Start and Record Start? [\#41](https://github.com/networktocode/ntc-templates/issues/41) + +**Merged pull requests:** + +- Cleanup [\#221](https://github.com/networktocode/ntc-templates/pull/221) ([GGabriele](https://github.com/GGabriele)) +- Fixed README formatting and typos [\#215](https://github.com/networktocode/ntc-templates/pull/215) ([LindsayHill](https://github.com/LindsayHill)) +- Move Record to Interface opening line to ensure each unaccounted for … [\#212](https://github.com/networktocode/ntc-templates/pull/212) ([jmcgill298](https://github.com/jmcgill298)) +- CISCO\_IOS\_SHOW\_VLAN: Add support for capturing interfaces associated … [\#210](https://github.com/networktocode/ntc-templates/pull/210) ([jmcgill298](https://github.com/jmcgill298)) +- Update with virtual interfaces [\#209](https://github.com/networktocode/ntc-templates/pull/209) ([jvanderaa](https://github.com/jvanderaa)) +- NXOS\_SHOW\_CDP\_NEIGHBORS: Add additonal capture groups [\#208](https://github.com/networktocode/ntc-templates/pull/208) ([jmcgill298](https://github.com/jmcgill298)) +- IOS\_SHOW\_INTERFACES: Add additional logic to account for sub-interfaces [\#206](https://github.com/networktocode/ntc-templates/pull/206) ([jmcgill298](https://github.com/jmcgill298)) +- INDEX: Fix index file out of order [\#205](https://github.com/networktocode/ntc-templates/pull/205) ([jmcgill298](https://github.com/jmcgill298)) +- Procurve show vlans [\#201](https://github.com/networktocode/ntc-templates/pull/201) ([jmcgill298](https://github.com/jmcgill298)) +- add pytest chache to gitignore [\#200](https://github.com/networktocode/ntc-templates/pull/200) ([jmcgill298](https://github.com/jmcgill298)) +- Fix index file out of order [\#199](https://github.com/networktocode/ntc-templates/pull/199) ([jmcgill298](https://github.com/jmcgill298)) +- Fix printing to use function for py3 compatibility [\#198](https://github.com/networktocode/ntc-templates/pull/198) ([jmcgill298](https://github.com/jmcgill298)) +- Adding 4 templates [\#192](https://github.com/networktocode/ntc-templates/pull/192) ([rishabh5j](https://github.com/rishabh5j)) +- adding bash\_df\_-h and show\_reload\_cause templates for arista\_eos [\#182](https://github.com/networktocode/ntc-templates/pull/182) ([Sandeepsr](https://github.com/Sandeepsr)) +- adding cisco\_xr show\_controller\_fabric\_plane\_all and admin\_show\_contr… [\#181](https://github.com/networktocode/ntc-templates/pull/181) ([Sandeepsr](https://github.com/Sandeepsr)) +- Adding "get route" template for IPv4 for Juniper NetScreen \(screenos\) [\#180](https://github.com/networktocode/ntc-templates/pull/180) ([burningnode](https://github.com/burningnode)) +- cisco xr lldp and route [\#176](https://github.com/networktocode/ntc-templates/pull/176) ([itdependsnetworks](https://github.com/itdependsnetworks)) +- adding arista\_macsec\_templates [\#174](https://github.com/networktocode/ntc-templates/pull/174) ([Sandeepsr](https://github.com/Sandeepsr)) +- adding cisco\_xr\_show\_ip\_bgp\_summary.template [\#170](https://github.com/networktocode/ntc-templates/pull/170) ([Sandeepsr](https://github.com/Sandeepsr)) +- added show vrf and show ip arp for nxos [\#167](https://github.com/networktocode/ntc-templates/pull/167) ([vaneuk](https://github.com/vaneuk)) +- IOS\_SHOW\_RUN\_CONFIG\_PARTITION\_ACL: Add new template [\#166](https://github.com/networktocode/ntc-templates/pull/166) ([jmcgill298](https://github.com/jmcgill298)) +- IOS\_SHOW\_IP\_ACL: new template [\#165](https://github.com/networktocode/ntc-templates/pull/165) ([jmcgill298](https://github.com/jmcgill298)) +- ASA\_SHOW\_IP\_ACCESS\_LIST: Add catch-all error [\#164](https://github.com/networktocode/ntc-templates/pull/164) ([jmcgill298](https://github.com/jmcgill298)) +- change top dir logic [\#163](https://github.com/networktocode/ntc-templates/pull/163) ([itdependsnetworks](https://github.com/itdependsnetworks)) +- Update cisco\_nxos\_show\_lldp\_neighbors.template & index file [\#162](https://github.com/networktocode/ntc-templates/pull/162) ([termlen0](https://github.com/termlen0)) +- Avaya vsp show software [\#161](https://github.com/networktocode/ntc-templates/pull/161) ([kadecole](https://github.com/kadecole)) +- added show config sess summ [\#160](https://github.com/networktocode/ntc-templates/pull/160) ([jedelman8](https://github.com/jedelman8)) +- adding arista\_eos\_show\_interfaces\_transceiver.template and edit arist… [\#159](https://github.com/networktocode/ntc-templates/pull/159) ([Sandeepsr](https://github.com/Sandeepsr)) +- Alex up [\#158](https://github.com/networktocode/ntc-templates/pull/158) ([itdependsnetworks](https://github.com/itdependsnetworks)) +- Avaya ers show interface name [\#157](https://github.com/networktocode/ntc-templates/pull/157) ([kadecole](https://github.com/kadecole)) +- Added Avaya ERS templates [\#155](https://github.com/networktocode/ntc-templates/pull/155) ([kadecole](https://github.com/kadecole)) +- Adjusted hp\_procurve\_show\_vlans.template to account for varying outputs. [\#148](https://github.com/networktocode/ntc-templates/pull/148) ([tsimson](https://github.com/tsimson)) +- Added Avaya ERS templates [\#146](https://github.com/networktocode/ntc-templates/pull/146) ([OfWolfAndMan](https://github.com/OfWolfAndMan)) +- Show power commands [\#144](https://github.com/networktocode/ntc-templates/pull/144) ([ericdost](https://github.com/ericdost)) +- Fix CDP to work with 3 capablities in cdp output [\#143](https://github.com/networktocode/ntc-templates/pull/143) ([itdependsnetworks](https://github.com/itdependsnetworks)) +- update nxos show interface for vlan [\#140](https://github.com/networktocode/ntc-templates/pull/140) ([itdependsnetworks](https://github.com/itdependsnetworks)) +- Ios sh status [\#139](https://github.com/networktocode/ntc-templates/pull/139) ([itdependsnetworks](https://github.com/itdependsnetworks)) +- Update NXOS show-ip-route for more scenarios [\#138](https://github.com/networktocode/ntc-templates/pull/138) ([jamiecaesar](https://github.com/jamiecaesar)) +- Show environment power all [\#137](https://github.com/networktocode/ntc-templates/pull/137) ([ericdost](https://github.com/ericdost)) +- Add ASA VPN Troubelshooting Commands [\#136](https://github.com/networktocode/ntc-templates/pull/136) ([jmcgill298](https://github.com/jmcgill298)) +- Added new template: Cisco ASA show interface [\#134](https://github.com/networktocode/ntc-templates/pull/134) ([jvanderaa](https://github.com/jvanderaa)) +- Updated IOS show-ip-route to handle additional cases [\#133](https://github.com/networktocode/ntc-templates/pull/133) ([jamiecaesar](https://github.com/jamiecaesar)) +- Add ASA Templates [\#131](https://github.com/networktocode/ntc-templates/pull/131) ([jmcgill298](https://github.com/jmcgill298)) +- fix pfs when no value present [\#129](https://github.com/networktocode/ntc-templates/pull/129) ([jmcgill298](https://github.com/jmcgill298)) +- add asa sh run crypto map [\#128](https://github.com/networktocode/ntc-templates/pull/128) ([jmcgill298](https://github.com/jmcgill298)) +- Dgjustice nxos show ip bgp nei [\#126](https://github.com/networktocode/ntc-templates/pull/126) ([dgjustice](https://github.com/dgjustice)) +- Fixing cisco\_ios\_show\_interfaces\_status [\#125](https://github.com/networktocode/ntc-templates/pull/125) ([GGabriele](https://github.com/GGabriele)) +- update xr controllers [\#123](https://github.com/networktocode/ntc-templates/pull/123) ([itdependsnetworks](https://github.com/itdependsnetworks)) +- Additional Templates for Cisco IOS [\#122](https://github.com/networktocode/ntc-templates/pull/122) ([rpollard00](https://github.com/rpollard00)) +- change show interface to interfaces [\#120](https://github.com/networktocode/ntc-templates/pull/120) ([itdependsnetworks](https://github.com/itdependsnetworks)) +- add speed + duplex to ios show interfaces [\#119](https://github.com/networktocode/ntc-templates/pull/119) ([itdependsnetworks](https://github.com/itdependsnetworks)) +- update ios show proc cpu [\#118](https://github.com/networktocode/ntc-templates/pull/118) ([itdependsnetworks](https://github.com/itdependsnetworks)) +- update nxos show proc cpu [\#117](https://github.com/networktocode/ntc-templates/pull/117) ([itdependsnetworks](https://github.com/itdependsnetworks)) + + + +\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)* diff --git a/docs/admin/release_notes/version_1.1.md b/docs/admin/release_notes/version_1.1.md new file mode 100644 index 0000000000..d9406ce08b --- /dev/null +++ b/docs/admin/release_notes/version_1.1.md @@ -0,0 +1,160 @@ +## [v1.1.1](https://github.com/networktocode/ntc-templates/tree/v1.1.1) (2019-08-08) + +[Full Changelog](https://github.com/networktocode/ntc-templates/compare/0.9.0...v1.1.1) + +**Implemented enhancements:** + +- cisco\_ios\_show\_version.template Add Licensing [\#256](https://github.com/networktocode/ntc-templates/issues/256) +- Adding cisco\_ios\_show\_ip\_interface [\#322](https://github.com/networktocode/ntc-templates/pull/322) ([vladola](https://github.com/vladola)) +- Packaging [\#288](https://github.com/networktocode/ntc-templates/pull/288) ([micahculpepper](https://github.com/micahculpepper)) + +**Fixed bugs:** + +- nxos show interface status issue [\#426](https://github.com/networktocode/ntc-templates/issues/426) +- CISCO\_XR\_SH\_INTF: Parsed file shows that not all interfaces in raw are being parsed/recorded [\#282](https://github.com/networktocode/ntc-templates/issues/282) +- Test files for aruba os need renamed. [\#224](https://github.com/networktocode/ntc-templates/issues/224) + +**Closed issues:** + +- show\_lldp\_neighbors.template failing when switch + domain name is \> 19 characters [\#375](https://github.com/networktocode/ntc-templates/issues/375) +- cisco\_ios\_show\_lldp\_neighbor\_detail failing when `Physical media capabilities` are `Other/unknown` [\#374](https://github.com/networktocode/ntc-templates/issues/374) +- Master branch fails tox tests [\#361](https://github.com/networktocode/ntc-templates/issues/361) +- cisco\_nxos\_show\_interface\_status.template [\#333](https://github.com/networktocode/ntc-templates/issues/333) +- cisco\_nxos\_show\_interface\_status.template: error on 10G and 40G interfaces [\#331](https://github.com/networktocode/ntc-templates/issues/331) +- cisco\_ios\_show\_vlan.template not recorded complete list of interfaces [\#328](https://github.com/networktocode/ntc-templates/issues/328) +- Problem with parsing ASA ACL [\#287](https://github.com/networktocode/ntc-templates/issues/287) +- New Template Request [\#286](https://github.com/networktocode/ntc-templates/issues/286) +- cisco\_xr\_show\_interfaces.template line 4 regex incorrect [\#280](https://github.com/networktocode/ntc-templates/issues/280) +- cisco\_xr\_show\_cdp\_neighbors\_detail.template shows remote and local interface incorrectly [\#277](https://github.com/networktocode/ntc-templates/issues/277) +- Multiple Failing Use Cases in Cisco IOS ACL Template [\#245](https://github.com/networktocode/ntc-templates/issues/245) +- cisco\_asa\_show\_vpn-sessiondb\_detail\_l2l.template not parsing [\#231](https://github.com/networktocode/ntc-templates/issues/231) +- show interface status for cisco\_nxos returns incorrect 'name' and 'port' objects if there are spaces in the description. [\#196](https://github.com/networktocode/ntc-templates/issues/196) +- cisco\_xr\_show\_ip\_route uptime format and protocol sub-type support [\#185](https://github.com/networktocode/ntc-templates/issues/185) + +**Merged pull requests:** + +- Update readme [\#452](https://github.com/networktocode/ntc-templates/pull/452) ([jmcgill298](https://github.com/jmcgill298)) +- Fix spacing new templates [\#443](https://github.com/networktocode/ntc-templates/pull/443) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- Fixes \#224 Updating aurba test file names to match folder/file naming pattern [\#439](https://github.com/networktocode/ntc-templates/pull/439) ([myyellowshoe](https://github.com/myyellowshoe)) +- add Cisco IOS XR 'show ip interface brief' command [\#438](https://github.com/networktocode/ntc-templates/pull/438) ([dampfhamm3r](https://github.com/dampfhamm3r)) +- Cisco nxos show interfaces switchport [\#434](https://github.com/networktocode/ntc-templates/pull/434) ([dainok](https://github.com/dainok)) +- Cisco ios show interfaces switchport [\#433](https://github.com/networktocode/ntc-templates/pull/433) ([dainok](https://github.com/dainok)) +- Paloalto panos show arp all [\#432](https://github.com/networktocode/ntc-templates/pull/432) ([dainok](https://github.com/dainok)) +- Paloalto panos show mac all [\#431](https://github.com/networktocode/ntc-templates/pull/431) ([dainok](https://github.com/dainok)) +- Hp procurve show mac address [\#430](https://github.com/networktocode/ntc-templates/pull/430) ([dainok](https://github.com/dainok)) +- New template cisco\_ios\_show\_snmp\_user.template [\#429](https://github.com/networktocode/ntc-templates/pull/429) ([jifox](https://github.com/jifox)) +- nxos\_show\_interface\_status: Allows capture of Fabric Exte type [\#427](https://github.com/networktocode/ntc-templates/pull/427) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- Tests [\#402](https://github.com/networktocode/ntc-templates/pull/402) ([jmcgill298](https://github.com/jmcgill298)) +- Feature/improve cisco ios show vrf [\#395](https://github.com/networktocode/ntc-templates/pull/395) ([MatthiasGabriel](https://github.com/MatthiasGabriel)) +- Feature/cisco ios show hosts [\#394](https://github.com/networktocode/ntc-templates/pull/394) ([MatthiasGabriel](https://github.com/MatthiasGabriel)) +- cisco\_nxos\_show\_version extension for pulling PLATFORM from N9K [\#393](https://github.com/networktocode/ntc-templates/pull/393) ([jonesbra](https://github.com/jonesbra)) +- Cisco IOS - show dmvpn - New template [\#392](https://github.com/networktocode/ntc-templates/pull/392) ([adrydale](https://github.com/adrydale)) +- updated template to catch NSR N/A state [\#381](https://github.com/networktocode/ntc-templates/pull/381) ([Warsenius](https://github.com/Warsenius)) +- show ospf neighbor NEIGHBOR\_UPTIME no match when output in 1w2d format [\#380](https://github.com/networktocode/ntc-templates/pull/380) ([Warsenius](https://github.com/Warsenius)) +- Fixes 374 - Adds example of Other/unknown media on LLDP for a device … [\#377](https://github.com/networktocode/ntc-templates/pull/377) ([jvanderaa](https://github.com/jvanderaa)) +- Updated the template to get first 20 chars on LLDP neighbor for case … [\#376](https://github.com/networktocode/ntc-templates/pull/376) ([jvanderaa](https://github.com/jvanderaa)) +- add Cisco IOS show ip flow toptalkers [\#373](https://github.com/networktocode/ntc-templates/pull/373) ([lscarmic](https://github.com/lscarmic)) +- Updated LLDP Neighbor Detail for matching on some devices that were missing. [\#372](https://github.com/networktocode/ntc-templates/pull/372) ([jvanderaa](https://github.com/jvanderaa)) +- Add show\_boot template for cisco\_ios [\#371](https://github.com/networktocode/ntc-templates/pull/371) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- Update cisco\_nxos\_show\_interface\_status.template [\#370](https://github.com/networktocode/ntc-templates/pull/370) ([Pluppo](https://github.com/Pluppo)) +- IOS SHOW INTERFACES : adding regexes for skipped values & parsed results [\#368](https://github.com/networktocode/ntc-templates/pull/368) ([lachlanjholmes](https://github.com/lachlanjholmes)) +- Add Cisco IOS show ipv6 neighbors [\#363](https://github.com/networktocode/ntc-templates/pull/363) ([kimoldfield](https://github.com/kimoldfield)) +- XR SHOW LPTS PIFIB HARDWARE POLICE LOCATION: Add new template [\#360](https://github.com/networktocode/ntc-templates/pull/360) ([jmcgill298](https://github.com/jmcgill298)) +- XR SHOW DROPS NP ALL: Add new template [\#359](https://github.com/networktocode/ntc-templates/pull/359) ([jmcgill298](https://github.com/jmcgill298)) +- XR SHOW CONTROLLERS FABRIC FIA ERRORS INGRESS: Add new template [\#358](https://github.com/networktocode/ntc-templates/pull/358) ([jmcgill298](https://github.com/jmcgill298)) +- XR SHOW CONTROLLERS FABRIC FIA ERRORS EGRESS: Add new template [\#357](https://github.com/networktocode/ntc-templates/pull/357) ([jmcgill298](https://github.com/jmcgill298)) +- XR SHOW CONTROLLERS FABRIC FIA DROPS INGRESS: Add new template [\#356](https://github.com/networktocode/ntc-templates/pull/356) ([jmcgill298](https://github.com/jmcgill298)) +- XR SHOW CONTROLLERS FABRIC FIA DROPS EGRESS: Add new template [\#355](https://github.com/networktocode/ntc-templates/pull/355) ([jmcgill298](https://github.com/jmcgill298)) +- CISCO XR SHOW CEF DROPS LOCATION: Add new template [\#354](https://github.com/networktocode/ntc-templates/pull/354) ([jmcgill298](https://github.com/jmcgill298)) +- XR SHOW ASIC ERRORS: Add new template [\#353](https://github.com/networktocode/ntc-templates/pull/353) ([jmcgill298](https://github.com/jmcgill298)) +- XR SHOW BGP: Add new template [\#351](https://github.com/networktocode/ntc-templates/pull/351) ([jmcgill298](https://github.com/jmcgill298)) +- XR SHOW HSRP: Add new template [\#350](https://github.com/networktocode/ntc-templates/pull/350) ([jmcgill298](https://github.com/jmcgill298)) +- XR SHOW CONTROLLERS: Bug Fix [\#349](https://github.com/networktocode/ntc-templates/pull/349) ([jmcgill298](https://github.com/jmcgill298)) +- Create cisco\_ios\_show\_interfaces\_description.template [\#348](https://github.com/networktocode/ntc-templates/pull/348) ([adrydale](https://github.com/adrydale)) +- Aos vlan [\#345](https://github.com/networktocode/ntc-templates/pull/345) ([jmcgill298](https://github.com/jmcgill298)) +- Tacacs cisco [\#344](https://github.com/networktocode/ntc-templates/pull/344) ([jmcgill298](https://github.com/jmcgill298)) +- EOS SHOW MODULE: Add new template [\#343](https://github.com/networktocode/ntc-templates/pull/343) ([jmcgill298](https://github.com/jmcgill298)) +- Patch 2 [\#342](https://github.com/networktocode/ntc-templates/pull/342) ([jmcgill298](https://github.com/jmcgill298)) +- CISCO XR SHOW BGP NEIGH: Add new template [\#341](https://github.com/networktocode/ntc-templates/pull/341) ([jmcgill298](https://github.com/jmcgill298)) +- cisco\_ios\_show\_ip\_bgp: Fix whitespace change in command output [\#340](https://github.com/networktocode/ntc-templates/pull/340) ([paneu](https://github.com/paneu)) +- CISCO\_ASA\_SHOW\_LICENSE\_ALL: Add new template [\#339](https://github.com/networktocode/ntc-templates/pull/339) ([jmcgill298](https://github.com/jmcgill298)) +- CISCO\_ASA\_SHOW\_ASP\_DROP: Add new template [\#338](https://github.com/networktocode/ntc-templates/pull/338) ([jmcgill298](https://github.com/jmcgill298)) +- `ASA INTERFACE DETAIL`: Add new template [\#337](https://github.com/networktocode/ntc-templates/pull/337) ([jmcgill298](https://github.com/jmcgill298)) +- `NETIRON SHOW RUN INTF`: Broaden template scope [\#336](https://github.com/networktocode/ntc-templates/pull/336) ([jmcgill298](https://github.com/jmcgill298)) +- checkpoint\_gaia\_show\_ntp\_servers: Add new template [\#335](https://github.com/networktocode/ntc-templates/pull/335) ([JCapretta](https://github.com/JCapretta)) +- `cisco\_nxos\_show\_interface\_status`: Fixes issue \#333 [\#334](https://github.com/networktocode/ntc-templates/pull/334) ([JCapretta](https://github.com/JCapretta)) +- `cisco\_nxos\_show\_interface\_status`: Fixes issue \#331 [\#332](https://github.com/networktocode/ntc-templates/pull/332) ([JCapretta](https://github.com/JCapretta)) +- Checkpoint gaia show dns.template [\#330](https://github.com/networktocode/ntc-templates/pull/330) ([JCapretta](https://github.com/JCapretta)) +- Modified cisco\_ios\_show\_vlan.template \(\#328\) [\#329](https://github.com/networktocode/ntc-templates/pull/329) ([JCapretta](https://github.com/JCapretta)) +- cisco ios show ip interface: Incorporate \#229 into \#322 [\#326](https://github.com/networktocode/ntc-templates/pull/326) ([jmcgill298](https://github.com/jmcgill298)) +- ASA SHOW RESOURCE: Add new template [\#325](https://github.com/networktocode/ntc-templates/pull/325) ([jmcgill298](https://github.com/jmcgill298)) +- ASA VPN-SESSIONDB: Bug Fixes with new data [\#323](https://github.com/networktocode/ntc-templates/pull/323) ([jmcgill298](https://github.com/jmcgill298)) +- IOS DIR: Account for spaces in permissions [\#321](https://github.com/networktocode/ntc-templates/pull/321) ([jmcgill298](https://github.com/jmcgill298)) +- NX-OS show l2rib internal permanently-frozen-list template [\#320](https://github.com/networktocode/ntc-templates/pull/320) ([vaneuk](https://github.com/vaneuk)) +- Bugfix: cisco asa show access list [\#313](https://github.com/networktocode/ntc-templates/pull/313) ([joewesch](https://github.com/joewesch)) +- Adding cisco\_asa\_show\_nat [\#312](https://github.com/networktocode/ntc-templates/pull/312) ([joewesch](https://github.com/joewesch)) +- cisco\_ios\_show\_dot1x\_all command [\#308](https://github.com/networktocode/ntc-templates/pull/308) ([realvitya](https://github.com/realvitya)) +- Add INPUT\_PACKETS, INPUT\_ERRORS, OUTPUT\_PACKETS, OUTPUT\_ERRORS fields to cisco\_ios\_show\_interfaces & cisco\_nxos\_show\_interface templates [\#307](https://github.com/networktocode/ntc-templates/pull/307) ([wvandeun](https://github.com/wvandeun)) +- Added cisco\_asa "show running-config object network" template [\#306](https://github.com/networktocode/ntc-templates/pull/306) ([joewesch](https://github.com/joewesch)) +- PARSE: Update parse module to account for new and old TextFSM packaging [\#305](https://github.com/networktocode/ntc-templates/pull/305) ([jmcgill298](https://github.com/jmcgill298)) +- Modified cisco\_asa\_show\_crypto\_ipsec\_sa [\#304](https://github.com/networktocode/ntc-templates/pull/304) ([joewesch](https://github.com/joewesch)) +- Added cisco\_asa\_show\_asp\_table\_vpn-context\_detail [\#303](https://github.com/networktocode/ntc-templates/pull/303) ([joewesch](https://github.com/joewesch)) +- Modified cisco\_asa\_show\_object-group\_network.template [\#302](https://github.com/networktocode/ntc-templates/pull/302) ([joewesch](https://github.com/joewesch)) +- Adding support for avaya\_ers\_show\_logging\_config command [\#301](https://github.com/networktocode/ntc-templates/pull/301) ([kadecole](https://github.com/kadecole)) +- change travis and tox to use textfsm [\#300](https://github.com/networktocode/ntc-templates/pull/300) ([jmcgill298](https://github.com/jmcgill298)) +- Change requirements to use `textfsm` instead of `gtextfsm` [\#299](https://github.com/networktocode/ntc-templates/pull/299) ([jmcgill298](https://github.com/jmcgill298)) +- added juniper\_junos\_show\_version.template [\#298](https://github.com/networktocode/ntc-templates/pull/298) ([jkraszewski](https://github.com/jkraszewski)) +- added juniper\_junos\_show\_chassis\_cluster\_status.template [\#297](https://github.com/networktocode/ntc-templates/pull/297) ([jkraszewski](https://github.com/jkraszewski)) +- add juniper\_junos\_show\_chassis\_cluster\_interfaces [\#296](https://github.com/networktocode/ntc-templates/pull/296) ([jkraszewski](https://github.com/jkraszewski)) +- added juniper\_junos\_show\_arp\_no-resolve.template [\#295](https://github.com/networktocode/ntc-templates/pull/295) ([jkraszewski](https://github.com/jkraszewski)) +- modified cisco\_ios\_show\_ip\_arp.template [\#293](https://github.com/networktocode/ntc-templates/pull/293) ([jkraszewski](https://github.com/jkraszewski)) +- added brocade\_fastiron\_show\_mac-address.template [\#292](https://github.com/networktocode/ntc-templates/pull/292) ([jkraszewski](https://github.com/jkraszewski)) +- added brocade\_fastiron\_show\_lldp\_neighbors [\#291](https://github.com/networktocode/ntc-templates/pull/291) ([jkraszewski](https://github.com/jkraszewski)) +- modified brocade\_fastiron\_show\_interfaces\_brief.template [\#290](https://github.com/networktocode/ntc-templates/pull/290) ([jkraszewski](https://github.com/jkraszewski)) +- Brocade fastiron show arp [\#289](https://github.com/networktocode/ntc-templates/pull/289) ([jkraszewski](https://github.com/jkraszewski)) +- Add template for "show ip eigrp neighbors" on Cisco IOS [\#285](https://github.com/networktocode/ntc-templates/pull/285) ([Tachashi](https://github.com/Tachashi)) +- INDEX UPDATES: Fix filenames to use full command syntax [\#284](https://github.com/networktocode/ntc-templates/pull/284) ([jmcgill298](https://github.com/jmcgill298)) +- XR\_SH\_INTF: Update regex to properly capture data - Fixes \#282 [\#283](https://github.com/networktocode/ntc-templates/pull/283) ([jmcgill298](https://github.com/jmcgill298)) +- XR\_SHOW\_INTF: Correct capturing of IP Address info - Fixes \#280 [\#281](https://github.com/networktocode/ntc-templates/pull/281) ([jmcgill298](https://github.com/jmcgill298)) +- XR\_SH\_CDP: Reverse 'REMOTE\_PORT' and 'LOCAL\_PORT' Groups - Fixes \#277 [\#279](https://github.com/networktocode/ntc-templates/pull/279) ([jmcgill298](https://github.com/jmcgill298)) +- CISCO\_ASA\_SH\_FAIL: Update 'SERVICE\_STATE' groups to conform to Cisco'… [\#278](https://github.com/networktocode/ntc-templates/pull/278) ([jmcgill298](https://github.com/jmcgill298)) +- Account for device 'Not Ready' [\#276](https://github.com/networktocode/ntc-templates/pull/276) ([jmcgill298](https://github.com/jmcgill298)) +- CISCO ASA SHOW FAILOVER: Update parsers to account for new data [\#275](https://github.com/networktocode/ntc-templates/pull/275) ([jmcgill298](https://github.com/jmcgill298)) +- Added template for show ip eigrp topology [\#274](https://github.com/networktocode/ntc-templates/pull/274) ([jmcgill298](https://github.com/jmcgill298)) +- Cisco wlc ssh show ap config general [\#273](https://github.com/networktocode/ntc-templates/pull/273) ([jmcgill298](https://github.com/jmcgill298)) +- added show ap summary for Cisco WLC [\#272](https://github.com/networktocode/ntc-templates/pull/272) ([jmcgill298](https://github.com/jmcgill298)) +- Add RELOAD\_REASON to Record [\#271](https://github.com/networktocode/ntc-templates/pull/271) ([jmcgill298](https://github.com/jmcgill298)) +- Add templates for Vyatta [\#270](https://github.com/networktocode/ntc-templates/pull/270) ([jmcgill298](https://github.com/jmcgill298)) +- Add new OS and commands: Ubiquiti edgeswitch: show vlan and show arp support [\#269](https://github.com/networktocode/ntc-templates/pull/269) ([jmcgill298](https://github.com/jmcgill298)) +- Adding support for avaya\_ers\_show\_mlt command [\#268](https://github.com/networktocode/ntc-templates/pull/268) ([jmcgill298](https://github.com/jmcgill298)) +- adding cisco\_xr\_show\_controllers\_hundredgigabitethernet.template [\#267](https://github.com/networktocode/ntc-templates/pull/267) ([jmcgill298](https://github.com/jmcgill298)) +- Update Cisco IOS-XR template for `show ip route` command [\#266](https://github.com/networktocode/ntc-templates/pull/266) ([jmcgill298](https://github.com/jmcgill298)) +- added template for cisco xr : "admin show environment fan" ,"admin show vm" and "show version" [\#264](https://github.com/networktocode/ntc-templates/pull/264) ([jmcgill298](https://github.com/jmcgill298)) +- CISCO IOS SHOW REDUNDANCY: Add new template [\#263](https://github.com/networktocode/ntc-templates/pull/263) ([jmcgill298](https://github.com/jmcgill298)) +- CISCO ASA SHOW XLATE: Add new template [\#262](https://github.com/networktocode/ntc-templates/pull/262) ([jmcgill298](https://github.com/jmcgill298)) +- CISCO ASA SHOW FAILOVER: Add template for failover status [\#260](https://github.com/networktocode/ntc-templates/pull/260) ([jmcgill298](https://github.com/jmcgill298)) +- Add match for empty lines or lines that are only spaces [\#257](https://github.com/networktocode/ntc-templates/pull/257) ([jmcgill298](https://github.com/jmcgill298)) +- Updated show inventory to catch space on the name field [\#252](https://github.com/networktocode/ntc-templates/pull/252) ([amb1s1](https://github.com/amb1s1)) +- CISCO\_IOS\_SHOW\_IP\_PREFIX-LIST: Add new template [\#251](https://github.com/networktocode/ntc-templates/pull/251) ([jmcgill298](https://github.com/jmcgill298)) +- Ios show ip access list [\#250](https://github.com/networktocode/ntc-templates/pull/250) ([jmcgill298](https://github.com/jmcgill298)) +- Add support for standard ACL to include matching the 'match counts' [\#249](https://github.com/networktocode/ntc-templates/pull/249) ([jmcgill298](https://github.com/jmcgill298)) +- CISCO\_IOS\_SHOW\_IP\_ACCESS-LISTS: Add support for parsing connection st… [\#248](https://github.com/networktocode/ntc-templates/pull/248) ([jmcgill298](https://github.com/jmcgill298)) +- FIXES \#245 - CISCO\_IOS\_SHOW\_IP\_ACCESS-LISTS: [\#247](https://github.com/networktocode/ntc-templates/pull/247) ([jmcgill298](https://github.com/jmcgill298)) +- CISCO\_IOS\_SHOW\_ROUTE-MAP: Add new template [\#244](https://github.com/networktocode/ntc-templates/pull/244) ([jmcgill298](https://github.com/jmcgill298)) +- Cisco asa show inventory [\#243](https://github.com/networktocode/ntc-templates/pull/243) ([amb1s1](https://github.com/amb1s1)) +- CISCO\_IOS\_SHOW\_IP\_BGP\_SUMMARY: Add collecting ROUTER\_ID and LOCAL\_AS to parser. [\#242](https://github.com/networktocode/ntc-templates/pull/242) ([jmcgill298](https://github.com/jmcgill298)) +- Brocade fastiron show version [\#241](https://github.com/networktocode/ntc-templates/pull/241) ([jmcgill298](https://github.com/jmcgill298)) +- Fixed cisco\_ios\_show\_cdp\_neighbors when devices has 4+ capabilities [\#235](https://github.com/networktocode/ntc-templates/pull/235) ([bdowling](https://github.com/bdowling)) +- CISCO\_IOS\_SHOW\_RUNNING-CONFIG\_PARTITION\_ROUTE-MAP: Update record stat… [\#233](https://github.com/networktocode/ntc-templates/pull/233) ([jmcgill298](https://github.com/jmcgill298)) +- added show running-config partition route-map [\#228](https://github.com/networktocode/ntc-templates/pull/228) ([AutoJunjie](https://github.com/AutoJunjie)) +- Update TravisCI to use pypi instead of git clone with Pip [\#226](https://github.com/networktocode/ntc-templates/pull/226) ([jmcgill298](https://github.com/jmcgill298)) +- Added/modified show cap/lldp neighbors detail for cisco\*, brocade\*. Added cisco\_ios\_show\_ip\_device\_tracking\_all, cisco\_ios\_show\_ip\_source\_binding [\#225](https://github.com/networktocode/ntc-templates/pull/225) ([hilash](https://github.com/hilash)) +- Nxos communit list [\#220](https://github.com/networktocode/ntc-templates/pull/220) ([jmcgill298](https://github.com/jmcgill298)) +- Add support for cisco show ip mroute [\#216](https://github.com/networktocode/ntc-templates/pull/216) ([rhoriguchi](https://github.com/rhoriguchi)) +- Find MAC addresses in cisco IOS show version. [\#214](https://github.com/networktocode/ntc-templates/pull/214) ([kimoldfield](https://github.com/kimoldfield)) +- NXOS\_SHOW\_INTERFACE\_STATUS: Update template to better handle name wit… Fixes \#196 [\#204](https://github.com/networktocode/ntc-templates/pull/204) ([jmcgill298](https://github.com/jmcgill298)) +- Adding support for avaya\_ers\_show\_mlt\_all-members command [\#202](https://github.com/networktocode/ntc-templates/pull/202) ([kadecole](https://github.com/kadecole)) +- add arista dir flash: [\#187](https://github.com/networktocode/ntc-templates/pull/187) ([ydave](https://github.com/ydave)) +- Update the file to support Cap F on output [\#156](https://github.com/networktocode/ntc-templates/pull/156) ([amb1s1](https://github.com/amb1s1)) +- update cisco\_nxos\_show\_version to support 5ks [\#154](https://github.com/networktocode/ntc-templates/pull/154) ([amb1s1](https://github.com/amb1s1)) + diff --git a/docs/admin/release_notes/version_1.2.md b/docs/admin/release_notes/version_1.2.md new file mode 100644 index 0000000000..52c1f9100b --- /dev/null +++ b/docs/admin/release_notes/version_1.2.md @@ -0,0 +1,21 @@ +## [v1.2.1](https://github.com/networktocode/ntc-templates/tree/v1.2.1) (2019-09-26) + +[Full Changelog](https://github.com/networktocode/ntc-templates/compare/v1.2.0...v1.2.1) + +## [v1.2.0](https://github.com/networktocode/ntc-templates/tree/v1.2.0) (2019-09-26) + +[Full Changelog](https://github.com/networktocode/ntc-templates/compare/v1.1.1...v1.2.0) + +**Implemented enhancements:** + +- FileNotFoundError on Windows 10 [\#455](https://github.com/networktocode/ntc-templates/issues/455) +- Cisco ASA - Missing capture of Software Compile Date [\#387](https://github.com/networktocode/ntc-templates/issues/387) + +**Merged pull requests:** + +- Updates as requested [\#470](https://github.com/networktocode/ntc-templates/pull/470) ([jvanderaa](https://github.com/jvanderaa)) +- Remove extraneous \(duplicate\) test [\#463](https://github.com/networktocode/ntc-templates/pull/463) ([ad8-bdl](https://github.com/ad8-bdl)) +- Support for locating templates when installing local directory on Windows - Fixes \#455 [\#456](https://github.com/networktocode/ntc-templates/pull/456) ([jmcgill298](https://github.com/jmcgill298)) +- Update cisco\_xr\_show\_version.template [\#442](https://github.com/networktocode/ntc-templates/pull/442) ([mspiez](https://github.com/mspiez)) +- Cisco xr show interfaces duplex and mac for bundle ethernet [\#389](https://github.com/networktocode/ntc-templates/pull/389) ([Warsenius](https://github.com/Warsenius)) + diff --git a/docs/admin/release_notes/version_1.3.md b/docs/admin/release_notes/version_1.3.md new file mode 100644 index 0000000000..229852161c --- /dev/null +++ b/docs/admin/release_notes/version_1.3.md @@ -0,0 +1,100 @@ +## [v1.3.0](https://github.com/networktocode/ntc-templates/tree/v1.3.0) (2019-11-18) + +[Full Changelog](https://github.com/networktocode/ntc-templates/compare/v1.2.1...v1.3.0) + +**Implemented enhancements:** + +- cisco\_ios\_show\_standby\_brief.template support for interfaces and output in two lines [\#483](https://github.com/networktocode/ntc-templates/issues/483) +- New template cisco\_ios\_show\_snmp\_user.template [\#390](https://github.com/networktocode/ntc-templates/issues/390) +- added last\_link\_flapped to nxos\_show\_interface [\#531](https://github.com/networktocode/ntc-templates/pull/531) ([aSauerwein](https://github.com/aSauerwein)) +- Adding Values for route-map names fetch for nxos\_sh\_ip\_bgp\_nei [\#481](https://github.com/networktocode/ntc-templates/pull/481) ([nnaukwal](https://github.com/nnaukwal)) +- Added BGP up/down time to sh ip bgp summary [\#476](https://github.com/networktocode/ntc-templates/pull/476) ([corvese](https://github.com/corvese)) +- Update cisco\_ios\_show\_ip\_eigrp\_topology.template [\#445](https://github.com/networktocode/ntc-templates/pull/445) ([thomasbridge74](https://github.com/thomasbridge74)) +- Cisco wlc template [\#391](https://github.com/networktocode/ntc-templates/pull/391) ([hisaza](https://github.com/hisaza)) +- Cisco xr show route vrf all [\#378](https://github.com/networktocode/ntc-templates/pull/378) ([Warsenius](https://github.com/Warsenius)) + +**Fixed bugs:** + +- cisco\_ios\_show\_interfaces\_switchport.template broken [\#537](https://github.com/networktocode/ntc-templates/issues/537) +- "Cisco IOS show authentication session" issue when session count exceeds ~10 [\#473](https://github.com/networktocode/ntc-templates/issues/473) +- cisco\_ios\_show\_ip\_interface.template does not deal with peer address on virtual-access interface [\#461](https://github.com/networktocode/ntc-templates/issues/461) +- arista\_eos\_show\_interfaces\_status.template does not deal with disabled ports properly [\#460](https://github.com/networktocode/ntc-templates/issues/460) +- cisco\_ios\_show\_ip\_eigrp\_topology.template does not deal with redistributed routes. [\#459](https://github.com/networktocode/ntc-templates/issues/459) +- Cisco ASA - show failover error [\#424](https://github.com/networktocode/ntc-templates/issues/424) +- wrong info returned when not space between interface name and number from show cdp neighbor [\#415](https://github.com/networktocode/ntc-templates/issues/415) +- show\_mac\_address-table - Output contains single dictionary [\#385](https://github.com/networktocode/ntc-templates/issues/385) +- Fix netflow and wccp lines [\#494](https://github.com/networktocode/ntc-templates/pull/494) ([targuan](https://github.com/targuan)) +- Fix mac address table [\#485](https://github.com/networktocode/ntc-templates/pull/485) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- Issue 415 cdp [\#480](https://github.com/networktocode/ntc-templates/pull/480) ([mullaneywt](https://github.com/mullaneywt)) +- Issue 472 patch [\#479](https://github.com/networktocode/ntc-templates/pull/479) ([mullaneywt](https://github.com/mullaneywt)) +- fixed ports [\#471](https://github.com/networktocode/ntc-templates/pull/471) ([dainok](https://github.com/dainok)) +- Fixes \#424: Cisco ASA - show failover error. [\#465](https://github.com/networktocode/ntc-templates/pull/465) ([deesel](https://github.com/deesel)) +- Issue \#384 cisco\_asa\_show\_route - Fix uptime issue [\#401](https://github.com/networktocode/ntc-templates/pull/401) ([brandomando](https://github.com/brandomando)) + +**Closed issues:** + +- cisco\_asa bug in 9.10.1.22 causes `show inventory` template to fail [\#498](https://github.com/networktocode/ntc-templates/issues/498) +- Cisco IOS LLDP [\#484](https://github.com/networktocode/ntc-templates/issues/484) +- cisco\_nxos\_show\_interface\_brief does not deal with pvlan and fabric interfaces [\#472](https://github.com/networktocode/ntc-templates/issues/472) +- cisco\_ios\_show\_lldp\_neighbors\_detail failing when last neighbor includes" MED information" section [\#444](https://github.com/networktocode/ntc-templates/issues/444) +- New Template: cisco\_ios\_show\_license [\#440](https://github.com/networktocode/ntc-templates/issues/440) +- nxos\_show\_interface\_status\_template error [\#420](https://github.com/networktocode/ntc-templates/issues/420) +- README Documentation missing setup information [\#411](https://github.com/networktocode/ntc-templates/issues/411) +- Arista and show int status [\#410](https://github.com/networktocode/ntc-templates/issues/410) +- Cisco ASA show route template error [\#384](https://github.com/networktocode/ntc-templates/issues/384) +- Build is failing in Travis CI [\#240](https://github.com/networktocode/ntc-templates/issues/240) + +**Merged pull requests:** + +- Update CHANGELOG and bump version [\#542](https://github.com/networktocode/ntc-templates/pull/542) ([jmcgill298](https://github.com/jmcgill298)) +- Update state transitions to provide more consistency across platforms [\#541](https://github.com/networktocode/ntc-templates/pull/541) ([jmcgill298](https://github.com/jmcgill298)) +- cisco\_ios\_show\_environment\_temperature.template, iOS, show environment temperature [\#540](https://github.com/networktocode/ntc-templates/pull/540) ([bobbytayar](https://github.com/bobbytayar)) +- show interface summary [\#539](https://github.com/networktocode/ntc-templates/pull/539) ([timjsmith24](https://github.com/timjsmith24)) +- Fixes 537 - IOS show interfaces switchport - Changed output [\#538](https://github.com/networktocode/ntc-templates/pull/538) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- Issue 440 [\#533](https://github.com/networktocode/ntc-templates/pull/533) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- Show snmp user [\#532](https://github.com/networktocode/ntc-templates/pull/532) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- Enhancement - fortinet - get router info bgp summary [\#529](https://github.com/networktocode/ntc-templates/pull/529) ([corvese](https://github.com/corvese)) +- Enhancement: Update templates to record on new entry [\#528](https://github.com/networktocode/ntc-templates/pull/528) ([jmcgill298](https://github.com/jmcgill298)) +- Cisco voice vlan [\#527](https://github.com/networktocode/ntc-templates/pull/527) ([ThreeFDDI](https://github.com/ThreeFDDI)) +- Adv 802dot11 channel [\#526](https://github.com/networktocode/ntc-templates/pull/526) ([timjsmith24](https://github.com/timjsmith24)) +- BugFix: IOS - Add capturing of timestamp data for vty lines that auto print one [\#525](https://github.com/networktocode/ntc-templates/pull/525) ([jmcgill298](https://github.com/jmcgill298)) +- New Template - EOS - show vrf [\#524](https://github.com/networktocode/ntc-templates/pull/524) ([jmcgill298](https://github.com/jmcgill298)) +- Enhancement - IOS - show mac-address - add data validation and tests [\#523](https://github.com/networktocode/ntc-templates/pull/523) ([jmcgill298](https://github.com/jmcgill298)) +- Enhancement - EOS - Allow show bgp summary to be used for show bgp evpn summary [\#522](https://github.com/networktocode/ntc-templates/pull/522) ([jmcgill298](https://github.com/jmcgill298)) +- Enhancement - EOS|NXOS - sh ip route add capturing of VRF [\#521](https://github.com/networktocode/ntc-templates/pull/521) ([jmcgill298](https://github.com/jmcgill298)) +- Enhancement: IOS|EOS - show bgp summ - Account for VRF syntax [\#520](https://github.com/networktocode/ntc-templates/pull/520) ([jmcgill298](https://github.com/jmcgill298)) +- BugFix: XR - show version - account for CRS output [\#519](https://github.com/networktocode/ntc-templates/pull/519) ([jmcgill298](https://github.com/jmcgill298)) +- New Template - Ciena - software show [\#518](https://github.com/networktocode/ntc-templates/pull/518) ([jmcgill298](https://github.com/jmcgill298)) +- BugFix: EOS - show bgp summ - match RID/AS more precisely [\#517](https://github.com/networktocode/ntc-templates/pull/517) ([jmcgill298](https://github.com/jmcgill298)) +- BugFix: IOS - show ip int - account for serial intfs [\#516](https://github.com/networktocode/ntc-templates/pull/516) ([jmcgill298](https://github.com/jmcgill298)) +- New Template: WLC - show inventory [\#515](https://github.com/networktocode/ntc-templates/pull/515) ([jmcgill298](https://github.com/jmcgill298)) +- New Template - IOS - show process memory sorted [\#514](https://github.com/networktocode/ntc-templates/pull/514) ([jmcgill298](https://github.com/jmcgill298)) +- New Template: WLC - show rf profile-summary [\#513](https://github.com/networktocode/ntc-templates/pull/513) ([jmcgill298](https://github.com/jmcgill298)) +- New Templates - Huawei VRP - display interface and display temp [\#512](https://github.com/networktocode/ntc-templates/pull/512) ([jmcgill298](https://github.com/jmcgill298)) +- New Template: WLC - show 802.11 cleanair config [\#510](https://github.com/networktocode/ntc-templates/pull/510) ([jmcgill298](https://github.com/jmcgill298)) +- BugFix: WLC 80211 - Add missing EoL to matching empty lines [\#508](https://github.com/networktocode/ntc-templates/pull/508) ([jmcgill298](https://github.com/jmcgill298)) +- cisco nxos bgp neighbor defect fix [\#505](https://github.com/networktocode/ntc-templates/pull/505) ([nnaukwal](https://github.com/nnaukwal)) +- BugFix: IOS show standby brief - support multiline output [\#503](https://github.com/networktocode/ntc-templates/pull/503) ([jmcgill298](https://github.com/jmcgill298)) +- Cisco WLC Command - Show 802 11a|b [\#501](https://github.com/networktocode/ntc-templates/pull/501) ([timjsmith24](https://github.com/timjsmith24)) +- Fixes498 - Cisco ASA with Extra Output in `show inventory` [\#499](https://github.com/networktocode/ntc-templates/pull/499) ([jvanderaa](https://github.com/jvanderaa)) +- Enhancement: ASA - Convert show version serial to list [\#497](https://github.com/networktocode/ntc-templates/pull/497) ([jmcgill298](https://github.com/jmcgill298)) +- Add arista eos show ip helper [\#496](https://github.com/networktocode/ntc-templates/pull/496) ([targuan](https://github.com/targuan)) +- Fix \#461 [\#495](https://github.com/networktocode/ntc-templates/pull/495) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- Add ruckus\_fastiron show arp template [\#493](https://github.com/networktocode/ntc-templates/pull/493) ([QuasarKid](https://github.com/QuasarKid)) +- New Template: cisco\_xr\_show\_ipv6\_neighbors [\#492](https://github.com/networktocode/ntc-templates/pull/492) ([charlesmonson](https://github.com/charlesmonson)) +- Switch detail [\#491](https://github.com/networktocode/ntc-templates/pull/491) ([jmcgill298](https://github.com/jmcgill298)) +- Cisco NXoS template for "show forwarding ipv4 route" [\#489](https://github.com/networktocode/ntc-templates/pull/489) ([nnaukwal](https://github.com/nnaukwal)) +- Fix \#460 [\#488](https://github.com/networktocode/ntc-templates/pull/488) ([targuan](https://github.com/targuan)) +- Add test case for 3650/3850 output [\#487](https://github.com/networktocode/ntc-templates/pull/487) ([targuan](https://github.com/targuan)) +- nxos - Template for show route-map command [\#486](https://github.com/networktocode/ntc-templates/pull/486) ([nnaukwal](https://github.com/nnaukwal)) +- Cisco XR admin show inventory [\#482](https://github.com/networktocode/ntc-templates/pull/482) ([charlesmonson](https://github.com/charlesmonson)) +- Add template cisco\_nxos\_show\_ip\_interface\_brief [\#478](https://github.com/networktocode/ntc-templates/pull/478) ([mullaneywt](https://github.com/mullaneywt)) +- BugFix: allow various time formats for ip mroute [\#474](https://github.com/networktocode/ntc-templates/pull/474) ([jmcgill298](https://github.com/jmcgill298)) +- template for show arp in watchguard [\#468](https://github.com/networktocode/ntc-templates/pull/468) ([dainok](https://github.com/dainok)) +- Paloalto panos arp fix [\#466](https://github.com/networktocode/ntc-templates/pull/466) ([dainok](https://github.com/dainok)) +- HP Comware `display counters \(inbound|outbound\) interface` [\#464](https://github.com/networktocode/ntc-templates/pull/464) ([ad8-bdl](https://github.com/ad8-bdl)) +- ASA show asp drop changes [\#446](https://github.com/networktocode/ntc-templates/pull/446) ([vaneuk](https://github.com/vaneuk)) +- add cisco\_wlc\_ssh\_show\_exclusionlist [\#425](https://github.com/networktocode/ntc-templates/pull/425) ([ancker010](https://github.com/ancker010)) +- fix: show ip bgp examples appear to be swapped [\#421](https://github.com/networktocode/ntc-templates/pull/421) ([cmccormack](https://github.com/cmccormack)) +- Bugfix: asa\_dir template to account for change in raw output [\#419](https://github.com/networktocode/ntc-templates/pull/419) ([FragmentedPacket](https://github.com/FragmentedPacket)) + diff --git a/docs/admin/release_notes/version_1.4.md b/docs/admin/release_notes/version_1.4.md new file mode 100644 index 0000000000..813fc907bf --- /dev/null +++ b/docs/admin/release_notes/version_1.4.md @@ -0,0 +1,184 @@ +## [v1.4.2](https://github.com/networktocode/ntc-templates/tree/v1.4.2) (2020-05-26) + +[Full Changelog](https://github.com/networktocode/ntc-templates/compare/v1.4.1...v1.4.2) + +**Fixed bugs:** + +- cisco\_ios "show ip ospf database router" fails if OSPF domain includes an ASBR or an ABR [\#690](https://github.com/networktocode/ntc-templates/issues/690) +- Arista EOS show ip route parse error [\#668](https://github.com/networktocode/ntc-templates/issues/668) +- cisco\_ios\_show\_ip\_interface does not deal with ip address negotiated on Tunnel interface [\#644](https://github.com/networktocode/ntc-templates/issues/644) + +**Closed issues:** + +- Cisco IOS - textfsm.parser.TextFSMError: State Error raised. Rule Line: 17. [\#718](https://github.com/networktocode/ntc-templates/issues/718) +- show mac address-table Error: State Error raised. Rule Line: 41. [\#715](https://github.com/networktocode/ntc-templates/issues/715) +- show mac address-table no dictionary in response [\#714](https://github.com/networktocode/ntc-templates/issues/714) +- Having trouble with alcatel\_sros templates [\#698](https://github.com/networktocode/ntc-templates/issues/698) +- Cisco show cdp neighbor details leaves whitespace in capabilities field [\#683](https://github.com/networktocode/ntc-templates/issues/683) +- cisco\_ios neighbor summary per address family new request. [\#664](https://github.com/networktocode/ntc-templates/issues/664) +- cisco\_ios BGP neighbor advertised and received routes request. [\#663](https://github.com/networktocode/ntc-templates/issues/663) +- Ciena naming doesn’t conform to Netmiko [\#662](https://github.com/networktocode/ntc-templates/issues/662) +- Problem to add or install ntc-templates: [\#658](https://github.com/networktocode/ntc-templates/issues/658) +- show\_vlan template for cisco ios does not return more than 60 interfaces [\#653](https://github.com/networktocode/ntc-templates/issues/653) +- Unable to parse data by using "cisco\_ios\_show\_ip\_route\_summary.textfsm" [\#643](https://github.com/networktocode/ntc-templates/issues/643) +- template request: show ip bgp neighbors x.x.x.x advertised-routes [\#639](https://github.com/networktocode/ntc-templates/issues/639) + +**Merged pull requests:** + +- Bump version to 1.4.2 [\#728](https://github.com/networktocode/ntc-templates/pull/728) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- 718 fix [\#725](https://github.com/networktocode/ntc-templates/pull/725) ([itdependsnetworks](https://github.com/itdependsnetworks)) +- Update to enforce double-quote [\#724](https://github.com/networktocode/ntc-templates/pull/724) ([itdependsnetworks](https://github.com/itdependsnetworks)) +- Enhance Template for Cisco IOS: show adjacency [\#721](https://github.com/networktocode/ntc-templates/pull/721) ([Yakuza-UA](https://github.com/Yakuza-UA)) +- New templates: Cisco s300 - LLDP Neighbors, Interfaces status, Mac address table [\#719](https://github.com/networktocode/ntc-templates/pull/719) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- EOS can have N/A in the age field for show ip arp [\#717](https://github.com/networktocode/ntc-templates/pull/717) ([ktbyers](https://github.com/ktbyers)) +- New Template: juniper\_junos\_show\_lacp\_interfaces [\#713](https://github.com/networktocode/ntc-templates/pull/713) ([ichisuke55](https://github.com/ichisuke55)) +- New Template: paloalto\_panos\_show\_interface\_management.textfsm [\#712](https://github.com/networktocode/ntc-templates/pull/712) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- Bugfix: EOS - show\_interfaces - Added proper link\_status capture for admin down [\#711](https://github.com/networktocode/ntc-templates/pull/711) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- Bugfix: Panos sh intf hardware - Account for unk for SPEED/Duplex [\#710](https://github.com/networktocode/ntc-templates/pull/710) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- BugFix: Updated index file to work for show ip bgp neighbors x.x.x.x adv-routes [\#709](https://github.com/networktocode/ntc-templates/pull/709) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- BugFix: Ciena Saos: Added more use cases to vlan\_show [\#707](https://github.com/networktocode/ntc-templates/pull/707) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- paloalto\_panos\_debug\_swm\_status.textfsm new template [\#706](https://github.com/networktocode/ntc-templates/pull/706) ([ancoleman](https://github.com/ancoleman)) +- New Template for Cisco NX-OS: show ip adjacency [\#704](https://github.com/networktocode/ntc-templates/pull/704) ([Yakuza-UA](https://github.com/Yakuza-UA)) +- New Template for Cisco IOS: show ip vrf interfaces [\#702](https://github.com/networktocode/ntc-templates/pull/702) ([Yakuza-UA](https://github.com/Yakuza-UA)) +- Existing Template for Cisco NX-OS: show ip interface brief \(VRF support added\) [\#701](https://github.com/networktocode/ntc-templates/pull/701) ([Yakuza-UA](https://github.com/Yakuza-UA)) +- New Template: juniper\_junos\_show\_ethenet-switching\_table.textfsm [\#700](https://github.com/networktocode/ntc-templates/pull/700) ([ichisuke55](https://github.com/ichisuke55)) +- New Template for Cisco IOS: traceroute \ \[options\] [\#699](https://github.com/networktocode/ntc-templates/pull/699) ([Yakuza-UA](https://github.com/Yakuza-UA)) +- BugFix: show vpn-sessiondb anyconnect - Index and Username ends up on… [\#697](https://github.com/networktocode/ntc-templates/pull/697) ([anttof](https://github.com/anttof)) +- Asa bgp summary [\#696](https://github.com/networktocode/ntc-templates/pull/696) ([corvese](https://github.com/corvese)) +- New Template for Cisco IOS: show ip cef \[detail\] [\#695](https://github.com/networktocode/ntc-templates/pull/695) ([Yakuza-UA](https://github.com/Yakuza-UA)) +- Ciena sshkeystatus [\#693](https://github.com/networktocode/ntc-templates/pull/693) ([georgesnow](https://github.com/georgesnow)) +- Cisco IOS 'show adjacency .\* detail' [\#692](https://github.com/networktocode/ntc-templates/pull/692) ([Yakuza-UA](https://github.com/Yakuza-UA)) +- Bugfix: Accounted for ASBR/ABR in cisco\_ios\_show\_ip\_ospf\_database\_router [\#691](https://github.com/networktocode/ntc-templates/pull/691) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- HP Procurve show lldp info remote device [\#689](https://github.com/networktocode/ntc-templates/pull/689) ([sliddjur](https://github.com/sliddjur)) +- HP Procurve show lldp info remote-device detail [\#688](https://github.com/networktocode/ntc-templates/pull/688) ([sliddjur](https://github.com/sliddjur)) +- HP Procurve show trunks [\#687](https://github.com/networktocode/ntc-templates/pull/687) ([sliddjur](https://github.com/sliddjur)) +- BugFix: \(IOS\) - show cdp neighbors detail - Prevent capturing trailing whitespace for capabilities [\#684](https://github.com/networktocode/ntc-templates/pull/684) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- BugFix: IOS - show ip bgp summary: Added new field ADDR\_FAMILY for any that may have an address family [\#679](https://github.com/networktocode/ntc-templates/pull/679) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- BugFix: IOS - show ip bgp - Account for VRF info within routing table [\#678](https://github.com/networktocode/ntc-templates/pull/678) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- New Template: \(IOS\) show\_ip\_bgp\_neighbors\_advertised\_routes [\#674](https://github.com/networktocode/ntc-templates/pull/674) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- Enhancement: Added CRC and Abort Values to ios\_show\_interfaces template [\#673](https://github.com/networktocode/ntc-templates/pull/673) ([mtbutler07](https://github.com/mtbutler07)) +- Remove "terminal" dependency [\#672](https://github.com/networktocode/ntc-templates/pull/672) ([ktbyers](https://github.com/ktbyers)) +- BugFix: cisco\_ios\_show\_ip\_interface: Account for Internet address that is negotiated [\#670](https://github.com/networktocode/ntc-templates/pull/670) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- BugFix: arista\_eos\_show\_ip\_route: Accounting for new data for WARNING output & capture ecmp routes [\#669](https://github.com/networktocode/ntc-templates/pull/669) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- Enhancement: cisco\_ios\_show\_redundancy - Add New fields [\#667](https://github.com/networktocode/ntc-templates/pull/667) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- Ciena SAOS templates \(naming fix\) [\#665](https://github.com/networktocode/ntc-templates/pull/665) ([georgesnow](https://github.com/georgesnow)) +- Adds support for Cisco FTD [\#654](https://github.com/networktocode/ntc-templates/pull/654) ([micahculpepper](https://github.com/micahculpepper)) +- New Template: hp\_comware\_display\_ip\_routing-table & hp\_comware\_display\_device\_manuinfo [\#623](https://github.com/networktocode/ntc-templates/pull/623) ([xdai555](https://github.com/xdai555)) + +## [v1.4.1](https://github.com/networktocode/ntc-templates/tree/v1.4.1) (2020-04-23) + +[Full Changelog](https://github.com/networktocode/ntc-templates/compare/v1.4.0...v1.4.1) + +**Closed issues:** + +- cisco\_ios\_show\_mac-address-table.textfsm "N/A" in vlan field. [\#657](https://github.com/networktocode/ntc-templates/issues/657) +- platform="cisco\_ios", command="sh ip route summary" returning an empty array. [\#655](https://github.com/networktocode/ntc-templates/issues/655) +- Beginning of output for cisco\_ios "show ip ospf database \" may or may not be a space character [\#649](https://github.com/networktocode/ntc-templates/issues/649) +- Cisco ASA show\_route parsing for alternative multiline format [\#646](https://github.com/networktocode/ntc-templates/issues/646) +- Cisco ASA AnyConnect Errors with Tunnel Group on different line [\#630](https://github.com/networktocode/ntc-templates/issues/630) +- Create Template for Cisco ASA - show vpn-sessiondb anyconnect [\#624](https://github.com/networktocode/ntc-templates/issues/624) +- Juniper Junos add fpc:X, {master:X} for many commans stdout [\#621](https://github.com/networktocode/ntc-templates/issues/621) + +**Merged pull requests:** + +- Forgot to bump version in lib/ntc\_templates/\_\_init\_\_.py [\#661](https://github.com/networktocode/ntc-templates/pull/661) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- Added information for all new changes between 1.4.0 and now [\#660](https://github.com/networktocode/ntc-templates/pull/660) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- BugFix: cisco\_ios\_show\_mac-address-table: Allows N/A in the VLAN field by changing it from word to non-whitespace [\#659](https://github.com/networktocode/ntc-templates/pull/659) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- BugFix: cisco\_ios show ip ospf database router and network: Make leading spaces optional [\#650](https://github.com/networktocode/ntc-templates/pull/650) ([ariesgeek](https://github.com/ariesgeek)) +- Cisco ASA show\_route [\#647](https://github.com/networktocode/ntc-templates/pull/647) ([fatred](https://github.com/fatred)) +- Enhancement: cisco\_asa\_show\_inventory support inventory items w/o SN [\#638](https://github.com/networktocode/ntc-templates/pull/638) ([wvandeun](https://github.com/wvandeun)) +- show band-select template [\#637](https://github.com/networktocode/ntc-templates/pull/637) ([timjsmith24](https://github.com/timjsmith24)) +- Adds Cisco ASA show vpn-sessiondb [\#636](https://github.com/networktocode/ntc-templates/pull/636) ([jvanderaa](https://github.com/jvanderaa)) +- add cisco\_ios\_show\_ip\_route\_summary [\#635](https://github.com/networktocode/ntc-templates/pull/635) ([kjoyce77](https://github.com/kjoyce77)) +- Bugfix: cisco asa show nat [\#632](https://github.com/networktocode/ntc-templates/pull/632) ([joewesch](https://github.com/joewesch)) +- Updates based on hung sessions and different command output [\#631](https://github.com/networktocode/ntc-templates/pull/631) ([jvanderaa](https://github.com/jvanderaa)) +- Bugfix: Cisco ASA ipsec sa name compatibility [\#629](https://github.com/networktocode/ntc-templates/pull/629) ([joewesch](https://github.com/joewesch)) +- cisco\_wlc show mobility summary [\#628](https://github.com/networktocode/ntc-templates/pull/628) ([timjsmith24](https://github.com/timjsmith24)) +- Updates Cisco ASA `show vpn-sessiondb anyconnect` [\#626](https://github.com/networktocode/ntc-templates/pull/626) ([jvanderaa](https://github.com/jvanderaa)) +- Adds template for Cisco ASA "show vpn-sessiondb anyconnect" [\#625](https://github.com/networktocode/ntc-templates/pull/625) ([jvanderaa](https://github.com/jvanderaa)) +- Junos virtual chassis [\#622](https://github.com/networktocode/ntc-templates/pull/622) ([ainamori](https://github.com/ainamori)) +- allow space in fex description [\#620](https://github.com/networktocode/ntc-templates/pull/620) ([daanvdsanden](https://github.com/daanvdsanden)) +- New Template: hp\_comware\_display\_lldp\_neighbor-information\_verbose [\#619](https://github.com/networktocode/ntc-templates/pull/619) ([xdai555](https://github.com/xdai555)) +- New Template: cisco\_ios\_show\_ip\_ospf\_database\_network [\#618](https://github.com/networktocode/ntc-templates/pull/618) ([ChristopherJHart](https://github.com/ChristopherJHart)) +- BugFix: Remove reliance on static spacing for cisco\_ios\_show\_ip\_ospf\_database\_router [\#617](https://github.com/networktocode/ntc-templates/pull/617) ([ChristopherJHart](https://github.com/ChristopherJHart)) +- BugFix: Removed reliance on static spacing for cisco\_ios\_show\_interfaces\_status [\#614](https://github.com/networktocode/ntc-templates/pull/614) ([FragmentedPacket](https://github.com/FragmentedPacket)) + +## [v1.4.0](https://github.com/networktocode/ntc-templates/tree/v1.4.0) (2020-03-09) + +[Full Changelog](https://github.com/networktocode/ntc-templates/compare/v1.3.0...v1.4.0) + +**Implemented enhancements:** + +- Testing that test cases exist has an exception for 4 templates that need to be rectified [\#550](https://github.com/networktocode/ntc-templates/issues/550) +- Huawei - display lldp neighbor formatting [\#396](https://github.com/networktocode/ntc-templates/issues/396) +- Adding vlan name to access vlan and native vlan on NXOS [\#612](https://github.com/networktocode/ntc-templates/pull/612) ([daanvdsanden](https://github.com/daanvdsanden)) +- Enhancement: cisco\_nxos\_show\_vlan: Added interfaces [\#604](https://github.com/networktocode/ntc-templates/pull/604) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- Enhancement: IOS lldp neighbors - add capabilities capture group [\#553](https://github.com/networktocode/ntc-templates/pull/553) ([ewmanthei](https://github.com/ewmanthei)) +- Enhancement: Use ".textfsm" extension for IDEs [\#543](https://github.com/networktocode/ntc-templates/pull/543) ([jmcgill298](https://github.com/jmcgill298)) +- YAMLLINT: Add yamllint to tox testing [\#406](https://github.com/networktocode/ntc-templates/pull/406) ([jmcgill298](https://github.com/jmcgill298)) + +**Fixed bugs:** + +- parse\_output returns empty after interface has been modified by first run of script [\#613](https://github.com/networktocode/ntc-templates/issues/613) +- arista\_eos\_show\_ip\_route.textfsm fails on vrrp route display [\#588](https://github.com/networktocode/ntc-templates/issues/588) +- ASA show failover bug when using IPS module [\#547](https://github.com/networktocode/ntc-templates/issues/547) +- cisco\_nxos\_show\_version does not display N5K platform [\#545](https://github.com/networktocode/ntc-templates/issues/545) +- Fix regex: Update VyOS template to match addresses without netmask de… [\#608](https://github.com/networktocode/ntc-templates/pull/608) ([sliddjur](https://github.com/sliddjur)) +- Fixed regex for fortinet bgp template and added new template standards [\#592](https://github.com/networktocode/ntc-templates/pull/592) ([corvese](https://github.com/corvese)) +- BugFix: Cisco show switch detail with mac persistency wait time [\#584](https://github.com/networktocode/ntc-templates/pull/584) ([msom](https://github.com/msom)) + +**Closed issues:** + +- cisco\_nxos\_show\_vlan does not show ports, thank god cisco\_ios\_show\_vlan works [\#601](https://github.com/networktocode/ntc-templates/issues/601) +- regex to match whitespace, words, or mix of both, and cut off trailing whitespace? [\#566](https://github.com/networktocode/ntc-templates/issues/566) +- Bug: Alcatel SROS show service id index issue [\#556](https://github.com/networktocode/ntc-templates/issues/556) +- Cisco IOS Show MAC Address-Table Errors on Last Line [\#544](https://github.com/networktocode/ntc-templates/issues/544) +- Cisco IOS Show Run Template [\#469](https://github.com/networktocode/ntc-templates/issues/469) +- show ip route IOS vs NXOS [\#382](https://github.com/networktocode/ntc-templates/issues/382) +- Add tests for index file to Travis [\#207](https://github.com/networktocode/ntc-templates/issues/207) +- Using the .textfsm extension for templates [\#171](https://github.com/networktocode/ntc-templates/issues/171) + +**Merged pull requests:** + +- Bumping version to 1.4.0 [\#616](https://github.com/networktocode/ntc-templates/pull/616) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- Documentation: Update changelog for 1.4.0 release [\#615](https://github.com/networktocode/ntc-templates/pull/615) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- Added line to get the port mode of an interface [\#611](https://github.com/networktocode/ntc-templates/pull/611) ([daanvdsanden](https://github.com/daanvdsanden)) +- update show arp for aruba\_os [\#610](https://github.com/networktocode/ntc-templates/pull/610) ([dmwcode](https://github.com/dmwcode)) +- New Template: hp comware show ip interface [\#609](https://github.com/networktocode/ntc-templates/pull/609) ([sliddjur](https://github.com/sliddjur)) +- New Template: cisco\_ios\_show\_ip\_ospf\_database\_router [\#606](https://github.com/networktocode/ntc-templates/pull/606) ([ChristopherJHart](https://github.com/ChristopherJHart)) +- New Template: cisco\_s300\_show\_version [\#605](https://github.com/networktocode/ntc-templates/pull/605) ([wdennis](https://github.com/wdennis)) +- Enhancements: IOS show ip access-list [\#603](https://github.com/networktocode/ntc-templates/pull/603) ([jpobeda](https://github.com/jpobeda)) +- Cisco nxos show vrf interface [\#602](https://github.com/networktocode/ntc-templates/pull/602) ([JoeyG1973](https://github.com/JoeyG1973)) +- New Template Show Mpls interface [\#600](https://github.com/networktocode/ntc-templates/pull/600) ([alekgozali](https://github.com/alekgozali)) +- New Template : Show Etherchannel Summary [\#599](https://github.com/networktocode/ntc-templates/pull/599) ([alekgozali](https://github.com/alekgozali)) +- Fixes for cisco\_ios\_show\_running-config\_partition\_access-list template [\#598](https://github.com/networktocode/ntc-templates/pull/598) ([jpobeda](https://github.com/jpobeda)) +- add huawei vrp display version [\#597](https://github.com/networktocode/ntc-templates/pull/597) ([lutfisan](https://github.com/lutfisan)) +- Cisco XR - admin show environment power - template [\#596](https://github.com/networktocode/ntc-templates/pull/596) ([hijm](https://github.com/hijm)) +- Added Checkpoint GAIA show arp dynamic all template [\#595](https://github.com/networktocode/ntc-templates/pull/595) ([dys152](https://github.com/dys152)) +- add show arp for aruba\_os [\#594](https://github.com/networktocode/ntc-templates/pull/594) ([dmwcode](https://github.com/dmwcode)) +- New Template - CISCO IOS - Show Module [\#593](https://github.com/networktocode/ntc-templates/pull/593) ([alekgozali](https://github.com/alekgozali)) +- New Template: cisco\_nxos\_show\_vdc.textfsm [\#591](https://github.com/networktocode/ntc-templates/pull/591) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- New Template: cisco\_ios\_show\_ip\_bgp\_neighbors.textfsm [\#590](https://github.com/networktocode/ntc-templates/pull/590) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- BugFix: arista\_eos\_show\_ip\_route: added new vrf format and secondary route catch [\#589](https://github.com/networktocode/ntc-templates/pull/589) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- Bug Fix: Cisco IOS show interfaces switchport [\#587](https://github.com/networktocode/ntc-templates/pull/587) ([kwrobert](https://github.com/kwrobert)) +- Bug Fix: Cisco IOS show mac address-table [\#585](https://github.com/networktocode/ntc-templates/pull/585) ([kwrobert](https://github.com/kwrobert)) +- Jschulman cisco nxos allow missing transceiver type [\#582](https://github.com/networktocode/ntc-templates/pull/582) ([jeremyschulman](https://github.com/jeremyschulman)) +- New Template: Cisco WLC show wlan summary [\#581](https://github.com/networktocode/ntc-templates/pull/581) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- New Template Pull Request - cisco\_xr\_show\_interfaces\_summary [\#580](https://github.com/networktocode/ntc-templates/pull/580) ([hijm](https://github.com/hijm)) +- New Templates: Fortinet get system interface and status [\#578](https://github.com/networktocode/ntc-templates/pull/578) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- Bug Fix for cisco ios show mac address-table parser [\#577](https://github.com/networktocode/ntc-templates/pull/577) ([kwrobert](https://github.com/kwrobert)) +- New Templat: Huawei display lldp neighbor [\#576](https://github.com/networktocode/ntc-templates/pull/576) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- BugFix: NXOS show version - Add n5k platform regex [\#575](https://github.com/networktocode/ntc-templates/pull/575) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- Bug Fix: ASA Show failover - Account for new data [\#574](https://github.com/networktocode/ntc-templates/pull/574) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- New Template: Show arp - ASA [\#573](https://github.com/networktocode/ntc-templates/pull/573) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- Add SERIAL to Cisco IOS LLDP Neighbors Detail [\#572](https://github.com/networktocode/ntc-templates/pull/572) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- New Template: Cisco XR - show arp [\#567](https://github.com/networktocode/ntc-templates/pull/567) ([migueloangelo](https://github.com/migueloangelo)) +- cisco\_ios\_show\_license - avoid trailing white spaces [\#565](https://github.com/networktocode/ntc-templates/pull/565) ([migueloangelo](https://github.com/migueloangelo)) +- New Template for Cisco NXOS - show\_interface\_transceiver [\#564](https://github.com/networktocode/ntc-templates/pull/564) ([dgarros](https://github.com/dgarros)) +- Enhancement: IOS show int switchport - Add ADMIN\_MODE Group [\#563](https://github.com/networktocode/ntc-templates/pull/563) ([jmcgill298](https://github.com/jmcgill298)) +- Cisco ASA Show Logging Template [\#562](https://github.com/networktocode/ntc-templates/pull/562) ([afoster213](https://github.com/afoster213)) +- New Template for Cisco IOS Log Messages [\#554](https://github.com/networktocode/ntc-templates/pull/554) ([afoster213](https://github.com/afoster213)) +- Cleanup some testing [\#551](https://github.com/networktocode/ntc-templates/pull/551) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- Fixes \#544: Added new parsed sample based on 3750G 15.0\(2\)SE11 code, … [\#548](https://github.com/networktocode/ntc-templates/pull/548) ([jvanderaa](https://github.com/jvanderaa)) +- PYTHON FORMATTING: Add Black to tox file [\#407](https://github.com/networktocode/ntc-templates/pull/407) ([jmcgill298](https://github.com/jmcgill298)) + diff --git a/docs/admin/release_notes/version_1.5.md b/docs/admin/release_notes/version_1.5.md new file mode 100644 index 0000000000..83ea1a01c3 --- /dev/null +++ b/docs/admin/release_notes/version_1.5.md @@ -0,0 +1,49 @@ +## [v1.5.0](https://github.com/networktocode/ntc-templates/tree/v1.5.0) (2020-06-15) + +[Full Changelog](https://github.com/networktocode/ntc-templates/compare/v1.4.2...v1.5.0) + +**Implemented enhancements:** + +- Broadcom ICOS/Fastpath Support? [\#726](https://github.com/networktocode/ntc-templates/issues/726) + +**Fixed bugs:** + +- Cisco IOS show cdp neighbors issue [\#727](https://github.com/networktocode/ntc-templates/issues/727) +- Cisco IOS Show Interface Switchport does not parse multi-line VLAN Trunks [\#642](https://github.com/networktocode/ntc-templates/issues/642) +- Cisco ASA Show interface does not catch unnamed interfaces [\#627](https://github.com/networktocode/ntc-templates/issues/627) +- Fixes missing interfaces on down interfaces [\#734](https://github.com/networktocode/ntc-templates/pull/734) ([jvanderaa](https://github.com/jvanderaa)) + +**Closed issues:** + +- Cisco ASA "show vpn-sessiondb anyconnect" parser doesn't support IPv6 addresses [\#751](https://github.com/networktocode/ntc-templates/issues/751) +- failing testsuite [\#743](https://github.com/networktocode/ntc-templates/issues/743) +- I would like to contribute the PR for adding new cisco\_wlc\_ssh\_show\_ap\_image\_all [\#739](https://github.com/networktocode/ntc-templates/issues/739) +- Template help for multiple states [\#737](https://github.com/networktocode/ntc-templates/issues/737) +- textfsm.parser.TextFSMError: State Error raised. Rule Line: 15. Input Line: show ip arp [\#686](https://github.com/networktocode/ntc-templates/issues/686) +- Arista eos - sh ip bgp summ vrf all and sh ip route vrf all template [\#666](https://github.com/networktocode/ntc-templates/issues/666) +- Template Creation Help: cisco\_xr\_admin\_show\_environment\_power to get power supply, voltage and current [\#648](https://github.com/networktocode/ntc-templates/issues/648) +- New template: hp\_comware\_display\_interface\_textFSM [\#634](https://github.com/networktocode/ntc-templates/issues/634) +- cisco\_asa\_show\_failover\_state [\#546](https://github.com/networktocode/ntc-templates/issues/546) + +**Merged pull requests:** + +- Bumping to version 1.5.0 [\#763](https://github.com/networktocode/ntc-templates/pull/763) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- Arista eos show port channel summary [\#757](https://github.com/networktocode/ntc-templates/pull/757) ([JoeyG1973](https://github.com/JoeyG1973)) +- Arista eos show mac address table [\#756](https://github.com/networktocode/ntc-templates/pull/756) ([JoeyG1973](https://github.com/JoeyG1973)) +- Template correction for broadcom\_icos\_show\_mac-address-table [\#754](https://github.com/networktocode/ntc-templates/pull/754) ([alepodj](https://github.com/alepodj)) +- Fixes \#751 - IPv6 support for Cisco ASA 'show vpn-sessiondb anyconnect' [\#752](https://github.com/networktocode/ntc-templates/pull/752) ([smfeldman](https://github.com/smfeldman)) +- New Template added support for broadcom\_icos\_show\_vlan\_brief [\#750](https://github.com/networktocode/ntc-templates/pull/750) ([alepodj](https://github.com/alepodj)) +- New Template added support for broadcom\_icos\_show\_lldp\_remote-device\_all [\#749](https://github.com/networktocode/ntc-templates/pull/749) ([alepodj](https://github.com/alepodj)) +- New Template added support for broadcom\_icos\_show\_isdp\_neighbors [\#748](https://github.com/networktocode/ntc-templates/pull/748) ([alepodj](https://github.com/alepodj)) +- Bugfix: Account for totals - cisco\_ios\_show\_processes\_memory\_sorted.textfsm [\#747](https://github.com/networktocode/ntc-templates/pull/747) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- Enhancement for Cisco IOS show interfaces [\#745](https://github.com/networktocode/ntc-templates/pull/745) ([Yakuza-UA](https://github.com/Yakuza-UA)) +- Added interfaces to arista\_eos\_show\_vrf template [\#744](https://github.com/networktocode/ntc-templates/pull/744) ([JoeyG1973](https://github.com/JoeyG1973)) +- Add new template for cisco\_wlc\_ssh\_sh\_ap\_image\_all [\#742](https://github.com/networktocode/ntc-templates/pull/742) ([conorwoo](https://github.com/conorwoo)) +- Update index to handle cisco\_ios show\_ip\_bgp\_all\_summary [\#738](https://github.com/networktocode/ntc-templates/pull/738) ([Niclnx](https://github.com/Niclnx)) +- Added support for broadcom\_icos command show\_mac-address-table [\#736](https://github.com/networktocode/ntc-templates/pull/736) ([alepodj](https://github.com/alepodj)) +- BugFix: IOS CDP - Better handling of output [\#735](https://github.com/networktocode/ntc-templates/pull/735) ([jmcgill298](https://github.com/jmcgill298)) +- New Template support for broadcom\_icos as a new OS and added show\_version command [\#733](https://github.com/networktocode/ntc-templates/pull/733) ([alepodj](https://github.com/alepodj)) +- New template for ubiquity edgeswitch: show version [\#732](https://github.com/networktocode/ntc-templates/pull/732) ([saaverdo](https://github.com/saaverdo)) +- New Template for Cisco NX-OS: show forwarding adjacency [\#722](https://github.com/networktocode/ntc-templates/pull/722) ([Yakuza-UA](https://github.com/Yakuza-UA)) +- BugFix: cisco\_ios\_show\_interfaces\_switchport: Made trunking\_vlans a list, and changed regex [\#671](https://github.com/networktocode/ntc-templates/pull/671) ([FragmentedPacket](https://github.com/FragmentedPacket)) + diff --git a/docs/admin/release_notes/version_1.6.md b/docs/admin/release_notes/version_1.6.md new file mode 100644 index 0000000000..445e44bd05 --- /dev/null +++ b/docs/admin/release_notes/version_1.6.md @@ -0,0 +1,45 @@ +## [v1.6.0](https://github.com/networktocode/ntc-templates/tree/v1.6.0) (2020-10-26) + +[Full Changelog](https://github.com/networktocode/ntc-templates/compare/v1.5.0...v1.6.0) + +**Implemented enhancements:** + +- Creation of a Faq [\#716](https://github.com/networktocode/ntc-templates/issues/716) + +**Closed issues:** + +- This is not a data modeling project. So is there any data modeling project can work with this? [\#802](https://github.com/networktocode/ntc-templates/issues/802) +- Black 20.b0 breaks tox test [\#794](https://github.com/networktocode/ntc-templates/issues/794) +- Unable to Parse show version on IOSv Device [\#780](https://github.com/networktocode/ntc-templates/issues/780) +- TXTFSM will not process template even though Regex checker says line is acceptable for ciena SAOS [\#779](https://github.com/networktocode/ntc-templates/issues/779) +- cisco\_nxos\_show\_ip\_bgp\_summary.textfsm doesn't account for dual line bgp when output is too wide [\#766](https://github.com/networktocode/ntc-templates/issues/766) +- arista eos show mac address-table is choking on case sensitivity on line Total Mac Addresses for this criterion: 0 [\#764](https://github.com/networktocode/ntc-templates/issues/764) + +**Merged pull requests:** + +- Bugfix: ASA show interface - missing case handled for no values for duplex & speed [\#815](https://github.com/networktocode/ntc-templates/pull/815) ([starlightdreamer](https://github.com/starlightdreamer)) +- Linux arp a [\#814](https://github.com/networktocode/ntc-templates/pull/814) ([jifox](https://github.com/jifox)) +- add template and tests for cisco\_wlc\_ssh\_show\_interface\_detailed [\#812](https://github.com/networktocode/ntc-templates/pull/812) ([wvandeun](https://github.com/wvandeun)) +- fix issue in cisco\_wlc\_ssh\_show\_interface\_summary template [\#810](https://github.com/networktocode/ntc-templates/pull/810) ([wvandeun](https://github.com/wvandeun)) +- Bugfix: cisco\_ios\_show\_running\_partition\_access\_list [\#808](https://github.com/networktocode/ntc-templates/pull/808) ([jpobeda](https://github.com/jpobeda)) +- Release 1.6.0 [\#807](https://github.com/networktocode/ntc-templates/pull/807) ([jmcgill298](https://github.com/jmcgill298)) +- changes tests to import from lib [\#806](https://github.com/networktocode/ntc-templates/pull/806) ([jmcgill298](https://github.com/jmcgill298)) +- modify for show inventory all. [\#804](https://github.com/networktocode/ntc-templates/pull/804) ([yshu95](https://github.com/yshu95)) +- Change TextFSM Windows failure to a runtime failure \(instead of an import failure\) [\#803](https://github.com/networktocode/ntc-templates/pull/803) ([ktbyers](https://github.com/ktbyers)) +- Added juniper\_junos\_show\_lldp\_neighbors [\#797](https://github.com/networktocode/ntc-templates/pull/797) ([qduk](https://github.com/qduk)) +- New Template - hp\_procurve\_show\_interfaces [\#796](https://github.com/networktocode/ntc-templates/pull/796) ([adraf82](https://github.com/adraf82)) +- Bugfix: Re-formatted development\_scripts.py and tests/test\_testcases\_… [\#795](https://github.com/networktocode/ntc-templates/pull/795) ([mjuenema](https://github.com/mjuenema)) +- Fix typos in README.md [\#792](https://github.com/networktocode/ntc-templates/pull/792) ([epryan](https://github.com/epryan)) +- update arista\_eos\_show\_inventory [\#791](https://github.com/networktocode/ntc-templates/pull/791) ([yshu95](https://github.com/yshu95)) +- Detect hostname on NX-OS platforms [\#789](https://github.com/networktocode/ntc-templates/pull/789) ([Yakuza-UA](https://github.com/Yakuza-UA)) +- Cisco ASA show access-list command templates update. [\#783](https://github.com/networktocode/ntc-templates/pull/783) ([HideoYukutake](https://github.com/HideoYukutake)) +- Updates to include capture on single word, no number model number [\#781](https://github.com/networktocode/ntc-templates/pull/781) ([jvanderaa](https://github.com/jvanderaa)) +- Bugfix: Account for "powered-up" value in the output of nxos show module [\#774](https://github.com/networktocode/ntc-templates/pull/774) ([mtbutler07](https://github.com/mtbutler07)) +- Dual line support for Cisco NX-OS 'ip bgp summary' command [\#772](https://github.com/networktocode/ntc-templates/pull/772) ([rtkennedy](https://github.com/rtkennedy)) +- Arista eos show mac address table [\#765](https://github.com/networktocode/ntc-templates/pull/765) ([JoeyG1973](https://github.com/JoeyG1973)) +- New Template: cisco\_nxos\_show\_ip\_interface [\#761](https://github.com/networktocode/ntc-templates/pull/761) ([network-dave](https://github.com/network-dave)) +- New Template: cisco\_nxos\_show\_hsrp\_all [\#760](https://github.com/networktocode/ntc-templates/pull/760) ([network-dave](https://github.com/network-dave)) +- New Template: cisco\_nxos\_show\_license\_usage [\#759](https://github.com/networktocode/ntc-templates/pull/759) ([network-dave](https://github.com/network-dave)) +- New Template: cisco\_nxos\_show\_interface\_description [\#758](https://github.com/networktocode/ntc-templates/pull/758) ([network-dave](https://github.com/network-dave)) +- Fixes \#716 [\#753](https://github.com/networktocode/ntc-templates/pull/753) ([itdependsnetworks](https://github.com/itdependsnetworks)) + diff --git a/docs/admin/release_notes/version_1.7.md b/docs/admin/release_notes/version_1.7.md new file mode 100644 index 0000000000..c0ec39a47a --- /dev/null +++ b/docs/admin/release_notes/version_1.7.md @@ -0,0 +1,81 @@ +## [v1.7.0](https://github.com/networktocode/ntc-templates/tree/v1.7.0) (2021-03-12) + +[Full Changelog](https://github.com/networktocode/ntc-templates/compare/v1.6.0...v1.7.0) + +**Implemented enhancements:** + +- Potential naming inconsistencies between ntc-templates and netmiko for fortinet devices [\#534](https://github.com/networktocode/ntc-templates/issues/534) + +**Closed issues:** + +- arista\_eos\_show\_interfaces incomplete [\#887](https://github.com/networktocode/ntc-templates/issues/887) +- cisco\_wlc\_ssh\_show\_wlan\_sum update - make PMIP\_MOBILITY optional [\#871](https://github.com/networktocode/ntc-templates/issues/871) +- cisco\_nxos\_show\_ip\_route errors out on Route Not Found [\#869](https://github.com/networktocode/ntc-templates/issues/869) +- cisco\_ios\_show\_interfaces\_description.textfsm fails to parse [\#866](https://github.com/networktocode/ntc-templates/issues/866) +- Having trouble with textfsm [\#858](https://github.com/networktocode/ntc-templates/issues/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](https://github.com/networktocode/ntc-templates/issues/851) +- arista\_eos\_show\_interfaces\_status parse failures [\#834](https://github.com/networktocode/ntc-templates/issues/834) +- cisco\_ios\_show\_mac-address-table support for pvlans [\#830](https://github.com/networktocode/ntc-templates/issues/830) +- Don’t work when parse output of “show fc zone” for Dell s5000 [\#825](https://github.com/networktocode/ntc-templates/issues/825) +- update nxos show interface to capture discards [\#819](https://github.com/networktocode/ntc-templates/issues/819) +- change key names to match ios template [\#816](https://github.com/networktocode/ntc-templates/issues/816) +- cisco\_nxos\_show\_environment return an empty list [\#790](https://github.com/networktocode/ntc-templates/issues/790) +- cisco show sip-ua register status [\#787](https://github.com/networktocode/ntc-templates/issues/787) +- Issue with cisco\_ios\_show\_vrf.textfsm template [\#786](https://github.com/networktocode/ntc-templates/issues/786) +- version of OS can differ o/p, how to handle such cases [\#782](https://github.com/networktocode/ntc-templates/issues/782) +- NXSOS SHOW\_INVENTORY ALL [\#778](https://github.com/networktocode/ntc-templates/issues/778) +- ISSUE with show bgp neighboor template IOS XR [\#746](https://github.com/networktocode/ntc-templates/issues/746) + +**Merged pull requests:** + +- New Template: ruckus\_fastiron, show interfaces brief [\#895](https://github.com/networktocode/ntc-templates/pull/895) ([QuasarKid](https://github.com/QuasarKid)) +- Release v1.7.0 [\#889](https://github.com/networktocode/ntc-templates/pull/889) ([jmcgill298](https://github.com/jmcgill298)) +- new alcatel\_sros tmpl, 'show service sdp' [\#886](https://github.com/networktocode/ntc-templates/pull/886) ([h4ndzdatm0ld](https://github.com/h4ndzdatm0ld)) +- New Template: alcatel\_sros\_show\_router\_rsvp\_interface [\#884](https://github.com/networktocode/ntc-templates/pull/884) ([h4ndzdatm0ld](https://github.com/h4ndzdatm0ld)) +- \#784-cisco\_asa\_show\_running-config\_all\_crypto\_map.textfsm [\#883](https://github.com/networktocode/ntc-templates/pull/883) ([diepes](https://github.com/diepes)) +- New template: cisco\_ios\_show\_alert\_counters.textfsm [\#881](https://github.com/networktocode/ntc-templates/pull/881) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- Bugfix: Media type update for cisco\_ios\_show\_interfaces [\#879](https://github.com/networktocode/ntc-templates/pull/879) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- new sros template [\#877](https://github.com/networktocode/ntc-templates/pull/877) ([h4ndzdatm0ld](https://github.com/h4ndzdatm0ld)) +- Fixs \#869 cisco nxos show ip route not found [\#870](https://github.com/networktocode/ntc-templates/pull/870) ([diepes](https://github.com/diepes)) +- Fix readme [\#868](https://github.com/networktocode/ntc-templates/pull/868) ([jeffkala](https://github.com/jeffkala)) +- add test security-policy-match to palo alto [\#867](https://github.com/networktocode/ntc-templates/pull/867) ([jeffkala](https://github.com/jeffkala)) +- New template: yamaha [\#865](https://github.com/networktocode/ntc-templates/pull/865) ([akira6592](https://github.com/akira6592)) +- Add Environment Variable Option for Custom Template Location [\#863](https://github.com/networktocode/ntc-templates/pull/863) ([jeffkala](https://github.com/jeffkala)) +- New Template: hp\_procurve\_show\_port-security [\#862](https://github.com/networktocode/ntc-templates/pull/862) ([adraf82](https://github.com/adraf82)) +- Adding in/out route-map parsing to cisco ios show ip bgp nei template [\#861](https://github.com/networktocode/ntc-templates/pull/861) ([nnaukwal](https://github.com/nnaukwal)) +- Fortinet updates [\#860](https://github.com/networktocode/ntc-templates/pull/860) ([refriedjello](https://github.com/refriedjello)) +- Fixes \#851 and add new template [\#857](https://github.com/networktocode/ntc-templates/pull/857) ([diepes](https://github.com/diepes)) +- New Templates: Cisco IOS show vrrp brief and all [\#856](https://github.com/networktocode/ntc-templates/pull/856) ([mjbear](https://github.com/mjbear)) +- Adding new templates for show \(radius|tacacs\) summary output [\#855](https://github.com/networktocode/ntc-templates/pull/855) ([mjbear](https://github.com/mjbear)) +- New Template: Cisco WLC show port summary and show stats port summary [\#854](https://github.com/networktocode/ntc-templates/pull/854) ([mjbear](https://github.com/mjbear)) +- New Template: Cisco WLC show time \(for time and NTP information\) [\#853](https://github.com/networktocode/ntc-templates/pull/853) ([mjbear](https://github.com/mjbear)) +- New Template - cisco\_ios\_show\_object-group [\#850](https://github.com/networktocode/ntc-templates/pull/850) ([pkomissarov](https://github.com/pkomissarov)) +- cisco\_nxos\_show\_ip\_bgp\_summary\_vrf update to support 32-bits ASN outputs [\#849](https://github.com/networktocode/ntc-templates/pull/849) ([burningnode](https://github.com/burningnode)) +- New Template: Cisco WLC show mobility anchor [\#847](https://github.com/networktocode/ntc-templates/pull/847) ([mjbear](https://github.com/mjbear)) +- New Template: Cisco WLC show redundancy summary and detail [\#846](https://github.com/networktocode/ntc-templates/pull/846) ([mjbear](https://github.com/mjbear)) +- Fixes \#773 CiscoASA-show\_vpn-sessiondb\_SW\_update [\#845](https://github.com/networktocode/ntc-templates/pull/845) ([diepes](https://github.com/diepes)) +- Fixes\#811 arista eos show ip route [\#843](https://github.com/networktocode/ntc-templates/pull/843) ([diepes](https://github.com/diepes)) +- updated template and added test file [\#842](https://github.com/networktocode/ntc-templates/pull/842) ([adraf82](https://github.com/adraf82)) +- Fix\#784 new: cisco asa show running all cryprom map [\#840](https://github.com/networktocode/ntc-templates/pull/840) ([diepes](https://github.com/diepes)) +- Fix\#788 ios show int fc [\#839](https://github.com/networktocode/ntc-templates/pull/839) ([diepes](https://github.com/diepes)) +- Fixes \#790 - new template cisco\_nxos\_show\_environment.textfsm [\#838](https://github.com/networktocode/ntc-templates/pull/838) ([diepes](https://github.com/diepes)) +- Add codeowners file [\#837](https://github.com/networktocode/ntc-templates/pull/837) ([jmcgill298](https://github.com/jmcgill298)) +- Enhancment: EOS show int status - account for LAG members [\#835](https://github.com/networktocode/ntc-templates/pull/835) ([jmcgill298](https://github.com/jmcgill298)) +- update Cisco IOS show tacacs template to support parsing of server name in newer configurations [\#833](https://github.com/networktocode/ntc-templates/pull/833) ([anirudhkamath](https://github.com/anirudhkamath)) +- added fortinet get system arp [\#832](https://github.com/networktocode/ntc-templates/pull/832) ([wmclendon](https://github.com/wmclendon)) +- Enhancement: Change fortinet\_fortios to fortinet per Netmiko [\#831](https://github.com/networktocode/ntc-templates/pull/831) ([jmcgill298](https://github.com/jmcgill298)) +- New Template: hp\_procurve\_show\_interfaces\_brief.textfsm [\#829](https://github.com/networktocode/ntc-templates/pull/829) ([adraf82](https://github.com/adraf82)) +- New template: Vyatta/VyOS BGP summary [\#828](https://github.com/networktocode/ntc-templates/pull/828) ([jpbede](https://github.com/jpbede)) +- New template: dell\_powerconnect [\#827](https://github.com/networktocode/ntc-templates/pull/827) ([nidebr](https://github.com/nidebr)) +- Some sros commands [\#824](https://github.com/networktocode/ntc-templates/pull/824) ([kvlangenhove](https://github.com/kvlangenhove)) +- updated hp\_procurve\_show\_interfaces template for backward compatibility [\#823](https://github.com/networktocode/ntc-templates/pull/823) ([adraf82](https://github.com/adraf82)) +- New template: arista\_eos\_show\_interfaces\_description [\#822](https://github.com/networktocode/ntc-templates/pull/822) ([rich-day](https://github.com/rich-day)) +- Bugfix: issues with cisco\_nxos\_show\_ip\_dhcp\_relay\_address [\#821](https://github.com/networktocode/ntc-templates/pull/821) ([wvandeun](https://github.com/wvandeun)) +- Bugfix: URL ACL property in cisco\_wlc\_ssh\_show\_interface\_detailed [\#820](https://github.com/networktocode/ntc-templates/pull/820) ([wvandeun](https://github.com/wvandeun)) +- Bugfix: added 'Autostate exclude' to avoid error [\#818](https://github.com/networktocode/ntc-templates/pull/818) ([abaretta](https://github.com/abaretta)) +- fix unconfigured DHCP issue in cisco\_wlc\_ssh\_show\_interface\_detailed [\#817](https://github.com/networktocode/ntc-templates/pull/817) ([wvandeun](https://github.com/wvandeun)) +- cisco\_nxos show version - extract serial from "Processor board ID" [\#813](https://github.com/networktocode/ntc-templates/pull/813) ([diepes](https://github.com/diepes)) +- Bugfix: cisco ios show ip access-list [\#809](https://github.com/networktocode/ntc-templates/pull/809) ([jpobeda](https://github.com/jpobeda)) +- Bugfix: IOS show lldp neig - fix neighbor name with spaces [\#799](https://github.com/networktocode/ntc-templates/pull/799) ([realvitya](https://github.com/realvitya)) + + diff --git a/docs/admin/release_notes/version_2.0.md b/docs/admin/release_notes/version_2.0.md new file mode 100644 index 0000000000..7ff12afbf0 --- /dev/null +++ b/docs/admin/release_notes/version_2.0.md @@ -0,0 +1,11 @@ +## [v2.0.0](https://github.com/networktocode/ntc-templates/tree/v2.0.0) (2021-03-12) + +[Full Changelog](https://github.com/networktocode/ntc-templates/compare/v1.7.0...v2.0.0) + +**Merged pull requests:** + +- Release v2.0.0 [\#890](https://github.com/networktocode/ntc-templates/pull/890) ([jmcgill298](https://github.com/jmcgill298)) +- Migrate packaging to use poetry [\#882](https://github.com/networktocode/ntc-templates/pull/882) ([jmcgill298](https://github.com/jmcgill298)) +- Add Dell Force 10 show ip interface brief [\#875](https://github.com/networktocode/ntc-templates/pull/875) ([soer7022](https://github.com/soer7022)) +- cisco\_wlc\_ssh\_show\_wlan\_sum update - make PMIP\_MOBILITY optional [\#872](https://github.com/networktocode/ntc-templates/pull/872) ([progala](https://github.com/progala)) + diff --git a/docs/admin/release_notes/version_2.1.md b/docs/admin/release_notes/version_2.1.md new file mode 100644 index 0000000000..0c19f5ee72 --- /dev/null +++ b/docs/admin/release_notes/version_2.1.md @@ -0,0 +1,42 @@ +## [2.1.0](https://github.com/networktocode/ntc-templates/tree/2.1.0) (2021-06-24) + +[Full Changelog](https://github.com/networktocode/ntc-templates/compare/v2.0.0...2.1.0) + +**Implemented enhancements:** + +- Move to Poetry for dependency and publishing [\#729](https://github.com/networktocode/ntc-templates/issues/729) + +**Closed issues:** + +- cisco\_nxos\_show\_cdp\_neighbors\_detail 'str' object has no attribute 'seek'. [\#936](https://github.com/networktocode/ntc-templates/issues/936) +- show int status returns error \(seems template error\) for particular switch for other switches it does work \(iOS\). [\#922](https://github.com/networktocode/ntc-templates/issues/922) +- IPinfusuion OCNOS support request [\#913](https://github.com/networktocode/ntc-templates/issues/913) +- cisco\_ios\_show\_interfaces\_status.textfsm \(no interface in monitoring state\) [\#878](https://github.com/networktocode/ntc-templates/issues/878) +- Arista\_eos: show ip bgp summary Error [\#844](https://github.com/networktocode/ntc-templates/issues/844) +- arista\_eos\_show\_ip\_route parse exception [\#811](https://github.com/networktocode/ntc-templates/issues/811) +- cisco nxos show interface status issue when FC ports are present [\#788](https://github.com/networktocode/ntc-templates/issues/788) +- cisco\_asa\_show\_running\_cryprom\_map does not parse crypto maps without "set security association lifetime" [\#784](https://github.com/networktocode/ntc-templates/issues/784) +- Cisco ASA show vpn-sessiondb invalid and not returning data after ASA SW update [\#773](https://github.com/networktocode/ntc-templates/issues/773) +- cannot import name 'clitable' from 'textfsm' [\#731](https://github.com/networktocode/ntc-templates/issues/731) + +**Merged pull requests:** + +- Adding Restarted to show version template for cisco ios [\#940](https://github.com/networktocode/ntc-templates/pull/940) ([ksrattani](https://github.com/ksrattani)) +- cisco\_nxos add f-path vlan type [\#937](https://github.com/networktocode/ntc-templates/pull/937) ([JargeZ](https://github.com/JargeZ)) +- Fix issue \#929 [\#934](https://github.com/networktocode/ntc-templates/pull/934) ([matt852](https://github.com/matt852)) +- New Template: Alcatel, sh router ospf int [\#931](https://github.com/networktocode/ntc-templates/pull/931) ([h4ndzdatm0ld](https://github.com/h4ndzdatm0ld)) +- New Template: SROS "show system cpu" [\#930](https://github.com/networktocode/ntc-templates/pull/930) ([h4ndzdatm0ld](https://github.com/h4ndzdatm0ld)) +- Adds monitoring port for show interfaces status [\#928](https://github.com/networktocode/ntc-templates/pull/928) ([jvanderaa](https://github.com/jvanderaa)) +- New Template: All BGP VPNv4 Neighbors [\#911](https://github.com/networktocode/ntc-templates/pull/911) ([markh0338](https://github.com/markh0338)) +- Added Known Issues section to document Micah's finding/issue [\#902](https://github.com/networktocode/ntc-templates/pull/902) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- Added deploy option to auto deploy on tags [\#901](https://github.com/networktocode/ntc-templates/pull/901) ([FragmentedPacket](https://github.com/FragmentedPacket)) +- sros, new template - sh router interface, -vrf \# optional [\#898](https://github.com/networktocode/ntc-templates/pull/898) ([h4ndzdatm0ld](https://github.com/h4ndzdatm0ld)) +- Add end of line for matching empty lines [\#897](https://github.com/networktocode/ntc-templates/pull/897) ([jmcgill298](https://github.com/jmcgill298)) +- New Template: ruckus\_fastiron, show mac-address [\#896](https://github.com/networktocode/ntc-templates/pull/896) ([QuasarKid](https://github.com/QuasarKid)) +- New Template: ruckus\_fastiron, show version [\#894](https://github.com/networktocode/ntc-templates/pull/894) ([QuasarKid](https://github.com/QuasarKid)) +- New Template: alcatel\_sros, sh router mpls lsp [\#893](https://github.com/networktocode/ntc-templates/pull/893) ([h4ndzdatm0ld](https://github.com/h4ndzdatm0ld)) +- New Template: alcatel\_sros, sap-using [\#892](https://github.com/networktocode/ntc-templates/pull/892) ([h4ndzdatm0ld](https://github.com/h4ndzdatm0ld)) +- New Template: alcatel\_sros, sdp-using [\#891](https://github.com/networktocode/ntc-templates/pull/891) ([h4ndzdatm0ld](https://github.com/h4ndzdatm0ld)) +- add new template show port-security interface [\#885](https://github.com/networktocode/ntc-templates/pull/885) ([jeffkala](https://github.com/jeffkala)) +- Bugfix: Type for cisco\_nxos\_show\_interface\_status [\#880](https://github.com/networktocode/ntc-templates/pull/880) ([FragmentedPacket](https://github.com/FragmentedPacket)) + diff --git a/docs/admin/release_notes/version_2.2.md b/docs/admin/release_notes/version_2.2.md new file mode 100644 index 0000000000..dfcf953293 --- /dev/null +++ b/docs/admin/release_notes/version_2.2.md @@ -0,0 +1,34 @@ +## [2.2.2](https://github.com/networktocode/ntc-templates/tree/2.1.0) (2021-08-02) + +[Full Changelog](https://github.com/networktocode/ntc-templates/compare/v2.2.0...2.2.2) + +**Closed issues:** + +- cisco\_ios\_show\_ip\_access-lists template needs updated to include additional ICMP_TYPE options [\#964](https://github.com/networktocode/ntc-templates/issues/964) +- cisco\_ios\_show\_version template needs updated to account for StackWise Virtual Domains [\#924](https://github.com/networktocode/ntc-templates/issues/924) + +**Merged pull requests:** + +- cisco\_ios\_show\_ip\_access-lists.textfsm: Updated to include mask-request in template. [\#965](https://github.com/networktocode/ntc-templates/pull/944) ([nsnelson402](https://github.com/nsnelson402)) +- cisco\_ios\_show\_version.textfsm: Updated to account for StackWise Virtual Domains template. [\#960](https://github.com/networktocode/ntc-templates/pull/960) ([itdependsnetworks](https://github.com/itdependsnetworks)) + + + +## [2.2.0](https://github.com/networktocode/ntc-templates/tree/2.1.0) (2021-08-02) + +[Full Changelog](https://github.com/networktocode/ntc-templates/compare/v2.1.0...2.2.0) + +**Closed issues:** + +- cisco\_ios\_show\_ip\_access-lists template needs updated to include precedence and tos in *_PORT_MATCH [\#954](https://github.com/networktocode/ntc-templates/issues/954) +- cisco\_nxos\_show\_interface\_transceiver transceiver template failure [\#952](https://github.com/networktocode/ntc-templates/issues/952) + +**Merged pull requests:** + +- cisco_ios_show_version: Cisco IOS uptime parsing more granular (days, hours, etc.) [\#944](https://github.com/networktocode/ntc-templates/pull/944) ([joewesch](https://github.com/joewesch)) +- New Template: cisco_ios_show_crypto_session_details [\#947](https://github.com/networktocode/ntc-templates/pull/947) ([h4ndzdatm0ld](https://github.com/h4ndzdatm0ld)) +- cisco_ios_show_vrf.texfsm: Parse a vrf with no interfaces [\#918](https://github.com/networktocode/ntc-templates/pull/918) ([dpnetca](https://github.com/dpnetca)) +- cisco_ios_show_interfaces_switchport: Modified Trunk state to handle multiline trunking lists [\#907](https://github.com/networktocode/ntc-templates/pull/907) ([mickyhale](https://github.com/mickyhale)) +- Fix nxos_show_interface_transceiver failure [\#953](https://github.com/networktocode/ntc-templates/pull/953) ([chipn](https://github.com/chipn)) +- Updated cisco_ios_show_ip_access-lists.textfsm to include the SRC_PORT_MATCH and DST_PORT_MATCH values for precedence and tos [\#955](https://github.com/networktocode/ntc-templates/pull/955) ([nsnelson402](https://github.com/nsnelson402)) + diff --git a/docs/admin/release_notes/version_2.3.md b/docs/admin/release_notes/version_2.3.md new file mode 100644 index 0000000000..5463348450 --- /dev/null +++ b/docs/admin/release_notes/version_2.3.md @@ -0,0 +1,49 @@ +## [2.3.2](https://github.com/networktocode/ntc-templates/tree/2.3.2) (2021-09-13) + +[Full Changelog](https://github.com/networktocode/ntc-templates/compare/v2.3.1...2.3.2) + +**Bugfixes** + +- cisco\_ios\_show\_ip\_bgp\_summary Account for dotted ASN notation [\#987](https://github.com/networktocode/ntc-templates/pull/987) ([thomasbridge74](https://github.com/thomasbridge74)) +- cisco\_nxos\_show\_interface\_status Account for blank type [\#980](https://github.com/networktocode/ntc-templates/pull/980) ([Kani999](https://github.com/Kani999)) +- cisco\_ios\_show\_interfaces Account for `App Interface` [\#968](https://github.com/networktocode/ntc-templates/pull/968) ([a-finocchiaro](https://github.com/a-finocchiaro)) + +## [2.3.1](https://github.com/networktocode/ntc-templates/tree/2.3.1) (2021-08-30) + +[Full Changelog](https://github.com/networktocode/ntc-templates/compare/v2.3.0...2.3.1) + +**Closed issues:** + +- cisco\_ios\_show\_ip\_access-lists Account for singluar match [\#972](https://github.com/networktocode/ntc-templates/issues/972) ([mitchell-foxworth](https://github.com/mitchell-foxworth)) + +**Merged pull requests:** + +- ntc_templates/templates/cisco_ios_show_ip_access-lists.textfsm [\#973](https://github.com/networktocode/ntc-templates/pull/973) ([mitchell-foxworth](https://github.com/mitchell-foxworth)) + +## [2.3.0](https://github.com/networktocode/ntc-templates/tree/2.3.0) (2021-08-27) + +[Full Changelog](https://github.com/networktocode/ntc-templates/compare/v2.2.2...2.3.0) + +**Closed issues:** + +- cisco\_ios\_show\_ip\_access-lists template needs updated to include LOG_TYPE options [\#969](https://github.com/networktocode/ntc-templates/issues/969) ([joewesch](https://github.com/joewesch)) + +**Merged pull requests:** + +- ntc_templates/templates/aruba_aoscx_show_aaa_authentication_port-access_interface_all_client-status.textfsm [\#927](https://github.com/networktocode/ntc-templates/pull/927) ([scetron](https://github.com/scetron)) + +**New Templates:** + +- aruba_aoscx_show_aaa_authentication_port-access_interface_all_client-status.textfsm +- aruba_aoscx_show_arp_all-vrfs.textfsm +- aruba_aoscx_show_bfd_all-vrfs.textfsm +- aruba_aoscx_show_bgp_all-vrfs_all_summary.textfsm +- aruba_aoscx_show_bgp_all_all-vrfs_summary.textfsm +- aruba_aoscx_show_interface.textfsm +- aruba_aoscx_show_interface_dom_detail.textfsm +- aruba_aoscx_show_ip_route_all-vrfs.textfsm +- aruba_aoscx_show_lldp_neighbors-info_detail.textfsm +- aruba_aoscx_show_mac-address-table.textfsm +- aruba_aoscx_show_ntp_associations.textfsm +- aruba_aoscx_show_vsf_detail.textfsm + diff --git a/docs/admin/release_notes/version_3.0.md b/docs/admin/release_notes/version_3.0.md new file mode 100644 index 0000000000..a993360511 --- /dev/null +++ b/docs/admin/release_notes/version_3.0.md @@ -0,0 +1,34 @@ +## [3.0.0](https://github.com/networktocode/ntc-templates/tree/3.0.0) (2021-10-28) + +[Full Changlog](https://github.com/networktocode/ntc-templates/compare/v2.3.2...3.0.0) + +### Breaking Changes + +- Template `cisco_ios_show_mac-address-table` has `DESTINATION_PORT` as a list of ports now instead of a single string entry (#994) + +### What's Changed +* cisco_ios_show_access-session: Adding Identity to MAC column by @ahlara-devcore in [#990](https://github.com/networktocode/ntc-templates/pull/990) +* [New Template] Ciena - traffic-profile standard-profile by @georgesnow in [#981](https://github.com/networktocode/ntc-templates/pull/981) +* New template: cisco_nxos_show_ip_interface_vrf_all.textfsm by @AJatCDW in [#978](https://github.com/networktocode/ntc-templates/pull/978) +* New template: juniper_junos_show_system_uptime.textfsm by @antonalekseev in [#975](https://github.com/networktocode/ntc-templates/pull/975) +* Template Change: cisco_ios, show archive by @QuasarKid in [#905](https://github.com/networktocode/ntc-templates/pull/905) +* Bugfix: change date format in hp_comware_display_clock.textfsm by @antonalekseev in [#977](https://github.com/networktocode/ntc-templates/pull/977) +* update arista interface template + raw by @scetron in [#963](https://github.com/networktocode/ntc-templates/pull/963) +* New Template: cisco_ios_show_dhcp_lease by @lamiskin in [#991](https://github.com/networktocode/ntc-templates/pull/991) +* Fix ios_mac-addr type2 by @armartirosyan in [#994](https://github.com/networktocode/ntc-templates/pull/994) +* fix parsing with int addresses = 0 by @dainok in [#982](https://github.com/networktocode/ntc-templates/pull/982) +* New template for huawei VRP + fix. by @ak-empiak in [#998](https://github.com/networktocode/ntc-templates/pull/998) +* added VLAN value and search pattern by @dm-bell-networking in [#1002](https://github.com/networktocode/ntc-templates/pull/1002) +* Ciso IOS show mac and show module fix by @armartirosyan in [#1006](https://github.com/networktocode/ntc-templates/pull/1006) +* Junos show chassis by @georgesnow in [#997](https://github.com/networktocode/ntc-templates/pull/997) + +### New Contributors +* @ahlara-devcore made their first contribution in [#990](https://github.com/networktocode/ntc-templates/pull/990) +* @AJatCDW made their first contribution in [#978](https://github.com/networktocode/ntc-templates/pull/978) +* @antonalekseev made their first contribution in [#975](https://github.com/networktocode/ntc-templates/pull/975) +* @lamiskin made their first contribution in [#991](https://github.com/networktocode/ntc-templates/pull/991) +* @armartirosyan made their first contribution in [#994](https://github.com/networktocode/ntc-templates/pull/994) +* @ak-empiak made their first contribution in [#998](https://github.com/networktocode/ntc-templates/pull/998) +* @dm-bell-networking made their first contribution in [#1002](https://github.com/networktocode/ntc-templates/pull/1002) + +**Full Changelog**: https://github.com/networktocode/ntc-templates/compare/v2.3.2...v3.0.0 diff --git a/docs/admin/release_notes/version_3.1.md b/docs/admin/release_notes/version_3.1.md new file mode 100644 index 0000000000..7454f3fa61 --- /dev/null +++ b/docs/admin/release_notes/version_3.1.md @@ -0,0 +1,59 @@ +## [3.1.0] + +### What's Changed +* New template: cisco_ios_show_ip_eigrp_interfaces_detail.textfsm by @nsnelson402 in [#1181](https://github.com/networktocode/ntc-templates/pull/1181) +* New template: cisco_ios_show_snmp_group.textfsm by @nsnelson402 in [#1183](https://github.com/networktocode/ntc-templates/pull/1183) +* New templates & updates: Updated support for Arista EOS devices by @ReK42 in [#1174](https://github.com/networktocode/ntc-templates/pull/1174) +* New template: cisco_xr_show_ipv4_interface.textfsm by @dainok in [#1162](https://github.com/networktocode/ntc-templates/pull/1162) +* New templates: Add multiple zyxel templates by @elavaud in [#1142](https://github.com/networktocode/ntc-templates/pull/1142) +* Bug fix: Change huawei_vrf shortest command by @Elinpf in [#1141](https://github.com/networktocode/ntc-templates/pull/1141) +* Bug fix: Path separator error on windows by @Elinpf in [#1139](https://github.com/networktocode/ntc-templates/pull/1139) +* New templates: Adding multiple mikrotik routeros templates by @elavaud in [#1136](https://github.com/networktocode/ntc-templates/pull/1136) +* New template: aruba_os_show_ap_database_long.textfsm by @hagleyj in [#1134](https://github.com/networktocode/ntc-templates/pull/1134) +* New template: aruba_os_show_ap_radio-database.textfsm by @hagleyj in [#1133](https://github.com/networktocode/ntc-templates/pull/1133) +* Bug fix: EOS 4.28.XF updated output of codes in `show ip route` by @networkop in [#1127](https://github.com/networktocode/ntc-templates/pull/1127) +* New template: juniper_junos_show_vlans.textfsm by @showipintbri in [#1125](https://github.com/networktocode/ntc-templates/pull/1125) +* Bug fix: cisco_ios show ip bgp neighbors advertised-routes output where metric is wider than 6 chars by @viktorkertesz in [#1124](https://github.com/networktocode/ntc-templates/pull/1124) +* Bug fix: cisco_ios show ip bgp output where metric is wider than 6 chars by @viktorkertesz in [#1123](https://github.com/networktocode/ntc-templates/pull/1123) +* Bug fix: cisco_nxos_show_int_breief do not match mgmt and vlan by @diepes in [#1119](https://github.com/networktocode/ntc-templates/pull/1119) +* Bug fix: cisco_ios_show_module updated output for c9200 @diepes in [#1117](https://github.com/networktocode/ntc-templates/pull/1117) +* Changed: add vlan_id to cisco_ios_show_interfaces by @dainok in [#1115](https://github.com/networktocode/ntc-templates/pull/1115) +* Bug fix: fix not advertised vlan in cisco_nxos_show_lldp_neighbors_detail by @dainok in [#1114](https://github.com/networktocode/ntc-templates/pull/1114) +* Added: Additional fields for cisco_ios_show_ip_access-lists.textfsm by @mjuenema in [#1113](https://github.com/networktocode/ntc-templates/pull/1113) +* Bug fix: Multiple line parsing using lists with textfsm extracting wrong details by @diepes in [#1112](https://github.com/networktocode/ntc-templates/pull/1112) +* Bug fix: Cisco IOS show boot missing parameter by @diepes in [#1111](https://github.com/networktocode/ntc-templates/pull/1111) +* New template: arista_eos_show_processes_top_once.textfsm by @pauljorgenson in [#1110](https://github.com/networktocode/ntc-templates/pull/1110) +* Bug fix: Adding a record without the vlan field for very old HP Procurve switches by @dainok in [#1108](https://github.com/networktocode/ntc-templates/pull/1108) +* New template: cisco_xr_show_install_active.textfsm by @verbosemode in [#1105](https://github.com/networktocode/ntc-templates/pull/1105) +* Changed: Clarifies docs about length order by @jvanderaa in [#1099](https://github.com/networktocode/ntc-templates/pull/1099) +* New template: ubiquiti_edgerouter_show_dhcp_leases.textfsm by @jvanderaa in [#1097](https://github.com/networktocode/ntc-templates/pull/1097) +* Bug fix: hanges the CRLF to LF to pass tests by @jvanderaa in [#1096](https://github.com/networktocode/ntc-templates/pull/1096) +* Changed: Additional fields for cisco_nxos_show_ip_route.textfsm by @lamiskin in [#1093](https://github.com/networktocode/ntc-templates/pull/1093) +* Changed: Additional fields for cisco_nxos_show_ip_interface.textfsm by @lamiskin in [#1092](https://github.com/networktocode/ntc-templates/pull/1092) +* Changed: Additional fields for cisco_ios_show_standby.textfsm by @lamiskin in [#1091](https://github.com/networktocode/ntc-templates/pull/1091) +* Changed: Additional fields for cisco_ios_show_module_status.textfsm by @lamiskin in [#1090](https://github.com/networktocode/ntc-templates/pull/1090) +* Changed: Additional fields for cisco_ios_show_ip_interface.textfsm by @lamiskin in [#1089](https://github.com/networktocode/ntc-templates/pull/1089) +* Changed: Additional fields for cisco_ios_show_interfaces_switchport.textfsm by @lamiskin in [#1088](https://github.com/networktocode/ntc-templates/pull/1088) +* Changed: Additional fields for cisco_ios_show_etherchannel_summary.textfsm by @lamiskin in [#1087](https://github.com/networktocode/ntc-templates/pull/1087) +* Changed: Additional fields for cisco_ios_show_lldp_neighbors_detail.textfsm by @lamiskin in [#1086](https://github.com/networktocode/ntc-templates/pull/1086) +* Changed: Additional fields for cisco_asa_show_interface.textfsm by @lamiskin in [#1084](https://github.com/networktocode/ntc-templates/pull/1084) +* Bug fix: show platform diag does not return the rommon version of the line cards by @network-shark in [#1081](https://github.com/networktocode/ntc-templates/pull/1081) +* New template: zyxel_os_cfg_nat_get.textfsm by @elavaud in [#1073](https://github.com/networktocode/ntc-templates/pull/1073) +* New template: zyxel_os_cfg_ipalias_get.textfsm by @elavaud in [#1068](https://github.com/networktocode/ntc-templates/pull/1068) +* New template: ubiquiti_edgerouter_show_version.textfsm by @elavaud in [#1065](https://github.com/networktocode/ntc-templates/pull/1065) +* New template: ubiquiti_edgerouter_show_interfaces_ethernet_physical.textfsm by @elavaud in [#1064](https://github.com/networktocode/ntc-templates/pull/1064) +* New template: ubiquiti_edgerouter_show_arp.textfsm by @elavaud in [#1062](https://github.com/networktocode/ntc-templates/pull/1062) +* Bug fix: aruba_os_show_ap_database model parsing error by @hagleyj in [#1055](https://github.com/networktocode/ntc-templates/pull/1055) +* Bug fix: cisco_nxos_show_ip_interface parsing error by @diepes in [#1046](https://github.com/networktocode/ntc-templates/pull/1046) +* Bug fix: Update choices for Protocol to include 'notpresent' option on arista_eos_show_interfaces_description by @scetron in [#1044](https://github.com/networktocode/ntc-templates/pull/1044) +* New template: aruba_os_show_ap_database.textfsm by @hagleyj in [#1042](https://github.com/networktocode/ntc-templates/pull/1042) +* Bug fix: cisco_nxos_show_cdp_neighbors_detail update for supporting multiple versions by @Niltak in [#1039](https://github.com/networktocode/ntc-templates/pull/1039) +* Changed: Updated show boot template to include new formatting for Cisco IOS Gibraltar output by @shanecbauman in [#1038](https://github.com/networktocode/ntc-templates/pull/1038) +* Bug fix: cisco_nxos_show_ip_bgp.textfsm not parsing correctly by @diepes in [#1033](https://github.com/networktocode/ntc-templates/pull/1033) +* Added: FTD output example from Cisco support site by @jvanderaa in [#1032](https://github.com/networktocode/ntc-templates/pull/1032) +* New template: cisco_ios_show_ip_nat_translations.textfsm by @ksaegusa in [#1028](https://github.com/networktocode/ntc-templates/pull/1028) +* Bug fix: cisco_ios_show_interfaces_status.textfsm State Error by @ZamElek in [#1023](https://github.com/networktocode/ntc-templates/pull/1023) +* Bug fix: IOS show mac address Type3 and Type4. Additional test files by @armartirosyan in [#1019](https://github.com/networktocode/ntc-templates/pull/1019) +* New template: cisco_asa_show_cpu_usage_detailed.textfsm by @yone2ks in [#1014](https://github.com/networktocode/ntc-templates/pull/1014) +* Bug fix: cisco_ios_show_ip_eigrp_topology not parsing correctly by @diepes in [#1013](https://github.com/networktocode/ntc-templates/pull/1013) + diff --git a/docs/admin/release_notes/version_3.2.md b/docs/admin/release_notes/version_3.2.md new file mode 100644 index 0000000000..513a334aff --- /dev/null +++ b/docs/admin/release_notes/version_3.2.md @@ -0,0 +1,6 @@ +## [unreleased] + +### What's Changed +* New template: cisco_ios_show_crypto_ipsec_sa_detail.textfsm by @nsnelson402 +* New template: cisco_ios_show_crypto_pki_certificates.textfsm by @nsnelson402 + diff --git a/docs/admin/uninstall.md b/docs/admin/uninstall.md new file mode 100644 index 0000000000..519842cafb --- /dev/null +++ b/docs/admin/uninstall.md @@ -0,0 +1,7 @@ +# Uninstall + +Uninstall from environment. + +```bash +$ pip uninstall ntc-templates +``` \ No newline at end of file diff --git a/docs/admin/upgrade.md b/docs/admin/upgrade.md new file mode 100644 index 0000000000..98ed99fc7c --- /dev/null +++ b/docs/admin/upgrade.md @@ -0,0 +1,7 @@ +# Upgrading the Library + +Upgrade from PyPI. + +```bash +$ pip install ntc-templates --upgrade +``` \ No newline at end of file diff --git a/docs/assets/extra.css b/docs/assets/extra.css new file mode 100644 index 0000000000..50884f4a39 --- /dev/null +++ b/docs/assets/extra.css @@ -0,0 +1,152 @@ +:root>* { + --md-accent-fg-color: #ff8504; + --md-primary-fg-color: #ff8504; + --md-typeset-a-color: #0097ff; +} + +[data-md-color-scheme="slate"] { + --md-default-bg-color: hsla(var(--md-hue), 0%, 15%, 1); + --md-typeset-a-color: #0097ff; +} + +/* Accessibility: Increase fonts for dark theme */ +[data-md-color-scheme="slate"] .md-typeset { + font-size: 0.9rem; +} + +[data-md-color-scheme="slate"] .md-typeset table:not([class]) { + font-size: 0.7rem; +} + +.md-tabs__link { + font-size: 0.8rem; +} + +.md-tabs__link--active { + color: var(--md-primary-fg-color); +} + +.md-header__button.md-logo :is(img, svg) { + height: 2rem; +} + +.md-header__button.md-logo :-webkit-any(img, svg) { + height: 2rem; +} + +.md-header__title { + font-size: 1.2rem; +} + +img.logo { + height: 100px; +} + +img.copyright-logo { + height: 24px; + vertical-align: middle; +} + +[data-md-color-primary=black] .md-header { + background-color: #212121; +} + +@media screen and (min-width: 76.25em) { + [data-md-color-primary=black] .md-tabs { + background-color: #212121; + } +} + +/* Customization for mkdocstrings */ +/* Indentation. */ +div.doc-contents:not(.first) { + padding-left: 25px; + border-left: .2rem solid var(--md-typeset-table-color); +} + +/* Mark external links as such. */ +a.autorefs-external::after { + /* https://primer.style/octicons/arrow-up-right-24 */ + background-image: url('data:image/svg+xml,'); + content: ' '; + + display: inline-block; + position: relative; + top: 0.1em; + margin-left: 0.2em; + margin-right: 0.1em; + + height: 1em; + width: 1em; + border-radius: 100%; + background-color: var(--md-typeset-a-color); +} + +a.autorefs-external:hover::after { + background-color: var(--md-accent-fg-color); +} + + +/* Customization for mkdocs-version-annotations */ +:root { + /* Icon for "version-added" admonition: Material Design Icons "plus-box-outline" */ + --md-admonition-icon--version-added: url('data:image/svg+xml;charset=utf-8,'); + /* Icon for "version-changed" admonition: Material Design Icons "delta" */ + --md-admonition-icon--version-changed: url('data:image/svg+xml;charset=utf-8,'); + /* Icon for "version-removed" admonition: Material Design Icons "minus-circle-outline" */ + --md-admonition-icon--version-removed: url('data:image/svg+xml;charset=utf-8,'); +} + +/* "version-added" admonition in green */ +.md-typeset .admonition.version-added, +.md-typeset details.version-added { + border-color: rgb(0, 200, 83); +} + +.md-typeset .version-added>.admonition-title, +.md-typeset .version-added>summary { + background-color: rgba(0, 200, 83, .1); +} + +.md-typeset .version-added>.admonition-title::before, +.md-typeset .version-added>summary::before { + background-color: rgb(0, 200, 83); + -webkit-mask-image: var(--md-admonition-icon--version-added); + mask-image: var(--md-admonition-icon--version-added); +} + +/* "version-changed" admonition in orange */ +.md-typeset .admonition.version-changed, +.md-typeset details.version-changed { + border-color: rgb(255, 145, 0); +} + +.md-typeset .version-changed>.admonition-title, +.md-typeset .version-changed>summary { + background-color: rgba(255, 145, 0, .1); +} + +.md-typeset .version-changed>.admonition-title::before, +.md-typeset .version-changed>summary::before { + background-color: rgb(255, 145, 0); + -webkit-mask-image: var(--md-admonition-icon--version-changed); + mask-image: var(--md-admonition-icon--version-changed); +} + +/* "version-removed" admonition in red */ +.md-typeset .admonition.version-removed, +.md-typeset details.version-removed { + border-color: rgb(255, 82, 82); +} + +.md-typeset .version-removed>.admonition-title, +.md-typeset .version-removed>summary { + background-color: rgba(255, 82, 82, .1); +} + +.md-typeset .version-removed>.admonition-title::before, +.md-typeset .version-removed>summary::before { + background-color: rgb(255, 82, 82); + -webkit-mask-image: var(--md-admonition-icon--version-removed); + mask-image: var(--md-admonition-icon--version-removed); +} diff --git a/docs/assets/favicon.ico b/docs/assets/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..9685c83bff4f67163334bbbf165b3bbccbf87c7e GIT binary patch literal 568 zcmV-80>}M{P) zO^8lW9LMp`nVu}BNz$ZQSw?=?76!WD zc9eyoZvWqd{diXvM$1A^2X-6YmWA_WVMPaS2rtUQR9RTLoPm&B@5W7h$C(hls)NhI z2HeIPoDI>F47V0j*p5qh5TajM11YG5Q@D&dTnf>bn#bWt`oTQTh3I|8$j+45VoK~~ z)<9cOKPGViS1=o*pEX=>%I-8~F&UzT8m@(tDY3^G57FnWfwsV5Rk>HH%KbFM4dMp2 zVhj&MtmXP~4To?QGa>q!HIRZ}6xZ<_VF0y1HZbmjS%S#Bv}$VN34nwdp(dJV4} literal 0 HcmV?d00001 diff --git a/docs/assets/networktocode_bw.png b/docs/assets/networktocode_bw.png new file mode 100644 index 0000000000000000000000000000000000000000..075c4926d570b9db02c8808f34f40c8eb5f18a90 GIT binary patch literal 7562 zcmeHsMNk|L^W{K-LvV)xKip-IAFdNz1}C@-P9V7Z0E5fm3^KSo1Sb$6xFonHKyW8G zVe@^pmp$#?_uq%^cX(aZ^{ToLuVGpmig?&m*Z=?kPgzMp8vsCs|HU?#ul{Cy8Z9XR z;1xhiO&9d?Kk+{b{C})KACHpd-<5dr)Yi}eprF2bjfReaiG_`Wi}wbffRKoogp`b& zf|81whW0HTJ;OhYOw25-Z0sDIT--doeEb4HK_Ow0e?`T_B_yS!Wn|^#6+rJ4m6TOf z)zmdKwZPgsx_bHshDPs=O-#+qEiA39Z6LOG_709t&MqHZ-9EZ|czSvJ`1<(=1O^3% zgocGjL_(vYV_>my@d=4Z$tkI6@brw#tn8fJJVbs$VG**pq_nKOqOz*GrnauWp|PpC zrM0d7Q%7f4cTaC$|L1|hFGIs4Uq{ErCnl$+XJ+TVeV<=gTv}dPU0dJS-1_lzduR98 z-u}Vi(ecUY+4;rg)%EY2+q?UR$EW8%N0`e(005j@qJP$F(_FzKVacVI##9L{u4z-e^XnDb_!^C=7FtXvePL}*N> z?qf|8dFoMRYjG7bJ$ip87LQlUoM#lriH4-?>|b&a2zq$(@A1AB@9f5Y?JC}xbwv*Q z4?m0ml1PA@z=>q@h$MiR(JN##MzUR@GK|qMC}fjkf`4H$jCISz2q^xAXmW5-xflW7 zzkEVDxL+6nb4Q>CwYRq2Wa@ugDSu!Y+%@po$B0*9f_ni_Ty%NDJ!hsTgP2Rv=Uc%{ zzvic+8Ez>zk$!u@Rsu-f0Y&i5_evcRTRX;sJ{dTxn6Seva_ETIBUAh}y%zP#>n(h) z|L~Sw0>dAhQob`F)ndEdp6gj}#BxWeyZ!0}Ui45^SnVSQQF5$CuZr0a0lf$N#ukEx zeL;^m7&ZaIskY{D^4qZjvon(rGhy6nL zB)NW)hej#61(WQur5cUT-dg->2m(=JHHe7})v;7y%FMpe5k6Vza97arzwa!M;pFna zxJo_kAl|hDM4V?m0Hp2Z|IQtq+LDvlivjc|+vR@c{8hcNngUbHv9tUB^99N^didBt zEV-2H2aw+;@fOir(%3pFjYwOa=im8|boQQWRsBc7sZ?#L7}p09t{ zgrqCB*YjVbK;Ln#+T)LgOVG5cJLeb_!0m}7Qhi0U7$wKT;4%JlI@P-qzdKA3k7?%+ zql0IRTs~%wN*C4iQ(>g-^;;U2u?a_gVNA+bGpfW{n9dKZoxBfRMj|^0Yea^+)ES~R zQ#d4cr-aCs0U?8moB@pC08uTtIEuvC5$Nq}x1K=^7P$ig+bZcl6$@Q<-nJBiGVa|o$berV3g0TE@(lZ+>B=J(% z%4N!yj5~WYf(~yfgsU`<1Rk(d1P??#ueW&qK+pF-Ot@RIaXs0{Bt}y?{j(cZz3m!FkoX}04Y0Eu{v4JJ09llL;lSnR;0j-Ty!Mq`o3UZR2qWz z{Psy0#*(IWP;W>b{7IB0)v{)??~#yf{*okN?EOA;sFKaPJ4fXEQ^K>lvh9l&suH&X|L*Tm+_fMEMlV{0X-9{_;s`iVLpnD*I8Fi^EiHwKPtJ<;!|u6beayG z+CJDc1(E(0fy&nGllpXu_mTHn6tX`B56pspUaR-0C(T-+RoC!)noewC<89$aZS(-YbdOXXK2`LRXSH4G%?F$qKA8@2sod+e?q*!lRXF6TuJ3b!$&a%r2eTR{okAZ19{;2QzWCRfD|B0LuMC8P#!&6FnW7FY!D3qx$3e@#8S!$JH zylB}IfCYg@^Ne=|8BR!GBtc`b(U=``{gbAQqs}+%-wJGO%tZQECUCP^4@`3U>@`cF zAa8Opz?}m7&xk^}?S6tR^`sn-E;}i|26-}z$ulbU{&70BKIDnJ41toz_M+-k19iCk zA?5G$CvO`>L@Tb=;LX`m)J41a` zDTB*sR^C2iNQ_3sf2OK1j)N&#Sh@R0rL=NwO$cQHYso9J-tauFw>%}FDu3pu;?n2| z{=7Ae1=;|CuOwS-r>k?ZzHw|vCJZ|m3d!-#_?|y;&ui27ul)gzdyNDS0&MT^P?kNm zmu0(@?cgYl*Pz@Q75C)cQ1Wz?7TWATDevLm4n%ZTJ?xQDjs@c$EpM<}y?I;A4f)k+ zOY&`No?p0}(|9jU;xz3{*Na_J*eJfDn}sYp4ra@nu85B%&qr3UGzRG?IWqDr(r@2t zTdgzc?qlC$mRhUpOzK&9GloSdw7>?KORGfkV(E$ z;~13PbC7rAB!I~?OQ8|cKKJ}%DLPqI8WM@|R?9jnAx4GU^9gMmP-gGsbT4IZPK5dJi_ zg9>0rS}=z=tchJ$^;?uMU{mdC@6F8g4Jh%|#C+7L!O9|WPcr!FWPk(w0mZOda?;wh zRgoabZY!&`3#$|>7>vPSCf9pp_yvEdr2R;@Y>9Kd0b?_T8}}g~6(ueWlj&gXyjTfd z)xDR-y0q0-zJpuUAH|kSY<0*ai1Z=Zc6^e^{bF2q8kn62awmgXPt9;-v9(I7<3x|% zwiGRCeD$kA*=c5a{i#XA!d4~43@d^-dIMo(JwnQ21Zl!Bc+^-ifaDdyOVoS^9 z;fwM^47KhTLio0Zl3(uqk#$bA2Lx#n2s0X36~ps~1)r>=tP$NCssaT?N?Z;VSFadj zCag9ZQ3PwiY<&AD>U<*}I73Z%+`jH&S@{_Jrs|MLKs%Rki!=4INz8_8l)`cMy)Jxp zt8_au^60LGqA`hWFEq2QgK5W4NHrIM$PuXJiXR+s$b9U+_fYh-J#Wy4->UMzipucy z(ej^e{_~9G)IR9{AYC2d`NTdl^z9SoclBb@BS6XIKyYo%FBb2yTCWQaZLoW@-v_V? zxEC&4M(X|TXH!`ACdpFHqtw?x09zC%lSFJyrc{7JigE@?(CF1-Ltd>>z1ol=(VpYU z`{>cC_ZM?+gH$(!5ORd*4*0zD-Wp@y<%+5tFe60X$kQ-!&EJ~y1XlLeh`UXl12>e$bFcE$^v?i+^T(EXA-r%e? zE8(m4haR#hQw3!VGJ8D540*KXj}1W2X1|0ErMRSI&Pn8-0fk8@8d;K$ZJx;+$bkSPQfK zsderJ&CFwUOsWDdQ}jtj?TS^8QuLL2-0b0_ex4m|KHW`HkR>u^m#-CxQ@-z2A>`mP z{m^B51qu?8Oh@xdIu``97OqHx2sBBpK!d^B^&LKxt^F`$-8+`64|Rh$qbOq2ee{q% z2<)$HTOE`IOtPeki*m!<`Nex8 zlh;Z3FvC_Az6%^3(Z^m0=LXO9?$9J>klb3^CPvo~iOU&t<9t)XJ;Z!3iReRHMRrdF zx457%DDtajV?7FP)*t>`QWJUki*nCYctvISof~Xupx}O#8r{TWh+Mi&` zN@jSnC-vJJt?Hd3JYu<;JbG$Y>1t~_(;}#8Z0=`CkbUz9V>r)Z)4h(4Fe0!olPUqq zG=x*g&Cml-DM{8O#d=7ytGA*wZu(e`y^0ja$RJr4gN~z5H4#AyqQqt@!vjupZ=16(wmwYSWu|CT-6j`m9<|(i0CJsY+;k!3 zfyO?fS+QDT$*}K98|ZU1(bx)bQaQsfycMnxdLSw2W)R7=Id)C&x#cq9qzXq_ustMM zB7r#BO1XaRl^ z(f705hw4iVp08yD+qhOd&?plCgz~ecc~NhDU1Gr;;HfrCQjw48Hya{Hib+KXmW_37 zMwN2#MCmGOX~DU8q!@%zsxTIrj|5 zHDP(kPUR(0hF7To5zEvSg^`7N~j)53N_@&^l%zL zExhw`S;!yzJwI9ay&y3BT5PM-Ex!PhCr1dk<_Fjxi+f_jv84kb)mgWfiT8EDwUw<} zDe*wsA_A~Doqal0)OqCK`Msf0Jj?~$g!Kos62Fl9-F^s%_&fQ1<&(3bV8`#ZY#+^EkFM|l>vd-P zrb-`p3J>gTJx9XZ@z;hj6*bR;E8d7oc;=S2Jl%QWdo|BVjpPjT7Rj1tzSj?mS=eX1qM}!ikb|2pwY{d) z;omzj2)1!(w~!Q_<~5oRtf3_;Ex|N?lXALUMuE}c5ARgZ_*7YEkaP34?iReH-#yI7 zd5YRPBJLt6Y+SWFP(RscdHpV>awxE4Atxy-WK(aF!iJUsKWf~-JvU3`doUdj4|>FB z(d4zOltojwq_T$ST;oqFaOQ)P=*}*`^D`davGiYCzcbNsz)urSEXI>M)w1Tu{0g@q1g!s(LmM@}H~wZx087}t zEAj!yyVRdPB}fmdm;{jV7}a#5Na42KAp0#%XAj{7tTdijN$3d|k??jsS7W zF^RyNQ33qxEuxtLjr5+O?2{XuoiZ_{SK(jwDMsJBzw1%Nv?45G3n<&9j(9VQlE!uL zZ@YyVTvP1|2k#zg3D2(4JHPzR?dlmG;so`V+`clZ*)rucxV3Zv6=@RGo6Efo;qfx% zc(_*z!UwH$cqse3c0WBa`3#8gy~KH>>NN!Zt~!oQH?mvUDX%h_1lCL7upb>6%r1HN zTp?~0%1hF9Fhi&cx%vvjvp~yXt!_yy*0ybnC3byps82KUMjUUyxg@jYcY0)?1If7Y z1>3`R?Rbn8-ajNWyB*dad>xhyw+NJJ)eJ7{3#iW7qM-8+^pE(CKq`t*v-g%roY(Z8N%MZ&x`Ph3X zoe%ejJ=Q8IytFX*&cERlH{tu|#uXdOtY=%qIRY2PsexVZjROW1O4xF#L?UImo=gBY zd;$E`{XLou6^qQw(H5$o(Ij5N&7*z!A5hvTkF{*hr<7jXa%)n+xc7xSX}CF)K+2EB zPbFRJRWhJ3^4$mlE%mD_0&?8DBzZ0H+>5>yw}?{Qghr9hR_YJ-Lpq0!mvjDbkrP{sYmMiblYCPAb^*L2yzKA%oAL(iE6qcAG`u3DC@?6ZttE@_#YK z{~!GH!t9f90>l541HgZ2WT zv*-(B+=6|b5=KQ0_|ZHuM&um!CBkTl1s)!fOePyWg>$_O-1Sl1OF}mPNWG1zEaNkQG=;5JBl$YC#r|lI~hs zKA!jczH{E^kD0l5X70?~bM8HJ?k`?jO9hBegO7oM0aQ~})WyKSeElE`;Nd*<;=CW| z9tKPwT@`uExk0XX56TlyRbw9v3;@|b4HF|L?5em-snxxq~T;0Qs4 zK-g2h`WQbdMMWzEY(wld4$hL;?kKiZX4Pkpm2IBm*kCH4O+UQmb{{P%yTAaBuJ}t>B>U)2yIyb7&`c?2u2-ZwXRtdAB(OHqiXYF?Qx1L<+ z_OEpwymj-e=?^ko=LZs+n~U#I)36n+%I!Sx=pC~f`u5?iq%{zP6D{K)LpnL$Qr+RL zP(afBbif@w!{>z!HMY=)i{Ua^?1BzUcqg)$oBo`uGo6Qt!14P4-2)kg&5MEZvsmx+ z-0c`$VQ!s)&*74jO=9vvk z#@U*;#e7Y2_WyT-_{8S+FF#ZF{ej!d&vDP<3~cn+JO(zP$5IXwui~QLie9 zhoFAPA&~}`;qU@Lhw2z6-^}46E2C}htNY`EcbROQBW;l2o{Ntv4|-XCbR*23aXk9E zxE3je_|GFUVHT>hKrT2JC@AYmnlJPFy;Os;-6^{4+*z1?&gYn|o4cGUc`>BU_Ia6P zh6?M6{F%8HU$M6n(I(R_aO&VECeu3>3w4a}!!Awcbkb00*iXih;YvUzn6x#VP7>>r z!QROwB#V6L5>%}%o#%mNM*%Eg8;|n#Ota@FD>u)~Jokkl-FI$!Mo2Z;Vqe0(rTvj* z6RZ&9_*U>eWu|W{x_m5Zcx--IXV~KX-onV+d^_UW=4A}35sKxI#`q_NG**nB-Z*h~ zNv?j7=E_-jHEq{23 zo)B4RhW*|xWqP0QJ0Z9Mi7%7FcIJr!0Z^^o5Q*W)NchR8>^AO|m=F4V zI?lRujXXB)K&mgYNK_H_X_nEcHwPgR+px&de!(2AOM>hq({+*aJNuIQJwi#qGs)dy zI~zw4xs@pluC=-Ki=upEYKsGqXDSp75F%%mW^I9W;4WqB z(wqS8S?DIa!rT@KwZGr_TinwYPYJO6oX%== z>b5Ku!J*@;dp-Myu5on{Mzl;>^odvO84h>+E{OPBVzCA5rZGjC!?Q|!B*OY|BCOhD zB+7O-b{WWHr4nv!NUU?9d;~<0FFmHh%cv&2jwD@v6sgoRHxQ`&gQtO^8(O3@eHDCr z+0WvIa|{q6n@;rU6sBU$e1LOnS5gh}p_($Ns}<0(y38UnXg~FnYf% zL|L_~$C9z^?D^rnSxwxj+hu(#b#b!xZ=BcU+*mOC-?pR9QWlQ?NyiC#rZ)H1Z)WQf zZ+uf3R!?yR%Fd*f_&4X1e8#Iwh#{dbWH--}xtF%>V>xEn-xy65rg1Kihp_=oc1or# z>=8(1x^IjnwViuFi^ZqF8_MdEYh*p6xmfF~jobY#pJG9cM$us5;=J`l+RE)B8;&l9 zvVGzOPMqF8>vOI?1`?U5i{>YUi|Ddb#MUrFC^D1$TK8KNs*CDv#_n%S#C(ETK|`E8(q6N4g%G9QeeKUF`-npM6m?KbIrS za$kK*Qalm|r4wMn0+uEtwc&~4ATfmr0e2A=+U!C(NK=>A7j<5;#3Ot8D-zF$kDzya zs~Nn{GcMbB5%T?6NIExRFvT2(vC{Q-coS^n`Ti5A+cYdIA#Gj5cvJYS-BFgmK_YId z&**zBlK?A|h~Zgz{%A3%a*@2U*z)GdOJ~E&@sZ0=PMM2|zj=(v{ZfWC1n)0{73*OP z>PFkO>EMPqbUxnX#^Iw3)O_pW)GQcDaKGTNTIeAn-|lA-X?lN>JPIX-fc69hPXzNq zh-*JB^K0XUSP}4|&RIRt!{|L|xGlvxB^pOc_Z8A-`zy85U}N z3O*~;QPjf7zAM$bEbEaJcaTOIvpnWnvaBUw^&`Q|Ic+x&Yt7G+THCWZ=;jOpAr z>`y*tx?Z45SD)6XAGB(B%A1z%bq1k4;w28Qa$Qk4Gr1DI*OV#yv5%Y+Ib*0>R2)g= zzl>oD$`bzx1Ba`&ftCS0A-lia+hntyLjpSR0PbZ1+1ODocPLWcX(=Q?zehrQYDfoyA z+vcVT*@>8wF4@4E<$O~8A}i8@J4oe&!q*kA>k}M$4ZDn?}Mi? z?}rRRm_+nl3j^WgZtG~GL6>4mI!;A0JTp9Scy!orgqO0uN#}ZuE6&Y>vy<+!z8S1o_?(6C?H^so!h1@ z(A}Y2L{Lim3i!y1l<)4|dqoddW8FR!$6Tqw2oNQZ1a+9p{=Fu7+&W!Umw>;%r8}{@ zZ`)GU!iKtD-=3VeP?{f2X|EfK_I7;ar)4MaxM~}%UH2AVj*TApSkqx_pAZt@++(>~z&WuanQOz@qsM z;D5Ot3Bg=>%B6l#KThX!D{~JV$H6nLbmFl_X(q^IR%1Qesk@T1J6fk>XwJM%mvY@< z6?(#?UA^qbW8%;i8PW1Pje2VXTVR}^ApE);JB zd`zzm&v!u!f?vdbZfahaX>1y4wXJo`<*p&EN_V^Nu>QxZ-@WfZ8XI@h5FCAk^I5Dm zy1%SB?)v9LU|wNAct*4tbRb}+@z&)6^0HeqLTcZ%As2Z{r#U1+q8C3Tne8Bt6r=$KtWEB zyRG@KYS_x3wUTqnkNtR;(e-UOynLg#J4Up>oAic$3^5gdTn(W4TnaxhH02E6E4dmALVI$u~+9zb|{b$KvBXtTGEt6B(%nDeYI#-t?~Ba#4vDQIJWaX|IJN zme}pmPyKOL3t(bBYP+3)$=~TrpDs$g@Dv=ItQetNYih-l??tNej7l0L>Ucl>Z74@OVq#%ZQG(vEI(FNqOmP%+krH z+HZ7@s;Ydp`eAdAC?0c9)A=k~0J#kG+iIhuV(^wE1Z(Q=oBl4+wH?v)>RSl;;*TsH&Y*^!)8kO(EvrNYxbyOP)pLYn@dF2t!C zJNk9PT^YD#WSxZ;Sc&)P%=r4;{EXW@h-fpq>Ky(n*ctS7tC~XkWI4jJ1J@>vT4pTk zJk$WY&|+I}Sh4W1bD+k3btE=!yQzG_k?L*_Z)(hz>1$w~#Kx^=f{HoMOse+MI1wj-E3^nkkzRxoAC2kVhZL{ko}1ClrBxOclBC#pGMC; zG`_E~+kzxzJ&`nsD;6#qMComPN8(GG{YxLMS#Y7ctV#b|4-TY&dZQ_nMZZV8kgm7H z6h1!~p1E1&VO_qo?3O!d!R#n;BvNRk+w{2H=WACwbk7J{HS;@SC;&EGjP{2^Dfa!k z$U3-P8_S#I5>?ukYF}*{p88Y}?fl#nPy!$2HAPEh+OE0Hbv?cZNTvOmbLsR(s|R2u z{H@9M@wI`kyc1doxm|s-E^(VeuGDisP-Tg<4AX7^DB-S8$x;{R#S`=l6nY_R=*1%e zh4v7D=dL&oHS_z%_1K~u;d;8ca!Z`;4xNM6b%_!5q*DejI?Cx~Lw!B%t&n|gp?@J> zwK1`Tp(tnQoa&g;Z9wOQ1$f~?FAh|+&oxsbmBZL}tB56YmfN>|QNU8gn(zbe84#vi zD&vznNWjAN&=S6vkj%`7@NL}UH z^BOma_zQXLW@+IIW^aGl5jLEacn408gv_9=Z zt)q)yIb5g2ouN%z@ft1^Kioiz*1j@R0&8pv@@SNj@2kIxqK6y8O@|}`E8vk1wjS&z z%|Y3+LCsoo7OZ4;L~%=>@IvQs5A_^)E^F!LDctfKOLg9P)@e=uq9(bZP<;lgcC_r& z*`Z4R%!#VWoH*tY-O)Q=ai?XJnzZnq(vMpJ*)i-{qTAEnv7alqJ7Fj~a`T|giLnf& zX;;0MYzl+NYC|}7wy&B~4CS``nH3g;g%tIgajSZLVcK_TX6IjHEh4f)LS89KOk@%f zVpk*Dr9a8cJbzX?5l93yfi%l-&EVPPYO*BsSMmSQY~ekcEcqsf^3tG9k2ihfeDfND z8avUw5uXd7G7a2*B@m z_#s?4)+zo==a0Ot{A-lxJ)gC?+M^|rp5gjUcJ=RWTS2dvCHTtK1RHjY>HkBSC|Ol>?+pE%w@743)m{=` z$n2!E><2g)RL0U^5IsOX8-f3&cVnQK!bdOCj0Org1bGjI*OsD Lq@`FVZx!)Bwj{xy literal 0 HcmV?d00001 diff --git a/docs/assets/networktocode_logo.svg b/docs/assets/networktocode_logo.svg new file mode 100644 index 0000000000..348e5241db --- /dev/null +++ b/docs/assets/networktocode_logo.svg @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/overrides/partials/copyright.html b/docs/assets/overrides/partials/copyright.html new file mode 100644 index 0000000000..b623894dea --- /dev/null +++ b/docs/assets/overrides/partials/copyright.html @@ -0,0 +1,20 @@ + + + + + +
diff --git a/docs/dev/code_reference/parse.md b/docs/dev/code_reference/parse.md new file mode 100644 index 0000000000..fec377d797 --- /dev/null +++ b/docs/dev/code_reference/parse.md @@ -0,0 +1,5 @@ +# Parse + +::: ntc_templates.parse + options: + show_submodules: True \ No newline at end of file diff --git a/docs/dev/contributing.md b/docs/dev/contributing.md new file mode 100644 index 0000000000..40aa4ee777 --- /dev/null +++ b/docs/dev/contributing.md @@ -0,0 +1,55 @@ +# Contributing + +Pull requests are welcomed and automatically built and tested against multiple versions of Python through GitHub Actions. + +Except for unit tests, testing is only supported on Python 3.9. + +The project is packaged with a light development environment based on `Docker` to help with the local development of the project and to run tests within GitHub Actions. + +The project is following Network to Code software development guidelines and are leveraging the following: + +- Black, Pylint, Bandit, Mypy, flake8, and pydocstyle for Python linting and formatting. +- pytest, coverage, and unittest for unit tests. + +There are a number of things that are required in order to have a successful PR. + +- Docstrings must conform to the google docstring [convention](https://google.github.io/styleguide/pyguide.html#381-docstrings). +- Following and adherence to [Extending Parsers](dev_parser.md). +- Run tests with `invoke tests`. + +Documentation is built using [mkdocs](https://www.mkdocs.org/). The [Docker based development environment](dev_environment.md#docker-development-environment) can be started by running `invoke docs` [http://localhost:8001](http://localhost:8001) that auto-refreshes when you make any changes to your local files. + + +## Branching Policy + +The branching policy includes the following tenets: + +- The develop branch is the primary branch to develop off of. +- If there is a reason to have a patch version, the maintainers may use cherry-picking strategy. +- PRs intended to add new features should be sourced from the develop branch. +- PRs intended to address bug fixes and security patches should be sourced from the develop branch. +- PRs intended to add new features that break backward compatibility should be discussed before a PR is created. + +NTC-Templates will observes semantic versioning. This may result in an quick turn around in minor versions to keep pace with an ever growing feature set. + +## Release Policy + +NTC Templates has currently no intended scheduled release schedule, and will release new features in minor versions. + +When a new release is created the following should happen. + +- A release PR is created with: + - Update to the changelog in `docs/admin/release_notes/version_..md` file to reflect the changes. + - Change the version from `..-beta` to `..` in pyproject.toml. + - Set the PR to the master +- Ensure the tests for the PR pass. +- Merge the PR. +- Create a new tag: + - The tag should be in the form of `v..`. + - The title should be in the form of `v..`. + - The description should be the changes that were added to the `version_..md` document. +- If merged into `master`, then push from `master` to `develop`, in order to retain the merge commit created when the PR was merged +- A post release PR is created with. + - Change the version from `..` to `..-beta` pyproject.toml. + - Set the PR to the `develop`. + - Once tests pass, merge. \ No newline at end of file diff --git a/docs/dev/dev_environment.md b/docs/dev/dev_environment.md new file mode 100644 index 0000000000..64d3f352cb --- /dev/null +++ b/docs/dev/dev_environment.md @@ -0,0 +1,105 @@ +# Building Your Development Environment + +## Quickstart + +The development environment can be used in two ways: + +1. `Recommended` All services are spun up using Docker and a local mount so you can develop locally, but NTC Templates is spun up within the Docker container. +2. With a local poetry environment if you wish to develop outside of Docker. + +This is a quick reference guide if you're already familiar with the development environment provided, which you can read more about later in this document. + +### Invoke + +The [Invoke](http://www.pyinvoke.org/) library is used to provide some helper commands based on the environment. There are a few configuration parameters which can be passed to Invoke to override the default configuration: + +- `local`: a boolean flag indicating if invoke tasks should be run on the host or inside the docker containers (default: False, commands will be run in docker containers) + +Using **Invoke** these configuration options can be overridden using [several methods](https://docs.pyinvoke.org/en/stable/concepts/configuration.html). Perhaps the simplest is setting an environment variable `INVOKE_NETUTILS_VARIABLE_NAME` where `VARIABLE_NAME` is the variable you are trying to override. There is an example `invoke.yml` (`invoke.example.yml`) in this directory which can be used as a starting point. + +### Docker Development Environment + +!!! tip + This is the recommended option for development. + +This project is managed by [Python Poetry](https://python-poetry.org/) and has a few requirements to setup your development environment: + +1. Install Poetry, see the [Poetry Documentation](https://python-poetry.org/docs/#installation) for your operating system. +2. Install Docker, see the [Docker documentation](https://docs.docker.com/get-docker/) for your operating system. + +Once you have Poetry and Docker installed you can run the following commands (in the root of the repository) to install all other development dependencies in an isolated Python virtual environment: + +```shell +poetry shell +poetry install +cp development/creds.example.env development/creds.env +invoke build +invoke start +``` + +Live documentation can be viewed at [http://localhost:8001](http://localhost:8001). + +To either stop or destroy the development environment use the following options. + +- **invoke stop** - Stop the containers, but keep all underlying systems intact +- **invoke destroy** - Stop and remove all containers, volumes, etc. (This results in data loss due to the volume being deleted) + +## Poetry + +Poetry is used in lieu of the "virtualenv" commands and is leveraged in both environments. The virtual environment will provide all of the Python packages required to manage the development environment such as **Invoke**. See the [Local Development Environment](#local-poetry-development-environment) section to see how to install NTC Templates if you're going to be developing locally (i.e. not using the Docker container). + +The `pyproject.toml` file outlines all of the relevant dependencies for the project: + +- `tool.poetry.dependencies` - the main list of dependencies. +- `tool.poetry.dev-dependencies` - development dependencies, to facilitate linting, testing, and documentation building. + +The `poetry shell` command is used to create and enable a virtual environment managed by Poetry, so all commands ran going forward are executed within the virtual environment. This is similar to running the `source venv/bin/activate` command with virtualenvs. To install project dependencies in the virtual environment, you should run `poetry install` - this will install **both** project and development dependencies. + +For more details about Poetry and its commands please check out its [online documentation](https://python-poetry.org/docs/). + +## Full Docker Development Environment + +This project is set up with a number of **Invoke** tasks consumed as simple CLI commands to get developing fast. You'll use a few `invoke` commands to get your environment up and running. + +## CLI Helper Commands + +The project features a CLI helper based on [invoke](http://www.pyinvoke.org/) to help setup the development environment. The commands are listed below in 3 categories: +- `dev environment` +- `utility` +- `testing` + +Each command can be executed with `invoke `. Each command also has its own help `invoke --help` + +### Local dev environment + +``` + build Build all docker images. + clean Remove the project specific image. + docs Build and serve docs locally. + rebuild Clean the Docker image and then rebuild without using cache. +``` + +### Utility + +``` + clean-yaml-file Transform a yaml file to expected output. + clean-yaml-folder Transform a yaml file to expected output to a folder. + cli Enter the image to perform troubleshooting or dev work. + gen-yaml-file Generate a yaml file from raw a data file. + gen-yaml-folder Generate a yaml file from folder of raw data files. +``` + +### Testing + +``` + bandit Run bandit to validate basic static code security analysis. + black Run black to check that Python files adhere to its style standards. + coverage Run the coverage report against pytest. + flake8 Run flake8 to check that Python files adhere to its style standards. + mypy Run mypy to validate typing-hints. + pylint Run pylint code analysis. + pydocstyle Run pydocstyle to validate docstring formatting adheres to NTC defined standards. + pytest Run pytest for the specified name and Python version. + tests Run all tests for the specified name and Python version. + yamllint Run yamllint to validate formatting adheres to NTC defined YAML standards. +``` \ No newline at end of file diff --git a/docs/dev/dev_parser.md b/docs/dev/dev_parser.md new file mode 100644 index 0000000000..4e60ed12da --- /dev/null +++ b/docs/dev/dev_parser.md @@ -0,0 +1,256 @@ +# Config Parsers Development + +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` + +> Example: cisco_ios_show_cdp_neighbors.textfsm + +!!! tip + The vendor name must be valid from the [os_choices](https://github.com/networktocode/ntc-templates/blob/master/tests/test_index_order.py#L59) tests, which is primarily based on [Netmiko](https://github.com/ktbyers/netmiko/tree/master/netmiko) list of supported vendors. New vendors added should adhere to **vendor_os**. + + Example: 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 +``` + +#### Error Directive + +Each **state** should end with `^. -> Error`. This helps to ensure that every line is accounted for 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+`. This is 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 `. We have used the combination of ordering, as defined: + + - OS in alphabetical order + - Template name in length order (longest to shortest) + - 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. + +```bash +$ 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: + +```bash +$ 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. + +> Example. ./tests/cisco_ios/show_clock/ + +There are available helpers to create the parsed file in the correct format (See below for details). + +An example of the proper format is shown below: + +```bash +$ 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](https://yamllint.readthedocs.io/en/stable/rules.html). + +## Development Helper Scripts + +A click cli utility is provided to assist with properly building the parsed files. This utility depends on some packages listed in the dev install requirements. The commands are: + +- `clean-yaml-file`: Takes the path to a YAML file and updates to ensure that the file adheres to the .yamllint settings +- `clean-yaml-folder`: Takes a directory that will updates to ensure all files ending in `.yml` adhere to the .yamllint settings +- `gen-yaml-file`: Takes the path to a `.raw` file, and generates the parsed data and saves the results adjacent to the `.yml` file following the defined standards in .yamllint. +- `gen-yaml-folder`: Takes a glob path to a directory containing `.raw` files, and creates the appropriate parsed files in the appropriate directory. + +```bash +$ python cli.py --help +Usage: cli.py [OPTIONS] COMMAND [ARGS]... + + Base entry for click. + +Options: + --help Show this message and exit. + +Commands: + clean-yaml-file Transform a yaml file to expected output. + clean-yaml-folder Transform a yaml file to expected output to a folder. + gen-yaml-file Generate a yaml file from raw a data file. + gen-yaml-folder Generate a yaml file from folder of raw data files. +$ +``` + +The `clean-yaml-file` and `clean-yaml-folder` 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 `gen-yaml-file` and `gen-yaml-file` arguments 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 `ntc_templates/templates/` and the `ntc_templates/templates/index` file must be updated to correctly point to the template file(s). + +```bash +$ python cli.py clean-yaml-folder -f tests/cisco_ios/show_mac-address-table +tests/cisco_ios/show_mac-address-table/cisco_ios_show_mac-address-table.yml +tests/cisco_ios/show_mac-address-table/cisco_ios_show_mac-address-table12.yml +tests/cisco_ios/show_mac-address-table/cisco_ios_show_mac-address-table13.yml +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-table4.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-table6.yml +tests/cisco_ios/show_mac-address-table/cisco_ios_show_mac-address-table7.yml +tests/cisco_ios/show_mac-address-table/cisco_ios_show_mac-address-table8.yml +tests/cisco_ios/show_mac-address-table/cisco_ios_show_mac-address-table9.yml +$ +``` + +Additionally, each of these commands are available via invoke commands to better support a docker environment. The arguement names match up, e.g. `python cli.py clean-yaml-file` has an equivalant `invoke clean-yaml-file`. + +# 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. + +```bash +% invoke tests +DOCKER - Running command: black --check --diff . container: ntc_templates:3.1.0-py3.7 +All done! ✨ 🍰 ✨ +9 files would be left unchanged. +DOCKER - Running command: flake8 . --config .flake8 container: ntc_templates:3.1.0-py3.7 +DOCKER - Running command: find . -name "*.py" | xargs pylint container: ntc_templates:3.1.0-py3.7 + +------------------------------------ +Your code has been rated at 10.00/10 + +DOCKER - Running command: yamllint . container: ntc_templates:3.1.0-py3.7 +[...] +``` + +> Note: Omitted for brevity. \ No newline at end of file diff --git a/docs/dev/extending.md b/docs/dev/extending.md new file mode 100644 index 0000000000..c0b85dd02e --- /dev/null +++ b/docs/dev/extending.md @@ -0,0 +1,5 @@ +# Extending the Library + +Extending the library is welcome, however it is best to open an issue first, to ensure that a PR would be accepted and makes sense in terms of features and design. + +Requesting for others to create templates is not currently supported. Please review the [faq](../user/faq.md#does-the-project-support-requests-for-additional-templates-or-additional-data-in-an-existing-template) for more details. diff --git a/docs/images/.keep b/docs/images/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/docs/images/icon-ntc-templates.png b/docs/images/icon-ntc-templates.png new file mode 100644 index 0000000000000000000000000000000000000000..861dc310be176c79c6b74f5d08c17922fc6ef769 GIT binary patch literal 4703 zcmeAS@N?(olHy`uVBq!ia0y~yVA%k|94tT)M~!M1AjOjI=9T(j;Ea*|VBhgqdpx&YT zi$xz1CLjx;%0T|Z9wtO70tGfflaLgFVg$Q&*cBm#3GT=wRS_(nina(InXS8jl?+dw z^}DInrFx@51WWJ8L8PtxU`DkmA6xVko;VVt8+Yo$9^D{OQgR$oX#(aKVzVVEIU%J} zq|}9E5-jgN$xx0kaBH~D_fGWBGge5E15M!gH4?1|DSH8nG%QZQol${WVeZ7O2r0a& zrwAIo4t+*U4-VakVEA5nkhHRtCNYZ~7{Ho>a0HPW_M}A6gvDlm*BP$;5V`aH4W6`A z;~(t&c8;SZ5G?=05_-`TK^=*72|Mi^ogB94D`^!i;)r^ls02=wB2se!Qu#%bLXM=8 z(DD>V19x)rOi@rRHh(mHU`-5I2Di+*{9ekvdH;k7X9Ln&Ymb_bW;2Xzwnb1!Lz%iVSwV z1(w+s2a885Hh4V>4e<$!dllj&8S|_aH%o2idd~8Hv|R*mhQZrKW=*WgEHaD#G(XtZ zp3|l~nu^d<(a;%<0K4?|Z-xw8BS*%+eHVay)e_f;l9a@fRIB8oR3OD*WMF8aYhb2p zXdGf_WMyh;WnigoU|?lnAj&u!*r-R+kei>9nO2EgLrRSDc94ypu6{1-oD!M<7xBm( literal 0 HcmV?d00001 diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000000..f32fd72b7b --- /dev/null +++ b/docs/index.md @@ -0,0 +1,6 @@ +--- +hide: + - navigation +--- + +--8<-- "README.md" diff --git a/docs/requirements.txt b/docs/requirements.txt new file mode 100644 index 0000000000..f403e1aa20 --- /dev/null +++ b/docs/requirements.txt @@ -0,0 +1,8 @@ +mkdocs==1.3.1 +# Material for MkDocs theme +mkdocs-material==8.3.9 +# Render custom markdown for version added/changed/remove notes +mkdocs-version-annotations==1.0.0 +# Automatic documentation from sources, for MkDocs +mkdocstrings==0.19 +mkdocstrings-python==0.7.1 \ No newline at end of file diff --git a/docs/user/faq.md b/docs/user/faq.md new file mode 100644 index 0000000000..200db8a0c8 --- /dev/null +++ b/docs/user/faq.md @@ -0,0 +1,89 @@ +# Frequently Asked Questions + +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 7 years (initially within ntc-ansible) and over 200 template at this point any additional requests are essentially edge use cases. Meaning, for seven 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](https://www.youtube.com/watch?v=rgbCcBNZcdQ) should provide the instructions on how to do so. + +## Does this work on windows? + +Based on this [PR](https://github.com/networktocode/ntc-templates/pull/672) 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. + +## Cannot import name clitable from textfsm - Known Issue + +**ntc-templates** depends on **textfsm**, which hasn't published a source distribution to pypi in a while. See https://github.com/google/textfsm/issues/65. + +This means that for users with a build chain that depends on source distributions only (i.e. no wheels), ntc-templates appears to have a bug: + +``` +File "/usr/local/Cellar/foo/version/libexec/lib/python3.7/site-packages/ntc_templates/parse.py", line 3, in + from textfsm import clitable +ImportError: cannot import name 'clitable' from 'textfsm' +``` + +What's actually happening here is that textfsm provides a source distribution only up to version 0.4.1 (2018-04-09) but the ntc-templates code relies on the interface from version 1.1.0 (2019-07-24) which is only available as a wheel. So the way for users to fix this problem if they encounter it is to install textfsm 1.1.0. + +`pip install textfsm==1.1.0` + +> This was taken from https://github.com/networktocode/ntc-templates/issues/731 diff --git a/docs/user/lib_getting_started.md b/docs/user/lib_getting_started.md new file mode 100644 index 0000000000..bb447385db --- /dev/null +++ b/docs/user/lib_getting_started.md @@ -0,0 +1,47 @@ +# Getting Started with the Library + +The library's primary use case is to provide pre-canned parsers for TextFSM. + +## Install the Library + +To install the library, please follow the instructions detailed in the [Installation Guide](../admin/install.md). + +## Usage + +The libraries interface is fairly simple, the only public function is the `parse_output` function. + +```python +>>> 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'] + } +] +>>> +``` + +The rest of the functionality comes from the indiviudal TextFSM templates and the primary index file. \ No newline at end of file diff --git a/docs/user/lib_overview.md b/docs/user/lib_overview.md new file mode 100644 index 0000000000..d0399d4115 --- /dev/null +++ b/docs/user/lib_overview.md @@ -0,0 +1,15 @@ +# Library Overview + +[TextFSM](https://github.com/google/textfsm/wiki) 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. + +## Audience (User Personas) - Who should use this Library? + +Network engineers with the need to parse through standard cli based operational configurations. + +## Authors and Maintainers + +- @itdependsnetworks +- @jmcgill298 +- @jvanderaa diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 0000000000..4e00249934 --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,129 @@ +--- +dev_addr: "127.0.0.1:8001" +edit_uri: "edit/develop/docs" +site_dir: "ntc-templates/static/ntc-templates/docs" +site_name: "NTC Templates Documentation" +site_url: "https://ntc-templates.readthedocs.io/en/latest/" +repo_url: "https://github.com/networktocode/ntc-templates" +copyright: "Copyright © The Authors" +theme: + name: "material" + navigation_depth: 4 + custom_dir: "docs/assets/overrides" + hljs_languages: + - "python" + - "yaml" + features: + - "navigation.tracking" + - "navigation.tabs" + - "navigation.tabs.sticky" + - "search.suggest" + - "search.highlight" + - "search.share" + - "navigation.indexes" + favicon: "assets/favicon.ico" + logo: "assets/networktocode_logo.svg" + palette: + # Palette toggle for light mode + - media: "(prefers-color-scheme: light)" + scheme: "default" + primary: "black" + toggle: + icon: "material/weather-sunny" + name: "Switch to dark mode" + + # Palette toggle for dark mode + - media: "(prefers-color-scheme: dark)" + scheme: "slate" + primary: "black" + toggle: + icon: "material/weather-night" + name: "Switch to light mode" +extra_css: + - "assets/extra.css" + +# needed for RTD version flyout menu +# jquery is not (yet) injected by RTD automatically and it might be dropped +# as a dependency in the future +extra_javascript: + - "https://code.jquery.com/jquery-3.6.0.min.js" + +extra: + generator: false + ntc_sponsor: true + social: + - icon: "fontawesome/solid/rss" + link: "https://blog.networktocode.com/" + name: "Network to Code Blog" + - icon: "fontawesome/brands/youtube" + link: "https://www.youtube.com/channel/UCwBh-dDdoqzxXKyvTw3BuTw" + name: "Network to Code Videos" + - icon: "fontawesome/brands/slack" + link: "https://www.networktocode.com/community/" + name: "Network to Code Community" + - icon: "fontawesome/brands/github" + link: "https://github.com/networktocode/" + name: "GitHub Organization" + - icon: "fontawesome/brands/twitter" + link: "https://twitter.com/networktocode" + name: "Network to Code Twitter" +markdown_extensions: + - "admonition" + - "toc": + permalink: true + - "attr_list" + - "md_in_html" + - "pymdownx.highlight": + anchor_linenums: true + - "pymdownx.inlinehilite" + - "pymdownx.snippets" + - "pymdownx.superfences" + - "footnotes" +plugins: + - "search" + - "mkdocs-version-annotations" + - "mkdocstrings": + default_handler: "python" + handlers: + python: + paths: ["."] + options: + show_root_heading: true +watch: + - "README.md" + +nav: + - Overview: "index.md" + - User Guide: + - Library Overview: "user/lib_overview.md" + - Using the Library: "user/lib_use_cases.md" + - Getting Started: "user/lib_getting_started.md" + - Frequently Asked Questions: "user/faq.md" + - Administrator Guide: + - Install and Configure: "admin/install.md" + - Upgrade: "admin/upgrade.md" + - Uninstall: "admin/uninstall.md" + - Release Notes: + - "admin/release_notes/index.md" + - v0.9: "admin/release_notes/version_0.9.md" + - v1.1: "admin/release_notes/version_1.1.md" + - v1.2: "admin/release_notes/version_1.2.md" + - v1.3: "admin/release_notes/version_1.3.md" + - v1.4: "admin/release_notes/version_1.4.md" + - v1.5: "admin/release_notes/version_1.5.md" + - v1.6: "admin/release_notes/version_1.6.md" + - v1.7: "admin/release_notes/version_1.7.md" + - v2.0: "admin/release_notes/version_2.0.md" + - v2.1: "admin/release_notes/version_2.1.md" + - v2.2: "admin/release_notes/version_2.2.md" + - v2.3: "admin/release_notes/version_2.3.md" + - v3.0: "admin/release_notes/version_3.0.md" + - v3.1: "admin/release_notes/version_3.1.md" + - v3.2: "admin/release_notes/version_3.2.md" + - Developer Guide: + - Extending the Library: "dev/extending.md" + - Contributing to the Library: "dev/contributing.md" + - Development Environment: "dev/dev_environment.md" + - TextFSM Parser Development: "dev/dev_parser.md" + - Code Reference: + - Parse: "dev/code_reference/parse.md" diff --git a/ntc_templates/__init__.py b/ntc_templates/__init__.py index fb6467db96..d66308df2f 100644 --- a/ntc_templates/__init__.py +++ b/ntc_templates/__init__.py @@ -1,3 +1,9 @@ """ntc_templates - Parse raw output from network devices and return structured data.""" -__version__ = "3.0.0" +try: + from importlib import metadata +except ImportError: + # Python version < 3.8 + import importlib_metadata as metadata + +__version__ = metadata.version(__name__) diff --git a/ntc_templates/parse.py b/ntc_templates/parse.py index 407c289b56..daee11e7eb 100644 --- a/ntc_templates/parse.py +++ b/ntc_templates/parse.py @@ -37,7 +37,6 @@ def _clitable_to_dict(cli_table): def parse_output(platform=None, command=None, data=None): """Return the structured data based on the output from a network device.""" - if not HAS_CLITABLE: msg = """ The TextFSM library is not currently supported on Windows. If you are NOT using Windows @@ -56,12 +55,8 @@ def parse_output(platform=None, command=None, data=None): try: cli_table.ParseCmd(data, attrs) structured_data = _clitable_to_dict(cli_table) - except clitable.CliTableError as e: - raise Exception( - 'Unable to parse command "{0}" on platform {1} - {2}'.format( - command, platform, str(e) - ) - ) + except clitable.CliTableError as err: + raise Exception(f'Unable to parse command "{command}" on platform {platform} - {str(err)}') from err # Invalid or Missing template # module.fail_json(msg='parsing error', error=str(e)) # rather than fail, fallback to return raw text diff --git a/poetry.lock b/poetry.lock index 5661e245c1..54efaf3849 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,10 +1,25 @@ [[package]] -name = "atomicwrites" -version = "1.4.1" -description = "Atomic file writes." +name = "alabaster" +version = "0.7.12" +description = "A configurable sidebar-enabled Sphinx theme" category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = "*" + +[[package]] +name = "astroid" +version = "2.11.7" +description = "An abstract syntax tree for Python with inference support." +category = "dev" +optional = false +python-versions = ">=3.6.2" + +[package.dependencies] +lazy-object-proxy = ">=1.4.0" +setuptools = ">=20.0" +typed-ast = {version = ">=1.4.0,<2.0", markers = "implementation_name == \"cpython\" and python_version < \"3.8\""} +typing-extensions = {version = ">=3.10", markers = "python_version < \"3.10\""} +wrapt = ">=1.11,<2" [[package]] name = "attrs" @@ -15,22 +30,51 @@ optional = false python-versions = ">=3.5" [package.extras] -dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] -docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] -tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "cloudpickle"] +dev = ["cloudpickle", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "mypy (>=0.900,!=0.940)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "sphinx", "sphinx-notfound-page", "zope.interface"] +docs = ["furo", "sphinx", "sphinx-notfound-page", "zope.interface"] +tests = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "zope.interface"] +tests_no_zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins"] + +[[package]] +name = "Babel" +version = "2.10.3" +description = "Internationalization utilities" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +pytz = ">=2015.7" + +[[package]] +name = "bandit" +version = "1.7.4" +description = "Security oriented static analyser for python code." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +colorama = {version = ">=0.3.9", markers = "platform_system == \"Windows\""} +GitPython = ">=1.0.1" +PyYAML = ">=5.3.1" +stevedore = ">=1.20.0" + +[package.extras] +test = ["beautifulsoup4 (>=4.8.0)", "coverage (>=4.5.4)", "fixtures (>=3.0.0)", "flake8 (>=4.0.0)", "pylint (==1.9.4)", "stestr (>=2.5.0)", "testscenarios (>=0.5.0)", "testtools (>=2.3.0)", "toml"] +toml = ["toml"] +yaml = ["PyYAML"] [[package]] name = "black" -version = "22.8.0" +version = "22.10.0" description = "The uncompromising code formatter." category = "dev" optional = false -python-versions = ">=3.6.2" +python-versions = ">=3.7" [package.dependencies] click = ">=8.0.0" -dataclasses = {version = ">=0.6", markers = "python_version < \"3.7\""} mypy-extensions = ">=0.4.3" pathspec = ">=0.9.0" platformdirs = ">=2" @@ -44,13 +88,40 @@ d = ["aiohttp (>=3.7.4)"] jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] uvloop = ["uvloop (>=0.15.2)"] +[[package]] +name = "cached-property" +version = "1.5.2" +description = "A decorator for caching properties in classes." +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "certifi" +version = "2022.9.24" +description = "Python package for providing Mozilla's CA Bundle." +category = "dev" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "charset-normalizer" +version = "2.1.1" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +category = "dev" +optional = false +python-versions = ">=3.6.0" + +[package.extras] +unicode_backport = ["unicodedata2"] + [[package]] name = "click" -version = "8.0.4" +version = "8.1.3" description = "Composable command line interface toolkit" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} @@ -58,53 +129,66 @@ importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} [[package]] name = "colorama" -version = "0.4.5" +version = "0.4.6" description = "Cross-platform colored terminal text." category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" [[package]] -name = "dataclasses" -version = "0.8" -description = "A backport of the dataclasses module for Python 3.6" +name = "coverage" +version = "6.5.0" +description = "Code coverage measurement for Python" category = "dev" optional = false -python-versions = ">=3.6, <3.7" +python-versions = ">=3.7" + +[package.extras] +toml = ["tomli"] [[package]] -name = "distlib" +name = "dill" version = "0.3.6" -description = "Distribution utilities" +description = "serialize all of python" category = "dev" optional = false -python-versions = "*" +python-versions = ">=3.7" + +[package.extras] +graph = ["objgraph (>=1.7.2)"] [[package]] -name = "filelock" -version = "3.4.1" -description = "A platform independent file lock." +name = "docutils" +version = "0.17.1" +description = "Docutils -- Python Documentation Utilities" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "exceptiongroup" +version = "1.0.0" +description = "Backport of PEP 654 (exception groups)" +category = "dev" +optional = false +python-versions = ">=3.7" [package.extras] -docs = ["furo (>=2021.8.17b43)", "sphinx (>=4.1)", "sphinx-autodoc-typehints (>=1.12)"] -testing = ["covdefaults (>=1.2.0)", "coverage (>=4)", "pytest (>=4)", "pytest-cov", "pytest-timeout (>=1.4.2)"] +test = ["pytest (>=6)"] [[package]] name = "flake8" -version = "4.0.1" +version = "3.9.2" description = "the modular source code checker: pep8 pyflakes and co" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" [package.dependencies] -importlib-metadata = {version = "<4.3", markers = "python_version < \"3.8\""} +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} mccabe = ">=0.6.0,<0.7.0" -pycodestyle = ">=2.8.0,<2.9.0" -pyflakes = ">=2.4.0,<2.5.0" +pycodestyle = ">=2.7.0,<2.8.0" +pyflakes = ">=2.3.0,<2.4.0" [[package]] name = "future" @@ -115,35 +199,88 @@ optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] -name = "importlib-metadata" -version = "4.2.0" -description = "Read metadata from Python packages" +name = "ghp-import" +version = "2.1.0" +description = "Copy your docs directly to the gh-pages branch." category = "dev" optional = false -python-versions = ">=3.6" +python-versions = "*" [package.dependencies] -typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} -zipp = ">=0.5" +python-dateutil = ">=2.8.1" [package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"] +dev = ["flake8", "markdown", "twine", "wheel"] [[package]] -name = "importlib-resources" -version = "5.4.0" -description = "Read resources from Python packages" +name = "gitdb" +version = "4.0.9" +description = "Git Object Database" category = "dev" optional = false python-versions = ">=3.6" [package.dependencies] -zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} +smmap = ">=3.0.1,<6" + +[[package]] +name = "GitPython" +version = "3.1.29" +description = "GitPython is a python library used to interact with Git repositories" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +gitdb = ">=4.0.1,<5" +typing-extensions = {version = ">=3.7.4.3", markers = "python_version < \"3.8\""} + +[[package]] +name = "griffe" +version = "0.23.0" +description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +cached-property = {version = "*", markers = "python_version < \"3.8\""} + +[package.extras] +async = ["aiofiles (>=0.7,<1.0)"] + +[[package]] +name = "idna" +version = "3.4" +description = "Internationalized Domain Names in Applications (IDNA)" +category = "dev" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "imagesize" +version = "1.4.1" +description = "Getting image size from png/jpeg/jpeg2000/gif file" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "importlib-metadata" +version = "4.13.0" +description = "Read metadata from Python packages" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} +zipp = ">=0.5" [package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)"] +perf = ["ipython"] +testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"] [[package]] name = "iniconfig" @@ -153,6 +290,72 @@ category = "dev" optional = false python-versions = "*" +[[package]] +name = "invoke" +version = "1.7.3" +description = "Pythonic task execution" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "isort" +version = "5.10.1" +description = "A Python utility / library to sort Python imports." +category = "dev" +optional = false +python-versions = ">=3.6.1,<4.0" + +[package.extras] +colors = ["colorama (>=0.4.3,<0.5.0)"] +pipfile_deprecated_finder = ["pipreqs", "requirementslib"] +plugins = ["setuptools"] +requirements_deprecated_finder = ["pip-api", "pipreqs"] + +[[package]] +name = "Jinja2" +version = "3.1.2" +description = "A very fast and expressive template engine." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "lazy-object-proxy" +version = "1.8.0" +description = "A fast and thorough lazy object proxy." +category = "dev" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "Markdown" +version = "3.3.7" +description = "Python implementation of Markdown." +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} + +[package.extras] +testing = ["coverage", "pyyaml"] + +[[package]] +name = "MarkupSafe" +version = "2.1.1" +description = "Safely add untrusted strings to HTML/XML markup." +category = "dev" +optional = false +python-versions = ">=3.7" + [[package]] name = "mccabe" version = "0.6.1" @@ -161,6 +364,114 @@ category = "dev" optional = false python-versions = "*" +[[package]] +name = "mergedeep" +version = "1.3.4" +description = "A deep merge function for 🐍." +category = "dev" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "mkdocs" +version = "1.3.1" +description = "Project documentation with Markdown." +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +click = ">=3.3" +ghp-import = ">=1.0" +importlib-metadata = ">=4.3" +Jinja2 = ">=2.10.2" +Markdown = ">=3.2.1,<3.4" +mergedeep = ">=1.3.4" +packaging = ">=20.5" +PyYAML = ">=3.10" +pyyaml-env-tag = ">=0.1" +watchdog = ">=2.0" + +[package.extras] +i18n = ["babel (>=2.9.0)"] + +[[package]] +name = "mkdocs-autorefs" +version = "0.4.1" +description = "Automatically link across pages in MkDocs." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +Markdown = ">=3.3" +mkdocs = ">=1.1" + +[[package]] +name = "mkdocs-material" +version = "8.3.9" +description = "Documentation that simply works" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +jinja2 = ">=3.0.2" +markdown = ">=3.2" +mkdocs = ">=1.3.0" +mkdocs-material-extensions = ">=1.0.3" +pygments = ">=2.12" +pymdown-extensions = ">=9.4" + +[[package]] +name = "mkdocs-material-extensions" +version = "1.1" +description = "Extension pack for Python Markdown and MkDocs Material." +category = "dev" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "mkdocs-version-annotations" +version = "1.0.0" +description = "MkDocs plugin to add custom admonitions for documenting version differences" +category = "dev" +optional = false +python-versions = ">=3.7,<4.0" + +[[package]] +name = "mkdocstrings" +version = "0.19.0" +description = "Automatic documentation from sources, for MkDocs." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +Jinja2 = ">=2.11.1" +Markdown = ">=3.3" +MarkupSafe = ">=1.1" +mkdocs = ">=1.2" +mkdocs-autorefs = ">=0.3.1" +pymdown-extensions = ">=6.3" + +[package.extras] +crystal = ["mkdocstrings-crystal (>=0.3.4)"] +python = ["mkdocstrings-python (>=0.5.2)"] +python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"] + +[[package]] +name = "mkdocstrings-python" +version = "0.7.1" +description = "A Python handler for mkdocstrings." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +griffe = ">=0.11.1" +mkdocstrings = ">=0.19" + [[package]] name = "mypy-extensions" version = "0.4.3" @@ -182,23 +493,31 @@ pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" [[package]] name = "pathspec" -version = "0.9.0" +version = "0.10.1" description = "Utility library for gitignore style pattern matching of file paths." category = "dev" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +python-versions = ">=3.7" + +[[package]] +name = "pbr" +version = "5.11.0" +description = "Python Build Reasonableness" +category = "dev" +optional = false +python-versions = ">=2.6" [[package]] name = "platformdirs" -version = "2.4.0" +version = "2.5.2" description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.extras] -test = ["pytest-mock (>=3.6)", "pytest-cov (>=2.7)", "pytest (>=6)", "appdirs (==1.4.4)"] -docs = ["sphinx-autodoc-typehints (>=1.12)", "proselint (>=0.10.2)", "furo (>=2021.7.5b38)", "Sphinx (>=4)"] +docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx (>=4)", "sphinx-autodoc-typehints (>=1.12)"] +test = ["appdirs (==1.4.4)", "pytest (>=6)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)"] [[package]] name = "pluggy" @@ -212,74 +531,170 @@ python-versions = ">=3.6" importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} [package.extras] -testing = ["pytest-benchmark", "pytest"] -dev = ["tox", "pre-commit"] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] [[package]] -name = "py" -version = "1.11.0" -description = "library with cross-python path, ini-parsing, io, code, log facilities" +name = "pycodestyle" +version = "2.7.0" +description = "Python style guide checker" category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] -name = "pycodestyle" -version = "2.8.0" -description = "Python style guide checker" +name = "pydocstyle" +version = "6.1.1" +description = "Python docstring style checker" category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = ">=3.6" + +[package.dependencies] +snowballstemmer = "*" + +[package.extras] +toml = ["toml"] [[package]] name = "pyflakes" -version = "2.4.0" +version = "2.3.1" description = "passive checker of Python programs" category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] -name = "pyparsing" -version = "3.0.7" -description = "Python parsing module" +name = "Pygments" +version = "2.13.0" +description = "Pygments is a syntax highlighting package written in Python." category = "dev" optional = false python-versions = ">=3.6" +[package.extras] +plugins = ["importlib-metadata"] + +[[package]] +name = "pylint" +version = "2.13.9" +description = "python code static checker" +category = "dev" +optional = false +python-versions = ">=3.6.2" + +[package.dependencies] +astroid = ">=2.11.5,<=2.12.0-dev0" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +dill = ">=0.2" +isort = ">=4.2.5,<6" +mccabe = ">=0.6,<0.8" +platformdirs = ">=2.2.0" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""} + +[package.extras] +testutil = ["gitpython (>3)"] + +[[package]] +name = "pymdown-extensions" +version = "9.7" +description = "Extension pack for Python Markdown." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +markdown = ">=3.2" + +[[package]] +name = "pyparsing" +version = "3.0.9" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" +category = "dev" +optional = false +python-versions = ">=3.6.8" + [package.extras] diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pytest" -version = "7.0.1" +version = "7.2.0" description = "pytest: simple powerful testing with Python" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] -atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} attrs = ">=19.2.0" colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} iniconfig = "*" packaging = "*" pluggy = ">=0.12,<2.0" -py = ">=1.8.2" -tomli = ">=1.0.0" +tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} [package.extras] testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] [[package]] -name = "pyyaml" +name = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "pytz" +version = "2022.5" +description = "World timezone definitions, modern and historical" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "PyYAML" version = "6.0" description = "YAML parser and emitter for Python" category = "dev" optional = false python-versions = ">=3.6" +[[package]] +name = "pyyaml_env_tag" +version = "0.1" +description = "A custom YAML tag for referencing environment variables in YAML files. " +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +pyyaml = "*" + +[[package]] +name = "requests" +version = "2.28.1" +description = "Python HTTP for Humans." +category = "dev" +optional = false +python-versions = ">=3.7, <4" + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<3" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<1.27" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use_chardet_on_py3 = ["chardet (>=3.0.2,<6)"] + [[package]] name = "ruamel.yaml" version = "0.17.21" @@ -297,12 +712,25 @@ jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] [[package]] name = "ruamel.yaml.clib" -version = "0.2.6" +version = "0.2.7" description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" category = "dev" optional = false python-versions = ">=3.5" +[[package]] +name = "setuptools" +version = "65.5.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mock", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + [[package]] name = "six" version = "1.16.0" @@ -311,6 +739,152 @@ category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +[[package]] +name = "smmap" +version = "5.0.0" +description = "A pure Python implementation of a sliding window memory map manager" +category = "dev" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "snowballstemmer" +version = "2.2.0" +description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "Sphinx" +version = "5.3.0" +description = "Python documentation generator" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +alabaster = ">=0.7,<0.8" +babel = ">=2.9" +colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} +docutils = ">=0.14,<0.20" +imagesize = ">=1.3" +importlib-metadata = {version = ">=4.8", markers = "python_version < \"3.10\""} +Jinja2 = ">=3.0" +packaging = ">=21.0" +Pygments = ">=2.12" +requests = ">=2.5.0" +snowballstemmer = ">=2.0" +sphinxcontrib-applehelp = "*" +sphinxcontrib-devhelp = "*" +sphinxcontrib-htmlhelp = ">=2.0.0" +sphinxcontrib-jsmath = "*" +sphinxcontrib-qthelp = "*" +sphinxcontrib-serializinghtml = ">=1.1.5" + +[package.extras] +docs = ["sphinxcontrib-websupport"] +lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-bugbear", "flake8-comprehensions", "flake8-simplify", "isort", "mypy (>=0.981)", "sphinx-lint", "types-requests", "types-typed-ast"] +test = ["cython", "html5lib", "pytest (>=4.6)", "typed_ast"] + +[[package]] +name = "sphinx-rtd-theme" +version = "1.0.0" +description = "Read the Docs theme for Sphinx" +category = "dev" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" + +[package.dependencies] +docutils = "<0.18" +sphinx = ">=1.6" + +[package.extras] +dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client"] + +[[package]] +name = "sphinxcontrib-applehelp" +version = "1.0.2" +description = "sphinxcontrib-applehelp is a sphinx extension which outputs Apple help books" +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-devhelp" +version = "1.0.2" +description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-htmlhelp" +version = "2.0.0" +description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["html5lib", "pytest"] + +[[package]] +name = "sphinxcontrib-jsmath" +version = "1.0.1" +description = "A sphinx extension which renders display math in HTML via JavaScript" +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.extras] +test = ["flake8", "mypy", "pytest"] + +[[package]] +name = "sphinxcontrib-qthelp" +version = "1.0.3" +description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-serializinghtml" +version = "1.1.5" +description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + +[[package]] +name = "stevedore" +version = "3.5.2" +description = "Manage dynamic plugins for Python applications" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +importlib-metadata = {version = ">=1.7.0", markers = "python_version < \"3.8\""} +pbr = ">=2.0.0,<2.1.0 || >2.1.0" + [[package]] name = "textfsm" version = "1.1.3" @@ -339,30 +913,6 @@ category = "dev" optional = false python-versions = ">=3.7" -[[package]] -name = "tox" -version = "3.26.0" -description = "tox is a generic virtualenv management and test command line tool" -category = "dev" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" - -[package.dependencies] -colorama = {version = ">=0.4.1", markers = "platform_system == \"Windows\""} -filelock = ">=3.0.0" -importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} -packaging = ">=14" -pluggy = ">=0.12.0" -py = ">=1.4.17" -six = ">=1.14.0" -toml = {version = ">=0.10.2", markers = "python_version <= \"3.6\""} -tomli = {version = ">=2.0.1", markers = "python_version >= \"3.7\" and python_version < \"3.11\""} -virtualenv = ">=16.0.0,<20.0.0 || >20.0.0,<20.0.1 || >20.0.1,<20.0.2 || >20.0.2,<20.0.3 || >20.0.3,<20.0.4 || >20.0.4,<20.0.5 || >20.0.5,<20.0.6 || >20.0.6,<20.0.7 || >20.0.7" - -[package.extras] -docs = ["pygments-github-lexers (>=0.0.5)", "sphinx (>=2.0.0)", "sphinxcontrib-autoprogram (>=0.1.5)", "towncrier (>=18.5.0)"] -testing = ["flaky (>=3.4.0)", "freezegun (>=0.3.11)", "pytest (>=4.0.0)", "pytest-cov (>=2.5.1)", "pytest-mock (>=1.10.0)", "pytest-randomly (>=1.0.0)", "psutil (>=5.6.1)", "pathlib2 (>=2.3.3)"] - [[package]] name = "typed-ast" version = "1.5.4" @@ -373,34 +923,47 @@ python-versions = ">=3.6" [[package]] name = "typing-extensions" -version = "4.1.1" -description = "Backported and Experimental Type Hints for Python 3.6+" +version = "4.4.0" +description = "Backported and Experimental Type Hints for Python 3.7+" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [[package]] -name = "virtualenv" -version = "20.16.2" -description = "Virtual Python Environment builder" +name = "urllib3" +version = "1.26.12" +description = "HTTP library with thread-safe connection pooling, file post, and more." category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, <4" -[package.dependencies] -distlib = ">=0.3.1,<1" -filelock = ">=3.2,<4" -importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} -importlib-resources = {version = ">=1.0", markers = "python_version < \"3.7\""} -platformdirs = ">=2,<3" +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] + +[[package]] +name = "watchdog" +version = "2.1.9" +description = "Filesystem events monitoring" +category = "dev" +optional = false +python-versions = ">=3.6" [package.extras] -docs = ["proselint (>=0.10.2)", "sphinx (>=3)", "sphinx-argparse (>=0.2.5)", "sphinx-rtd-theme (>=0.4.3)", "towncrier (>=21.3)"] -testing = ["coverage (>=4)", "coverage-enable-subprocess (>=1)", "flaky (>=3)", "packaging (>=20.0)", "pytest (>=4)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.1)", "pytest-mock (>=2)", "pytest-randomly (>=1)", "pytest-timeout (>=1)"] +watchmedo = ["PyYAML (>=3.10)"] + +[[package]] +name = "wrapt" +version = "1.14.1" +description = "Module for decorators, wrappers and monkey patching." +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" [[package]] name = "yamllint" -version = "1.27.1" +version = "1.28.0" description = "A linter for YAML files." category = "dev" optional = false @@ -409,62 +972,659 @@ python-versions = ">=3.6" [package.dependencies] pathspec = ">=0.5.3" pyyaml = "*" +setuptools = "*" [[package]] name = "zipp" -version = "3.6.0" +version = "3.10.0" description = "Backport of pathlib-compatible object wrapper for zip files" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)"] +testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] [extras] test = [] [metadata] lock-version = "1.1" -python-versions = "^3.6" -content-hash = "1002a89d89b86fdd85f8c2ada5e62074c0f00b8b6196a15fbc68f91dd9a5e204" +python-versions = "^3.7" +content-hash = "9948d32629f627bbeb6d66ebcb0e6ed44e654ac8529a2ca87ea3a88cd1a15b92" [metadata.files] -atomicwrites = [] -attrs = [] -black = [] -click = [] -colorama = [] -dataclasses = [] -distlib = [] -filelock = [] -flake8 = [] -future = [] -importlib-metadata = [] -importlib-resources = [] -iniconfig = [] -mccabe = [] -mypy-extensions = [] -packaging = [] -pathspec = [] -platformdirs = [] -pluggy = [] -py = [] -pycodestyle = [] -pyflakes = [] -pyparsing = [] -pytest = [] -pyyaml = [] -"ruamel.yaml" = [] -"ruamel.yaml.clib" = [] -six = [] -textfsm = [] -toml = [] -tomli = [] -tox = [] -typed-ast = [] -typing-extensions = [] -virtualenv = [] -yamllint = [] -zipp = [] +alabaster = [ + {file = "alabaster-0.7.12-py2.py3-none-any.whl", hash = "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359"}, + {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"}, +] +astroid = [ + {file = "astroid-2.11.7-py3-none-any.whl", hash = "sha256:86b0a340a512c65abf4368b80252754cda17c02cdbbd3f587dddf98112233e7b"}, + {file = "astroid-2.11.7.tar.gz", hash = "sha256:bb24615c77f4837c707669d16907331374ae8a964650a66999da3f5ca68dc946"}, +] +attrs = [ + {file = "attrs-22.1.0-py2.py3-none-any.whl", hash = "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c"}, + {file = "attrs-22.1.0.tar.gz", hash = "sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6"}, +] +Babel = [ + {file = "Babel-2.10.3-py3-none-any.whl", hash = "sha256:ff56f4892c1c4bf0d814575ea23471c230d544203c7748e8c68f0089478d48eb"}, + {file = "Babel-2.10.3.tar.gz", hash = "sha256:7614553711ee97490f732126dc077f8d0ae084ebc6a96e23db1482afabdb2c51"}, +] +bandit = [ + {file = "bandit-1.7.4-py3-none-any.whl", hash = "sha256:412d3f259dab4077d0e7f0c11f50f650cc7d10db905d98f6520a95a18049658a"}, + {file = "bandit-1.7.4.tar.gz", hash = "sha256:2d63a8c573417bae338962d4b9b06fbc6080f74ecd955a092849e1e65c717bd2"}, +] +black = [ + {file = "black-22.10.0-1fixedarch-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:5cc42ca67989e9c3cf859e84c2bf014f6633db63d1cbdf8fdb666dcd9e77e3fa"}, + {file = "black-22.10.0-1fixedarch-cp311-cp311-macosx_11_0_x86_64.whl", hash = "sha256:5d8f74030e67087b219b032aa33a919fae8806d49c867846bfacde57f43972ef"}, + {file = "black-22.10.0-1fixedarch-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:197df8509263b0b8614e1df1756b1dd41be6738eed2ba9e9769f3880c2b9d7b6"}, + {file = "black-22.10.0-1fixedarch-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:2644b5d63633702bc2c5f3754b1b475378fbbfb481f62319388235d0cd104c2d"}, + {file = "black-22.10.0-1fixedarch-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:e41a86c6c650bcecc6633ee3180d80a025db041a8e2398dcc059b3afa8382cd4"}, + {file = "black-22.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2039230db3c6c639bd84efe3292ec7b06e9214a2992cd9beb293d639c6402edb"}, + {file = "black-22.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14ff67aec0a47c424bc99b71005202045dc09270da44a27848d534600ac64fc7"}, + {file = "black-22.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:819dc789f4498ecc91438a7de64427c73b45035e2e3680c92e18795a839ebb66"}, + {file = "black-22.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5b9b29da4f564ba8787c119f37d174f2b69cdfdf9015b7d8c5c16121ddc054ae"}, + {file = "black-22.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8b49776299fece66bffaafe357d929ca9451450f5466e997a7285ab0fe28e3b"}, + {file = "black-22.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:21199526696b8f09c3997e2b4db8d0b108d801a348414264d2eb8eb2532e540d"}, + {file = "black-22.10.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e464456d24e23d11fced2bc8c47ef66d471f845c7b7a42f3bd77bf3d1789650"}, + {file = "black-22.10.0-cp37-cp37m-win_amd64.whl", hash = "sha256:9311e99228ae10023300ecac05be5a296f60d2fd10fff31cf5c1fa4ca4b1988d"}, + {file = "black-22.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:fba8a281e570adafb79f7755ac8721b6cf1bbf691186a287e990c7929c7692ff"}, + {file = "black-22.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:915ace4ff03fdfff953962fa672d44be269deb2eaf88499a0f8805221bc68c87"}, + {file = "black-22.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:444ebfb4e441254e87bad00c661fe32df9969b2bf224373a448d8aca2132b395"}, + {file = "black-22.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:974308c58d057a651d182208a484ce80a26dac0caef2895836a92dd6ebd725e0"}, + {file = "black-22.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72ef3925f30e12a184889aac03d77d031056860ccae8a1e519f6cbb742736383"}, + {file = "black-22.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:432247333090c8c5366e69627ccb363bc58514ae3e63f7fc75c54b1ea80fa7de"}, + {file = "black-22.10.0-py3-none-any.whl", hash = "sha256:c957b2b4ea88587b46cf49d1dc17681c1e672864fd7af32fc1e9664d572b3458"}, + {file = "black-22.10.0.tar.gz", hash = "sha256:f513588da599943e0cde4e32cc9879e825d58720d6557062d1098c5ad80080e1"}, +] +cached-property = [ + {file = "cached-property-1.5.2.tar.gz", hash = "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130"}, + {file = "cached_property-1.5.2-py2.py3-none-any.whl", hash = "sha256:df4f613cf7ad9a588cc381aaf4a512d26265ecebd5eb9e1ba12f1319eb85a6a0"}, +] +certifi = [ + {file = "certifi-2022.9.24-py3-none-any.whl", hash = "sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382"}, + {file = "certifi-2022.9.24.tar.gz", hash = "sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14"}, +] +charset-normalizer = [ + {file = "charset-normalizer-2.1.1.tar.gz", hash = "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845"}, + {file = "charset_normalizer-2.1.1-py3-none-any.whl", hash = "sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f"}, +] +click = [ + {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, + {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, +] +colorama = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] +coverage = [ + {file = "coverage-6.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ef8674b0ee8cc11e2d574e3e2998aea5df5ab242e012286824ea3c6970580e53"}, + {file = "coverage-6.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:784f53ebc9f3fd0e2a3f6a78b2be1bd1f5575d7863e10c6e12504f240fd06660"}, + {file = "coverage-6.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4a5be1748d538a710f87542f22c2cad22f80545a847ad91ce45e77417293eb4"}, + {file = "coverage-6.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:83516205e254a0cb77d2d7bb3632ee019d93d9f4005de31dca0a8c3667d5bc04"}, + {file = "coverage-6.5.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af4fffaffc4067232253715065e30c5a7ec6faac36f8fc8d6f64263b15f74db0"}, + {file = "coverage-6.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:97117225cdd992a9c2a5515db1f66b59db634f59d0679ca1fa3fe8da32749cae"}, + {file = "coverage-6.5.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a1170fa54185845505fbfa672f1c1ab175446c887cce8212c44149581cf2d466"}, + {file = "coverage-6.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:11b990d520ea75e7ee8dcab5bc908072aaada194a794db9f6d7d5cfd19661e5a"}, + {file = "coverage-6.5.0-cp310-cp310-win32.whl", hash = "sha256:5dbec3b9095749390c09ab7c89d314727f18800060d8d24e87f01fb9cfb40b32"}, + {file = "coverage-6.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:59f53f1dc5b656cafb1badd0feb428c1e7bc19b867479ff72f7a9dd9b479f10e"}, + {file = "coverage-6.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4a5375e28c5191ac38cca59b38edd33ef4cc914732c916f2929029b4bfb50795"}, + {file = "coverage-6.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4ed2820d919351f4167e52425e096af41bfabacb1857186c1ea32ff9983ed75"}, + {file = "coverage-6.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:33a7da4376d5977fbf0a8ed91c4dffaaa8dbf0ddbf4c8eea500a2486d8bc4d7b"}, + {file = "coverage-6.5.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8fb6cf131ac4070c9c5a3e21de0f7dc5a0fbe8bc77c9456ced896c12fcdad91"}, + {file = "coverage-6.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a6b7d95969b8845250586f269e81e5dfdd8ff828ddeb8567a4a2eaa7313460c4"}, + {file = "coverage-6.5.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:1ef221513e6f68b69ee9e159506d583d31aa3567e0ae84eaad9d6ec1107dddaa"}, + {file = "coverage-6.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cca4435eebea7962a52bdb216dec27215d0df64cf27fc1dd538415f5d2b9da6b"}, + {file = "coverage-6.5.0-cp311-cp311-win32.whl", hash = "sha256:98e8a10b7a314f454d9eff4216a9a94d143a7ee65018dd12442e898ee2310578"}, + {file = "coverage-6.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:bc8ef5e043a2af066fa8cbfc6e708d58017024dc4345a1f9757b329a249f041b"}, + {file = "coverage-6.5.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4433b90fae13f86fafff0b326453dd42fc9a639a0d9e4eec4d366436d1a41b6d"}, + {file = "coverage-6.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4f05d88d9a80ad3cac6244d36dd89a3c00abc16371769f1340101d3cb899fc3"}, + {file = "coverage-6.5.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:94e2565443291bd778421856bc975d351738963071e9b8839ca1fc08b42d4bef"}, + {file = "coverage-6.5.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:027018943386e7b942fa832372ebc120155fd970837489896099f5cfa2890f79"}, + {file = "coverage-6.5.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:255758a1e3b61db372ec2736c8e2a1fdfaf563977eedbdf131de003ca5779b7d"}, + {file = "coverage-6.5.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:851cf4ff24062c6aec510a454b2584f6e998cada52d4cb58c5e233d07172e50c"}, + {file = "coverage-6.5.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:12adf310e4aafddc58afdb04d686795f33f4d7a6fa67a7a9d4ce7d6ae24d949f"}, + {file = "coverage-6.5.0-cp37-cp37m-win32.whl", hash = "sha256:b5604380f3415ba69de87a289a2b56687faa4fe04dbee0754bfcae433489316b"}, + {file = "coverage-6.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:4a8dbc1f0fbb2ae3de73eb0bdbb914180c7abfbf258e90b311dcd4f585d44bd2"}, + {file = "coverage-6.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d900bb429fdfd7f511f868cedd03a6bbb142f3f9118c09b99ef8dc9bf9643c3c"}, + {file = "coverage-6.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2198ea6fc548de52adc826f62cb18554caedfb1d26548c1b7c88d8f7faa8f6ba"}, + {file = "coverage-6.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c4459b3de97b75e3bd6b7d4b7f0db13f17f504f3d13e2a7c623786289dd670e"}, + {file = "coverage-6.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:20c8ac5386253717e5ccc827caad43ed66fea0efe255727b1053a8154d952398"}, + {file = "coverage-6.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b07130585d54fe8dff3d97b93b0e20290de974dc8177c320aeaf23459219c0b"}, + {file = "coverage-6.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:dbdb91cd8c048c2b09eb17713b0c12a54fbd587d79adcebad543bc0cd9a3410b"}, + {file = "coverage-6.5.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:de3001a203182842a4630e7b8d1a2c7c07ec1b45d3084a83d5d227a3806f530f"}, + {file = "coverage-6.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e07f4a4a9b41583d6eabec04f8b68076ab3cd44c20bd29332c6572dda36f372e"}, + {file = "coverage-6.5.0-cp38-cp38-win32.whl", hash = "sha256:6d4817234349a80dbf03640cec6109cd90cba068330703fa65ddf56b60223a6d"}, + {file = "coverage-6.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:7ccf362abd726b0410bf8911c31fbf97f09f8f1061f8c1cf03dfc4b6372848f6"}, + {file = "coverage-6.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:633713d70ad6bfc49b34ead4060531658dc6dfc9b3eb7d8a716d5873377ab745"}, + {file = "coverage-6.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:95203854f974e07af96358c0b261f1048d8e1083f2de9b1c565e1be4a3a48cfc"}, + {file = "coverage-6.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9023e237f4c02ff739581ef35969c3739445fb059b060ca51771e69101efffe"}, + {file = "coverage-6.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:265de0fa6778d07de30bcf4d9dc471c3dc4314a23a3c6603d356a3c9abc2dfcf"}, + {file = "coverage-6.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f830ed581b45b82451a40faabb89c84e1a998124ee4212d440e9c6cf70083e5"}, + {file = "coverage-6.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7b6be138d61e458e18d8e6ddcddd36dd96215edfe5f1168de0b1b32635839b62"}, + {file = "coverage-6.5.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:42eafe6778551cf006a7c43153af1211c3aaab658d4d66fa5fcc021613d02518"}, + {file = "coverage-6.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:723e8130d4ecc8f56e9a611e73b31219595baa3bb252d539206f7bbbab6ffc1f"}, + {file = "coverage-6.5.0-cp39-cp39-win32.whl", hash = "sha256:d9ecf0829c6a62b9b573c7bb6d4dcd6ba8b6f80be9ba4fc7ed50bf4ac9aecd72"}, + {file = "coverage-6.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:fc2af30ed0d5ae0b1abdb4ebdce598eafd5b35397d4d75deb341a614d333d987"}, + {file = "coverage-6.5.0-pp36.pp37.pp38-none-any.whl", hash = "sha256:1431986dac3923c5945271f169f59c45b8802a114c8f548d611f2015133df77a"}, + {file = "coverage-6.5.0.tar.gz", hash = "sha256:f642e90754ee3e06b0e7e51bce3379590e76b7f76b708e1a71ff043f87025c84"}, +] +dill = [ + {file = "dill-0.3.6-py3-none-any.whl", hash = "sha256:a07ffd2351b8c678dfc4a856a3005f8067aea51d6ba6c700796a4d9e280f39f0"}, + {file = "dill-0.3.6.tar.gz", hash = "sha256:e5db55f3687856d8fbdab002ed78544e1c4559a130302693d839dfe8f93f2373"}, +] +docutils = [ + {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"}, + {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"}, +] +exceptiongroup = [ + {file = "exceptiongroup-1.0.0-py3-none-any.whl", hash = "sha256:2ac84b496be68464a2da60da518af3785fff8b7ec0d090a581604bc870bdee41"}, + {file = "exceptiongroup-1.0.0.tar.gz", hash = "sha256:affbabf13fb6e98988c38d9c5650e701569fe3c1de3233cfb61c5f33774690ad"}, +] +flake8 = [ + {file = "flake8-3.9.2-py2.py3-none-any.whl", hash = "sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907"}, + {file = "flake8-3.9.2.tar.gz", hash = "sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b"}, +] +future = [ + {file = "future-0.18.2.tar.gz", hash = "sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d"}, +] +ghp-import = [ + {file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"}, + {file = "ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619"}, +] +gitdb = [ + {file = "gitdb-4.0.9-py3-none-any.whl", hash = "sha256:8033ad4e853066ba6ca92050b9df2f89301b8fc8bf7e9324d412a63f8bf1a8fd"}, + {file = "gitdb-4.0.9.tar.gz", hash = "sha256:bac2fd45c0a1c9cf619e63a90d62bdc63892ef92387424b855792a6cabe789aa"}, +] +GitPython = [ + {file = "GitPython-3.1.29-py3-none-any.whl", hash = "sha256:41eea0deec2deea139b459ac03656f0dd28fc4a3387240ec1d3c259a2c47850f"}, + {file = "GitPython-3.1.29.tar.gz", hash = "sha256:cc36bfc4a3f913e66805a28e84703e419d9c264c1077e537b54f0e1af85dbefd"}, +] +griffe = [ + {file = "griffe-0.23.0-py3-none-any.whl", hash = "sha256:cfca5f523808109da3f8cfaa46e325fa2e5bef51120d1146e908c121b56475f0"}, + {file = "griffe-0.23.0.tar.gz", hash = "sha256:a639e2968c8e27f56ebcc57f869a03cea7ac7e7f5684bd2429c665f761c4e7bd"}, +] +idna = [ + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, +] +imagesize = [ + {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, + {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, +] +importlib-metadata = [ + {file = "importlib_metadata-4.13.0-py3-none-any.whl", hash = "sha256:8a8a81bcf996e74fee46f0d16bd3eaa382a7eb20fd82445c3ad11f4090334116"}, + {file = "importlib_metadata-4.13.0.tar.gz", hash = "sha256:dd0173e8f150d6815e098fd354f6414b0f079af4644ddfe90c71e2fc6174346d"}, +] +iniconfig = [ + {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, + {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, +] +invoke = [ + {file = "invoke-1.7.3-py3-none-any.whl", hash = "sha256:d9694a865764dd3fd91f25f7e9a97fb41666e822bbb00e670091e3f43933574d"}, + {file = "invoke-1.7.3.tar.gz", hash = "sha256:41b428342d466a82135d5ab37119685a989713742be46e42a3a399d685579314"}, +] +isort = [ + {file = "isort-5.10.1-py3-none-any.whl", hash = "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7"}, + {file = "isort-5.10.1.tar.gz", hash = "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951"}, +] +Jinja2 = [ + {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, + {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, +] +lazy-object-proxy = [ + {file = "lazy-object-proxy-1.8.0.tar.gz", hash = "sha256:c219a00245af0f6fa4e95901ed28044544f50152840c5b6a3e7b2568db34d156"}, + {file = "lazy_object_proxy-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4fd031589121ad46e293629b39604031d354043bb5cdf83da4e93c2d7f3389fe"}, + {file = "lazy_object_proxy-1.8.0-cp310-cp310-win32.whl", hash = "sha256:b70d6e7a332eb0217e7872a73926ad4fdc14f846e85ad6749ad111084e76df25"}, + {file = "lazy_object_proxy-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:eb329f8d8145379bf5dbe722182410fe8863d186e51bf034d2075eb8d85ee25b"}, + {file = "lazy_object_proxy-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4e2d9f764f1befd8bdc97673261b8bb888764dfdbd7a4d8f55e4fbcabb8c3fb7"}, + {file = "lazy_object_proxy-1.8.0-cp311-cp311-win32.whl", hash = "sha256:e20bfa6db17a39c706d24f82df8352488d2943a3b7ce7d4c22579cb89ca8896e"}, + {file = "lazy_object_proxy-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:14010b49a2f56ec4943b6cf925f597b534ee2fe1f0738c84b3bce0c1a11ff10d"}, + {file = "lazy_object_proxy-1.8.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6850e4aeca6d0df35bb06e05c8b934ff7c533734eb51d0ceb2d63696f1e6030c"}, + {file = "lazy_object_proxy-1.8.0-cp37-cp37m-win32.whl", hash = "sha256:5b51d6f3bfeb289dfd4e95de2ecd464cd51982fe6f00e2be1d0bf94864d58acd"}, + {file = "lazy_object_proxy-1.8.0-cp37-cp37m-win_amd64.whl", hash = "sha256:6f593f26c470a379cf7f5bc6db6b5f1722353e7bf937b8d0d0b3fba911998858"}, + {file = "lazy_object_proxy-1.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c1c7c0433154bb7c54185714c6929acc0ba04ee1b167314a779b9025517eada"}, + {file = "lazy_object_proxy-1.8.0-cp38-cp38-win32.whl", hash = "sha256:d176f392dbbdaacccf15919c77f526edf11a34aece58b55ab58539807b85436f"}, + {file = "lazy_object_proxy-1.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:afcaa24e48bb23b3be31e329deb3f1858f1f1df86aea3d70cb5c8578bfe5261c"}, + {file = "lazy_object_proxy-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:71d9ae8a82203511a6f60ca5a1b9f8ad201cac0fc75038b2dc5fa519589c9288"}, + {file = "lazy_object_proxy-1.8.0-cp39-cp39-win32.whl", hash = "sha256:8f6ce2118a90efa7f62dd38c7dbfffd42f468b180287b748626293bf12ed468f"}, + {file = "lazy_object_proxy-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:eac3a9a5ef13b332c059772fd40b4b1c3d45a3a2b05e33a361dee48e54a4dad0"}, + {file = "lazy_object_proxy-1.8.0-pp37-pypy37_pp73-any.whl", hash = "sha256:ae032743794fba4d171b5b67310d69176287b5bf82a21f588282406a79498891"}, + {file = "lazy_object_proxy-1.8.0-pp38-pypy38_pp73-any.whl", hash = "sha256:7e1561626c49cb394268edd00501b289053a652ed762c58e1081224c8d881cec"}, + {file = "lazy_object_proxy-1.8.0-pp39-pypy39_pp73-any.whl", hash = "sha256:ce58b2b3734c73e68f0e30e4e725264d4d6be95818ec0a0be4bb6bf9a7e79aa8"}, +] +Markdown = [ + {file = "Markdown-3.3.7-py3-none-any.whl", hash = "sha256:f5da449a6e1c989a4cea2631aa8ee67caa5a2ef855d551c88f9e309f4634c621"}, + {file = "Markdown-3.3.7.tar.gz", hash = "sha256:cbb516f16218e643d8e0a95b309f77eb118cb138d39a4f27851e6a63581db874"}, +] +MarkupSafe = [ + {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"}, + {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, +] +mccabe = [ + {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, + {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, +] +mergedeep = [ + {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"}, + {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"}, +] +mkdocs = [ + {file = "mkdocs-1.3.1-py3-none-any.whl", hash = "sha256:fda92466393127d2da830bc6edc3a625a14b436316d1caf347690648e774c4f0"}, + {file = "mkdocs-1.3.1.tar.gz", hash = "sha256:a41a2ff25ce3bbacc953f9844ba07d106233cd76c88bac1f59cb1564ac0d87ed"}, +] +mkdocs-autorefs = [ + {file = "mkdocs-autorefs-0.4.1.tar.gz", hash = "sha256:70748a7bd025f9ecd6d6feeba8ba63f8e891a1af55f48e366d6d6e78493aba84"}, + {file = "mkdocs_autorefs-0.4.1-py3-none-any.whl", hash = "sha256:a2248a9501b29dc0cc8ba4c09f4f47ff121945f6ce33d760f145d6f89d313f5b"}, +] +mkdocs-material = [ + {file = "mkdocs-material-8.3.9.tar.gz", hash = "sha256:dc82b667d2a83f0de581b46a6d0949732ab77e7638b87ea35b770b33bc02e75a"}, + {file = "mkdocs_material-8.3.9-py2.py3-none-any.whl", hash = "sha256:263f2721f3abe533b61f7c8bed435a0462620912742c919821ac2d698b4bfe67"}, +] +mkdocs-material-extensions = [ + {file = "mkdocs_material_extensions-1.1-py3-none-any.whl", hash = "sha256:bcc2e5fc70c0ec50e59703ee6e639d87c7e664c0c441c014ea84461a90f1e902"}, + {file = "mkdocs_material_extensions-1.1.tar.gz", hash = "sha256:96ca979dae66d65c2099eefe189b49d5ac62f76afb59c38e069ffc7cf3c131ec"}, +] +mkdocs-version-annotations = [ + {file = "mkdocs-version-annotations-1.0.0.tar.gz", hash = "sha256:6786024b37d27b330fda240b76ebec8e7ce48bd5a9d7a66e99804559d088dffa"}, + {file = "mkdocs_version_annotations-1.0.0-py3-none-any.whl", hash = "sha256:385004eb4a7530dd87a227e08cd907ce7a8fe21fdf297720a4149c511bcf05f5"}, +] +mkdocstrings = [ + {file = "mkdocstrings-0.19.0-py3-none-any.whl", hash = "sha256:3217d510d385c961f69385a670b2677e68e07b5fea4a504d86bf54c006c87c7d"}, + {file = "mkdocstrings-0.19.0.tar.gz", hash = "sha256:efa34a67bad11229d532d89f6836a8a215937548623b64f3698a1df62e01cc3e"}, +] +mkdocstrings-python = [ + {file = "mkdocstrings-python-0.7.1.tar.gz", hash = "sha256:c334b382dca202dfa37071c182418a6df5818356a95d54362a2b24822ca3af71"}, + {file = "mkdocstrings_python-0.7.1-py3-none-any.whl", hash = "sha256:a22060bfa374697678e9af4e62b020d990dad2711c98f7a9fac5c0345bef93c7"}, +] +mypy-extensions = [ + {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, + {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, +] +packaging = [ + {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, + {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, +] +pathspec = [ + {file = "pathspec-0.10.1-py3-none-any.whl", hash = "sha256:46846318467efc4556ccfd27816e004270a9eeeeb4d062ce5e6fc7a87c573f93"}, + {file = "pathspec-0.10.1.tar.gz", hash = "sha256:7ace6161b621d31e7902eb6b5ae148d12cfd23f4a249b9ffb6b9fee12084323d"}, +] +pbr = [ + {file = "pbr-5.11.0-py2.py3-none-any.whl", hash = "sha256:db2317ff07c84c4c63648c9064a79fe9d9f5c7ce85a9099d4b6258b3db83225a"}, + {file = "pbr-5.11.0.tar.gz", hash = "sha256:b97bc6695b2aff02144133c2e7399d5885223d42b7912ffaec2ca3898e673bfe"}, +] +platformdirs = [ + {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, + {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"}, +] +pluggy = [ + {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, + {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, +] +pycodestyle = [ + {file = "pycodestyle-2.7.0-py2.py3-none-any.whl", hash = "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068"}, + {file = "pycodestyle-2.7.0.tar.gz", hash = "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"}, +] +pydocstyle = [ + {file = "pydocstyle-6.1.1-py3-none-any.whl", hash = "sha256:6987826d6775056839940041beef5c08cc7e3d71d63149b48e36727f70144dc4"}, + {file = "pydocstyle-6.1.1.tar.gz", hash = "sha256:1d41b7c459ba0ee6c345f2eb9ae827cab14a7533a88c5c6f7e94923f72df92dc"}, +] +pyflakes = [ + {file = "pyflakes-2.3.1-py2.py3-none-any.whl", hash = "sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3"}, + {file = "pyflakes-2.3.1.tar.gz", hash = "sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db"}, +] +Pygments = [ + {file = "Pygments-2.13.0-py3-none-any.whl", hash = "sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42"}, + {file = "Pygments-2.13.0.tar.gz", hash = "sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1"}, +] +pylint = [ + {file = "pylint-2.13.9-py3-none-any.whl", hash = "sha256:705c620d388035bdd9ff8b44c5bcdd235bfb49d276d488dd2c8ff1736aa42526"}, + {file = "pylint-2.13.9.tar.gz", hash = "sha256:095567c96e19e6f57b5b907e67d265ff535e588fe26b12b5ebe1fc5645b2c731"}, +] +pymdown-extensions = [ + {file = "pymdown_extensions-9.7-py3-none-any.whl", hash = "sha256:767d07d9dead0f52f5135545c01f4ed627f9a7918ee86c646d893e24c59db87d"}, + {file = "pymdown_extensions-9.7.tar.gz", hash = "sha256:651b0107bc9ee790aedea3673cb88832c0af27d2569cf45c2de06f1d65292e96"}, +] +pyparsing = [ + {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, + {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, +] +pytest = [ + {file = "pytest-7.2.0-py3-none-any.whl", hash = "sha256:892f933d339f068883b6fd5a459f03d85bfcb355e4981e146d2c7616c21fef71"}, + {file = "pytest-7.2.0.tar.gz", hash = "sha256:c4014eb40e10f11f355ad4e3c2fb2c6c6d1919c73f3b5a433de4708202cade59"}, +] +python-dateutil = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] +pytz = [ + {file = "pytz-2022.5-py2.py3-none-any.whl", hash = "sha256:335ab46900b1465e714b4fda4963d87363264eb662aab5e65da039c25f1f5b22"}, + {file = "pytz-2022.5.tar.gz", hash = "sha256:c4d88f472f54d615e9cd582a5004d1e5f624854a6a27a6211591c251f22a6914"}, +] +PyYAML = [ + {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, + {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, + {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, + {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, + {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, + {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, + {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, + {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, + {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, + {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, + {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, + {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, + {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, + {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, + {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, + {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, + {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, + {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, + {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, + {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, +] +pyyaml_env_tag = [ + {file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"}, + {file = "pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb"}, +] +requests = [ + {file = "requests-2.28.1-py3-none-any.whl", hash = "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349"}, + {file = "requests-2.28.1.tar.gz", hash = "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983"}, +] +"ruamel.yaml" = [ + {file = "ruamel.yaml-0.17.21-py3-none-any.whl", hash = "sha256:742b35d3d665023981bd6d16b3d24248ce5df75fdb4e2924e93a05c1f8b61ca7"}, + {file = "ruamel.yaml-0.17.21.tar.gz", hash = "sha256:8b7ce697a2f212752a35c1ac414471dc16c424c9573be4926b56ff3f5d23b7af"}, +] +"ruamel.yaml.clib" = [ + {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d5859983f26d8cd7bb5c287ef452e8aacc86501487634573d260968f753e1d71"}, + {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:debc87a9516b237d0466a711b18b6ebeb17ba9f391eb7f91c649c5c4ec5006c7"}, + {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:df5828871e6648db72d1c19b4bd24819b80a755c4541d3409f0f7acd0f335c80"}, + {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:efa08d63ef03d079dcae1dfe334f6c8847ba8b645d08df286358b1f5293d24ab"}, + {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-win32.whl", hash = "sha256:763d65baa3b952479c4e972669f679fe490eee058d5aa85da483ebae2009d231"}, + {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:d000f258cf42fec2b1bbf2863c61d7b8918d31ffee905da62dede869254d3b8a"}, + {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:045e0626baf1c52e5527bd5db361bc83180faaba2ff586e763d3d5982a876a9e"}, + {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_12_6_arm64.whl", hash = "sha256:721bc4ba4525f53f6a611ec0967bdcee61b31df5a56801281027a3a6d1c2daf5"}, + {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:4b3a93bb9bc662fc1f99c5c3ea8e623d8b23ad22f861eb6fce9377ac07ad6072"}, + {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-macosx_12_0_arm64.whl", hash = "sha256:a234a20ae07e8469da311e182e70ef6b199d0fbeb6c6cc2901204dd87fb867e8"}, + {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:15910ef4f3e537eea7fe45f8a5d19997479940d9196f357152a09031c5be59f3"}, + {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:370445fd795706fd291ab00c9df38a0caed0f17a6fb46b0f607668ecb16ce763"}, + {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-win32.whl", hash = "sha256:ecdf1a604009bd35c674b9225a8fa609e0282d9b896c03dd441a91e5f53b534e"}, + {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-win_amd64.whl", hash = "sha256:f34019dced51047d6f70cb9383b2ae2853b7fc4dce65129a5acd49f4f9256646"}, + {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2aa261c29a5545adfef9296b7e33941f46aa5bbd21164228e833412af4c9c75f"}, + {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-macosx_12_0_arm64.whl", hash = "sha256:f01da5790e95815eb5a8a138508c01c758e5f5bc0ce4286c4f7028b8dd7ac3d0"}, + {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:40d030e2329ce5286d6b231b8726959ebbe0404c92f0a578c0e2482182e38282"}, + {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:c3ca1fbba4ae962521e5eb66d72998b51f0f4d0f608d3c0347a48e1af262efa7"}, + {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-win32.whl", hash = "sha256:7bdb4c06b063f6fd55e472e201317a3bb6cdeeee5d5a38512ea5c01e1acbdd93"}, + {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-win_amd64.whl", hash = "sha256:be2a7ad8fd8f7442b24323d24ba0b56c51219513cfa45b9ada3b87b76c374d4b"}, + {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:91a789b4aa0097b78c93e3dc4b40040ba55bef518f84a40d4442f713b4094acb"}, + {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:99e77daab5d13a48a4054803d052ff40780278240a902b880dd37a51ba01a307"}, + {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:3243f48ecd450eddadc2d11b5feb08aca941b5cd98c9b1db14b2fd128be8c697"}, + {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:8831a2cedcd0f0927f788c5bdf6567d9dc9cc235646a434986a852af1cb54b4b"}, + {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-win32.whl", hash = "sha256:3110a99e0f94a4a3470ff67fc20d3f96c25b13d24c6980ff841e82bafe827cac"}, + {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-win_amd64.whl", hash = "sha256:92460ce908546ab69770b2e576e4f99fbb4ce6ab4b245345a3869a0a0410488f"}, + {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5bc0667c1eb8f83a3752b71b9c4ba55ef7c7058ae57022dd9b29065186a113d9"}, + {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:4a4d8d417868d68b979076a9be6a38c676eca060785abaa6709c7b31593c35d1"}, + {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bf9a6bc4a0221538b1a7de3ed7bca4c93c02346853f44e1cd764be0023cd3640"}, + {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a7b301ff08055d73223058b5c46c55638917f04d21577c95e00e0c4d79201a6b"}, + {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-win32.whl", hash = "sha256:d5e51e2901ec2366b79f16c2299a03e74ba4531ddcfacc1416639c557aef0ad8"}, + {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:184faeaec61dbaa3cace407cffc5819f7b977e75360e8d5ca19461cd851a5fc5"}, + {file = "ruamel.yaml.clib-0.2.7.tar.gz", hash = "sha256:1f08fd5a2bea9c4180db71678e850b995d2a5f4537be0e94557668cf0f5f9497"}, +] +setuptools = [ + {file = "setuptools-65.5.0-py3-none-any.whl", hash = "sha256:f62ea9da9ed6289bfe868cd6845968a2c854d1427f8548d52cae02a42b4f0356"}, + {file = "setuptools-65.5.0.tar.gz", hash = "sha256:512e5536220e38146176efb833d4a62aa726b7bbff82cfbc8ba9eaa3996e0b17"}, +] +six = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] +smmap = [ + {file = "smmap-5.0.0-py3-none-any.whl", hash = "sha256:2aba19d6a040e78d8b09de5c57e96207b09ed71d8e55ce0959eeee6c8e190d94"}, + {file = "smmap-5.0.0.tar.gz", hash = "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"}, +] +snowballstemmer = [ + {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, + {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, +] +Sphinx = [ + {file = "Sphinx-5.3.0.tar.gz", hash = "sha256:51026de0a9ff9fc13c05d74913ad66047e104f56a129ff73e174eb5c3ee794b5"}, + {file = "sphinx-5.3.0-py3-none-any.whl", hash = "sha256:060ca5c9f7ba57a08a1219e547b269fadf125ae25b06b9fa7f66768efb652d6d"}, +] +sphinx-rtd-theme = [ + {file = "sphinx_rtd_theme-1.0.0-py2.py3-none-any.whl", hash = "sha256:4d35a56f4508cfee4c4fb604373ede6feae2a306731d533f409ef5c3496fdbd8"}, + {file = "sphinx_rtd_theme-1.0.0.tar.gz", hash = "sha256:eec6d497e4c2195fa0e8b2016b337532b8a699a68bcb22a512870e16925c6a5c"}, +] +sphinxcontrib-applehelp = [ + {file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"}, + {file = "sphinxcontrib_applehelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a"}, +] +sphinxcontrib-devhelp = [ + {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, + {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, +] +sphinxcontrib-htmlhelp = [ + {file = "sphinxcontrib-htmlhelp-2.0.0.tar.gz", hash = "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2"}, + {file = "sphinxcontrib_htmlhelp-2.0.0-py2.py3-none-any.whl", hash = "sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07"}, +] +sphinxcontrib-jsmath = [ + {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, + {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, +] +sphinxcontrib-qthelp = [ + {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, + {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, +] +sphinxcontrib-serializinghtml = [ + {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, + {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, +] +stevedore = [ + {file = "stevedore-3.5.2-py3-none-any.whl", hash = "sha256:fa2630e3d0ad3e22d4914aff2501445815b9a4467a6edc49387c667a38faf5bf"}, + {file = "stevedore-3.5.2.tar.gz", hash = "sha256:cf99f41fc0d5a4f185ca4d3d42b03be9011b0a1ec1a4ea1a282be1b4b306dcc2"}, +] +textfsm = [ + {file = "textfsm-1.1.3-py2.py3-none-any.whl", hash = "sha256:dcbeebc6a6137bed561c71a56344d752e6dbc04ae5ea309252cb70fb97ccc9cd"}, + {file = "textfsm-1.1.3.tar.gz", hash = "sha256:577ef278a9237f5341ae9b682947cefa4a2c1b24dbe486f94f2c95addc6504b5"}, +] +toml = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] +tomli = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] +typed-ast = [ + {file = "typed_ast-1.5.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:669dd0c4167f6f2cd9f57041e03c3c2ebf9063d0757dc89f79ba1daa2bfca9d4"}, + {file = "typed_ast-1.5.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:211260621ab1cd7324e0798d6be953d00b74e0428382991adfddb352252f1d62"}, + {file = "typed_ast-1.5.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:267e3f78697a6c00c689c03db4876dd1efdfea2f251a5ad6555e82a26847b4ac"}, + {file = "typed_ast-1.5.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c542eeda69212fa10a7ada75e668876fdec5f856cd3d06829e6aa64ad17c8dfe"}, + {file = "typed_ast-1.5.4-cp310-cp310-win_amd64.whl", hash = "sha256:a9916d2bb8865f973824fb47436fa45e1ebf2efd920f2b9f99342cb7fab93f72"}, + {file = "typed_ast-1.5.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:79b1e0869db7c830ba6a981d58711c88b6677506e648496b1f64ac7d15633aec"}, + {file = "typed_ast-1.5.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a94d55d142c9265f4ea46fab70977a1944ecae359ae867397757d836ea5a3f47"}, + {file = "typed_ast-1.5.4-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:183afdf0ec5b1b211724dfef3d2cad2d767cbefac291f24d69b00546c1837fb6"}, + {file = "typed_ast-1.5.4-cp36-cp36m-win_amd64.whl", hash = "sha256:639c5f0b21776605dd6c9dbe592d5228f021404dafd377e2b7ac046b0349b1a1"}, + {file = "typed_ast-1.5.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cf4afcfac006ece570e32d6fa90ab74a17245b83dfd6655a6f68568098345ff6"}, + {file = "typed_ast-1.5.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed855bbe3eb3715fca349c80174cfcfd699c2f9de574d40527b8429acae23a66"}, + {file = "typed_ast-1.5.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6778e1b2f81dfc7bc58e4b259363b83d2e509a65198e85d5700dfae4c6c8ff1c"}, + {file = "typed_ast-1.5.4-cp37-cp37m-win_amd64.whl", hash = "sha256:0261195c2062caf107831e92a76764c81227dae162c4f75192c0d489faf751a2"}, + {file = "typed_ast-1.5.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2efae9db7a8c05ad5547d522e7dbe62c83d838d3906a3716d1478b6c1d61388d"}, + {file = "typed_ast-1.5.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7d5d014b7daa8b0bf2eaef684295acae12b036d79f54178b92a2b6a56f92278f"}, + {file = "typed_ast-1.5.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:370788a63915e82fd6f212865a596a0fefcbb7d408bbbb13dea723d971ed8bdc"}, + {file = "typed_ast-1.5.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4e964b4ff86550a7a7d56345c7864b18f403f5bd7380edf44a3c1fb4ee7ac6c6"}, + {file = "typed_ast-1.5.4-cp38-cp38-win_amd64.whl", hash = "sha256:683407d92dc953c8a7347119596f0b0e6c55eb98ebebd9b23437501b28dcbb8e"}, + {file = "typed_ast-1.5.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4879da6c9b73443f97e731b617184a596ac1235fe91f98d279a7af36c796da35"}, + {file = "typed_ast-1.5.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3e123d878ba170397916557d31c8f589951e353cc95fb7f24f6bb69adc1a8a97"}, + {file = "typed_ast-1.5.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebd9d7f80ccf7a82ac5f88c521115cc55d84e35bf8b446fcd7836eb6b98929a3"}, + {file = "typed_ast-1.5.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98f80dee3c03455e92796b58b98ff6ca0b2a6f652120c263efdba4d6c5e58f72"}, + {file = "typed_ast-1.5.4-cp39-cp39-win_amd64.whl", hash = "sha256:0fdbcf2fef0ca421a3f5912555804296f0b0960f0418c440f5d6d3abb549f3e1"}, + {file = "typed_ast-1.5.4.tar.gz", hash = "sha256:39e21ceb7388e4bb37f4c679d72707ed46c2fbf2a5609b8b8ebc4b067d977df2"}, +] +typing-extensions = [ + {file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"}, + {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"}, +] +urllib3 = [ + {file = "urllib3-1.26.12-py2.py3-none-any.whl", hash = "sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997"}, + {file = "urllib3-1.26.12.tar.gz", hash = "sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e"}, +] +watchdog = [ + {file = "watchdog-2.1.9-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a735a990a1095f75ca4f36ea2ef2752c99e6ee997c46b0de507ba40a09bf7330"}, + {file = "watchdog-2.1.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b17d302850c8d412784d9246cfe8d7e3af6bcd45f958abb2d08a6f8bedf695d"}, + {file = "watchdog-2.1.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ee3e38a6cc050a8830089f79cbec8a3878ec2fe5160cdb2dc8ccb6def8552658"}, + {file = "watchdog-2.1.9-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:64a27aed691408a6abd83394b38503e8176f69031ca25d64131d8d640a307591"}, + {file = "watchdog-2.1.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:195fc70c6e41237362ba720e9aaf394f8178bfc7fa68207f112d108edef1af33"}, + {file = "watchdog-2.1.9-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:bfc4d351e6348d6ec51df007432e6fe80adb53fd41183716017026af03427846"}, + {file = "watchdog-2.1.9-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8250546a98388cbc00c3ee3cc5cf96799b5a595270dfcfa855491a64b86ef8c3"}, + {file = "watchdog-2.1.9-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:117ffc6ec261639a0209a3252546b12800670d4bf5f84fbd355957a0595fe654"}, + {file = "watchdog-2.1.9-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:97f9752208f5154e9e7b76acc8c4f5a58801b338de2af14e7e181ee3b28a5d39"}, + {file = "watchdog-2.1.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:247dcf1df956daa24828bfea5a138d0e7a7c98b1a47cf1fa5b0c3c16241fcbb7"}, + {file = "watchdog-2.1.9-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:226b3c6c468ce72051a4c15a4cc2ef317c32590d82ba0b330403cafd98a62cfd"}, + {file = "watchdog-2.1.9-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d9820fe47c20c13e3c9dd544d3706a2a26c02b2b43c993b62fcd8011bcc0adb3"}, + {file = "watchdog-2.1.9-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:70af927aa1613ded6a68089a9262a009fbdf819f46d09c1a908d4b36e1ba2b2d"}, + {file = "watchdog-2.1.9-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ed80a1628cee19f5cfc6bb74e173f1b4189eb532e705e2a13e3250312a62e0c9"}, + {file = "watchdog-2.1.9-py3-none-manylinux2014_aarch64.whl", hash = "sha256:9f05a5f7c12452f6a27203f76779ae3f46fa30f1dd833037ea8cbc2887c60213"}, + {file = "watchdog-2.1.9-py3-none-manylinux2014_armv7l.whl", hash = "sha256:255bb5758f7e89b1a13c05a5bceccec2219f8995a3a4c4d6968fe1de6a3b2892"}, + {file = "watchdog-2.1.9-py3-none-manylinux2014_i686.whl", hash = "sha256:d3dda00aca282b26194bdd0adec21e4c21e916956d972369359ba63ade616153"}, + {file = "watchdog-2.1.9-py3-none-manylinux2014_ppc64.whl", hash = "sha256:186f6c55abc5e03872ae14c2f294a153ec7292f807af99f57611acc8caa75306"}, + {file = "watchdog-2.1.9-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:083171652584e1b8829581f965b9b7723ca5f9a2cd7e20271edf264cfd7c1412"}, + {file = "watchdog-2.1.9-py3-none-manylinux2014_s390x.whl", hash = "sha256:b530ae007a5f5d50b7fbba96634c7ee21abec70dc3e7f0233339c81943848dc1"}, + {file = "watchdog-2.1.9-py3-none-manylinux2014_x86_64.whl", hash = "sha256:4f4e1c4aa54fb86316a62a87b3378c025e228178d55481d30d857c6c438897d6"}, + {file = "watchdog-2.1.9-py3-none-win32.whl", hash = "sha256:5952135968519e2447a01875a6f5fc8c03190b24d14ee52b0f4b1682259520b1"}, + {file = "watchdog-2.1.9-py3-none-win_amd64.whl", hash = "sha256:7a833211f49143c3d336729b0020ffd1274078e94b0ae42e22f596999f50279c"}, + {file = "watchdog-2.1.9-py3-none-win_ia64.whl", hash = "sha256:ad576a565260d8f99d97f2e64b0f97a48228317095908568a9d5c786c829d428"}, + {file = "watchdog-2.1.9.tar.gz", hash = "sha256:43ce20ebb36a51f21fa376f76d1d4692452b2527ccd601950d69ed36b9e21609"}, +] +wrapt = [ + {file = "wrapt-1.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3"}, + {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef"}, + {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5a9a0d155deafd9448baff28c08e150d9b24ff010e899311ddd63c45c2445e28"}, + {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ddaea91abf8b0d13443f6dac52e89051a5063c7d014710dcb4d4abb2ff811a59"}, + {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:36f582d0c6bc99d5f39cd3ac2a9062e57f3cf606ade29a0a0d6b323462f4dd87"}, + {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:7ef58fb89674095bfc57c4069e95d7a31cfdc0939e2a579882ac7d55aadfd2a1"}, + {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e2f83e18fe2f4c9e7db597e988f72712c0c3676d337d8b101f6758107c42425b"}, + {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ee2b1b1769f6707a8a445162ea16dddf74285c3964f605877a20e38545c3c462"}, + {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:833b58d5d0b7e5b9832869f039203389ac7cbf01765639c7309fd50ef619e0b1"}, + {file = "wrapt-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:80bb5c256f1415f747011dc3604b59bc1f91c6e7150bd7db03b19170ee06b320"}, + {file = "wrapt-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:07f7a7d0f388028b2df1d916e94bbb40624c59b48ecc6cbc232546706fac74c2"}, + {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02b41b633c6261feff8ddd8d11c711df6842aba629fdd3da10249a53211a72c4"}, + {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fe803deacd09a233e4762a1adcea5db5d31e6be577a43352936179d14d90069"}, + {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:257fd78c513e0fb5cdbe058c27a0624c9884e735bbd131935fd49e9fe719d310"}, + {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4fcc4649dc762cddacd193e6b55bc02edca674067f5f98166d7713b193932b7f"}, + {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:11871514607b15cfeb87c547a49bca19fde402f32e2b1c24a632506c0a756656"}, + {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8ad85f7f4e20964db4daadcab70b47ab05c7c1cf2a7c1e51087bfaa83831854c"}, + {file = "wrapt-1.14.1-cp310-cp310-win32.whl", hash = "sha256:a9a52172be0b5aae932bef82a79ec0a0ce87288c7d132946d645eba03f0ad8a8"}, + {file = "wrapt-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:6d323e1554b3d22cfc03cd3243b5bb815a51f5249fdcbb86fda4bf62bab9e164"}, + {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:43ca3bbbe97af00f49efb06e352eae40434ca9d915906f77def219b88e85d907"}, + {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:6b1a564e6cb69922c7fe3a678b9f9a3c54e72b469875aa8018f18b4d1dd1adf3"}, + {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:00b6d4ea20a906c0ca56d84f93065b398ab74b927a7a3dbd470f6fc503f95dc3"}, + {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:a85d2b46be66a71bedde836d9e41859879cc54a2a04fad1191eb50c2066f6e9d"}, + {file = "wrapt-1.14.1-cp35-cp35m-win32.whl", hash = "sha256:dbcda74c67263139358f4d188ae5faae95c30929281bc6866d00573783c422b7"}, + {file = "wrapt-1.14.1-cp35-cp35m-win_amd64.whl", hash = "sha256:b21bb4c09ffabfa0e85e3a6b623e19b80e7acd709b9f91452b8297ace2a8ab00"}, + {file = "wrapt-1.14.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9e0fd32e0148dd5dea6af5fee42beb949098564cc23211a88d799e434255a1f4"}, + {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9736af4641846491aedb3c3f56b9bc5568d92b0692303b5a305301a95dfd38b1"}, + {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b02d65b9ccf0ef6c34cba6cf5bf2aab1bb2f49c6090bafeecc9cd81ad4ea1c1"}, + {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21ac0156c4b089b330b7666db40feee30a5d52634cc4560e1905d6529a3897ff"}, + {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:9f3e6f9e05148ff90002b884fbc2a86bd303ae847e472f44ecc06c2cd2fcdb2d"}, + {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:6e743de5e9c3d1b7185870f480587b75b1cb604832e380d64f9504a0535912d1"}, + {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:d79d7d5dc8a32b7093e81e97dad755127ff77bcc899e845f41bf71747af0c569"}, + {file = "wrapt-1.14.1-cp36-cp36m-win32.whl", hash = "sha256:81b19725065dcb43df02b37e03278c011a09e49757287dca60c5aecdd5a0b8ed"}, + {file = "wrapt-1.14.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b014c23646a467558be7da3d6b9fa409b2c567d2110599b7cf9a0c5992b3b471"}, + {file = "wrapt-1.14.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:88bd7b6bd70a5b6803c1abf6bca012f7ed963e58c68d76ee20b9d751c74a3248"}, + {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5901a312f4d14c59918c221323068fad0540e34324925c8475263841dbdfe68"}, + {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77c85fedff92cf788face9bfa3ebaa364448ebb1d765302e9af11bf449ca36d"}, + {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d649d616e5c6a678b26d15ece345354f7c2286acd6db868e65fcc5ff7c24a77"}, + {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7d2872609603cb35ca513d7404a94d6d608fc13211563571117046c9d2bcc3d7"}, + {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015"}, + {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2b39d38039a1fdad98c87279b48bc5dce2c0ca0d73483b12cb72aa9609278e8a"}, + {file = "wrapt-1.14.1-cp37-cp37m-win32.whl", hash = "sha256:60db23fa423575eeb65ea430cee741acb7c26a1365d103f7b0f6ec412b893853"}, + {file = "wrapt-1.14.1-cp37-cp37m-win_amd64.whl", hash = "sha256:709fe01086a55cf79d20f741f39325018f4df051ef39fe921b1ebe780a66184c"}, + {file = "wrapt-1.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8c0ce1e99116d5ab21355d8ebe53d9460366704ea38ae4d9f6933188f327b456"}, + {file = "wrapt-1.14.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e3fb1677c720409d5f671e39bac6c9e0e422584e5f518bfd50aa4cbbea02433f"}, + {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:642c2e7a804fcf18c222e1060df25fc210b9c58db7c91416fb055897fc27e8cc"}, + {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b7c050ae976e286906dd3f26009e117eb000fb2cf3533398c5ad9ccc86867b1"}, + {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af"}, + {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:01c205616a89d09827986bc4e859bcabd64f5a0662a7fe95e0d359424e0e071b"}, + {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5a0f54ce2c092aaf439813735584b9537cad479575a09892b8352fea5e988dc0"}, + {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2cf71233a0ed05ccdabe209c606fe0bac7379fdcf687f39b944420d2a09fdb57"}, + {file = "wrapt-1.14.1-cp38-cp38-win32.whl", hash = "sha256:aa31fdcc33fef9eb2552cbcbfee7773d5a6792c137b359e82879c101e98584c5"}, + {file = "wrapt-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1967f46ea8f2db647c786e78d8cc7e4313dbd1b0aca360592d8027b8508e24d"}, + {file = "wrapt-1.14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3232822c7d98d23895ccc443bbdf57c7412c5a65996c30442ebe6ed3df335383"}, + {file = "wrapt-1.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:988635d122aaf2bdcef9e795435662bcd65b02f4f4c1ae37fbee7401c440b3a7"}, + {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cca3c2cdadb362116235fdbd411735de4328c61425b0aa9f872fd76d02c4e86"}, + {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d52a25136894c63de15a35bc0bdc5adb4b0e173b9c0d07a2be9d3ca64a332735"}, + {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40e7bc81c9e2b2734ea4bc1aceb8a8f0ceaac7c5299bc5d69e37c44d9081d43b"}, + {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b9b7a708dd92306328117d8c4b62e2194d00c365f18eff11a9b53c6f923b01e3"}, + {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6a9a25751acb379b466ff6be78a315e2b439d4c94c1e99cb7266d40a537995d3"}, + {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:34aa51c45f28ba7f12accd624225e2b1e5a3a45206aa191f6f9aac931d9d56fe"}, + {file = "wrapt-1.14.1-cp39-cp39-win32.whl", hash = "sha256:dee0ce50c6a2dd9056c20db781e9c1cfd33e77d2d569f5d1d9321c641bb903d5"}, + {file = "wrapt-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb"}, + {file = "wrapt-1.14.1.tar.gz", hash = "sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d"}, +] +yamllint = [ + {file = "yamllint-1.28.0-py2.py3-none-any.whl", hash = "sha256:89bb5b5ac33b1ade059743cf227de73daa34d5e5a474b06a5e17fc16583b0cf2"}, + {file = "yamllint-1.28.0.tar.gz", hash = "sha256:9e3d8ddd16d0583214c5fdffe806c9344086721f107435f68bad990e5a88826b"}, +] +zipp = [ + {file = "zipp-3.10.0-py3-none-any.whl", hash = "sha256:4fcb6f278987a6605757302a6e40e896257570d11c51628968ccb2a47e80c6c1"}, + {file = "zipp-3.10.0.tar.gz", hash = "sha256:7a7262fd930bd3e36c50b9a64897aec3fafff3dfdeec9623ae22b40e93f99bb8"}, +] diff --git a/pyproject.toml b/pyproject.toml index 3a03e85392..3adb31c889 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,48 +1,121 @@ -[build-system] -requires = ["poetry-core>=1.0.0"] -build-backend = "poetry.core.masonry.api" - [tool.poetry] name = "ntc_templates" version = "3.1.0" description = "TextFSM Templates for Network Devices, and Python wrapper for TextFSM's CliTable." authors = ["Network to Code "] license = "Apache-2.0" -readme = "README.md" +homepage = "https://ntc-templates.readthedocs.io" repository = "https://github.com/networktocode/ntc-templates" +documentation = "https://ntc-templates.readthedocs.io" +readme = "README.md" +keywords = ["textfsm", "network parsers"] +classifiers = [ + "Intended Audience :: Developers", + "Development Status :: 4 - Beta", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", +] +include = [ + "LICENSE", + "README.md", + "ntc_templates/templates/*.textfsm", + "ntc_templates/templates/index", +] [tool.poetry.dependencies] -python = "^3.6" +python = "^3.7" textfsm = "^1.1.0" [tool.poetry.dev-dependencies] -tox = "*" -yamllint = "*" -black = {version="*", python=">3.6.2"} +bandit = "*" +black = "*" +coverage = "*" +invoke = "*" +flake8 = "*" +importlib-metadata = "<5.0" +pylint = "*" pytest = "*" +pyyaml = "*" +pydocstyle = "*" +sphinx-rtd-theme = "*" +toml = "*" +yamllint = "*" "ruamel.yaml" = "*" -flake8 = "*" +mkdocs = "1.3.1" +mkdocs-material = "8.3.9" +mkdocstrings = "0.19" +mkdocstrings-python = "0.7.1" +mkdocs-version-annotations = "1.0.0" [tool.poetry.extras] test = ["pytest"] [tool.black] -line-length = 90 -target-version = ['py38'] +line-length = 120 +target-version = ['py37'] include = '\.pyi?$' exclude = ''' -/( - \.eggs - | \.git - | \.hg - | \.mypy_cache - | \.tox - | \.venv - | venv - | _build - | buck-out - | build - | dist -)/ -| test-templates\.py +( + /( + \.eggs # exclude a few common directories in the + | \.git # root of the project + | \.hg + | \.mypy_cache + | \.tox + | \.venv + | _build + | buck-out + | build + | dist + )/ + | settings.py # This is where you define files that should not be stylized by black + # the root of the project +) ''' + +[tool.pylint.master] +ignore=".venv" + +[tool.pylint.basic] +# No docstrings required for private methods (Pylint default), or for test_ functions, or for inner Meta classes. +no-docstring-rgx="^(_|test_|Meta$)" + +[tool.pylint.messages_control] +# Line length is enforced by Black, so pylint doesn't need to check it. +# Pylint and Black disagree about how to format multi-line arrays; Black wins. +disable = """, + line-too-long, + redefined-outer-name + """ + +[tool.pylint.miscellaneous] +# Don't flag TODO as a failure, let us commit with things that still need to be done in the code +notes = """, + FIXME, + XXX, + """ + +[tool.pydocstyle] +convention = "google" +inherit = false +match = "(?!__init__).*\\.py" +match-dir = "(?!tests|migrations|development)[^\\.].*" +# D212 is enabled by default in google convention, and complains if we have a docstring like: +# """ +# My docstring is on the line after the opening quotes instead of on the same line as them. +# """ +# We've discussed and concluded that we consider this to be a valid style choice. +add_ignore = "D212" + +[build-system] +requires = ["poetry_core>=1.0.0"] +build-backend = "poetry.core.masonry.api" + +[tool.pytest.ini_options] +testpaths = [ + "tests" +] +addopts = "-vv --doctest-modules" diff --git a/tasks.py b/tasks.py new file mode 100644 index 0000000000..0c6fe3f979 --- /dev/null +++ b/tasks.py @@ -0,0 +1,211 @@ +"""Tasks for use with Invoke.""" +import os +import sys +from distutils.util import strtobool +from invoke import task + +try: + import toml +except ImportError: + sys.exit("Please make sure to `pip install toml` or enable the Poetry shell and run `poetry install`.") + + +def is_truthy(arg): + """Convert "truthy" strings into Booleans. + + Examples: + >>> is_truthy('yes') + True + + Args: + arg (str): Truthy string (True values are y, yes, t, true, on and 1; false values are n, no, + f, false, off and 0. Raises ValueError if val is anything else. + """ + if isinstance(arg, bool): + return arg + return bool(strtobool(arg)) + + +PYPROJECT_CONFIG = toml.load("pyproject.toml") +TOOL_CONFIG = PYPROJECT_CONFIG["tool"]["poetry"] + +# Can be set to a separate Python version to be used for launching or building image +PYTHON_VER = os.getenv("PYTHON_VER", "3.7") +# Name of the docker image/image +IMAGE_NAME = os.getenv("IMAGE_NAME", TOOL_CONFIG["name"]) +# Tag for the image +IMAGE_VER = os.getenv("IMAGE_VER", f"{TOOL_CONFIG['version']}-py{PYTHON_VER}") +# Gather current working directory for Docker commands +PWD = os.getcwd() +# Local or Docker execution provide "local" to run locally without docker execution +INVOKE_LOCAL = is_truthy(os.getenv("INVOKE_LOCAL", False)) # pylint: disable=W1508 + + +def run_cmd(context, exec_cmd, local=INVOKE_LOCAL, port=None): + """Wrapper to run the invoke task commands. + + Args: + context ([invoke.task]): Invoke task object. + exec_cmd ([str]): Command to run. + local (bool): Define as `True` to execute locally + + Returns: + result (obj): Contains Invoke result from running task. + """ + if is_truthy(local): + print(f"LOCAL - Running command {exec_cmd}") + result = context.run(exec_cmd, pty=True) + else: + print(f"DOCKER - Running command: {exec_cmd} container: {IMAGE_NAME}:{IMAGE_VER}") + if port: + result = context.run( + f"docker run -it -p {port} -v {PWD}:/local {IMAGE_NAME}:{IMAGE_VER} sh -c '{exec_cmd}'", pty=True + ) + else: + result = context.run( + f"docker run -it -v {PWD}:/local {IMAGE_NAME}:{IMAGE_VER} sh -c '{exec_cmd}'", pty=True + ) + + return result + + +@task( + help={ + "cache": "Whether to use Docker's cache when building images (default enabled)", + "force_rm": "Always remove intermediate images", + "hide": "Suppress output from Docker", + } +) +def build(context, cache=True, force_rm=False, hide=False): + """Build a Docker image.""" + print(f"Building image {IMAGE_NAME}:{IMAGE_VER}") + command = f"docker build --tag {IMAGE_NAME}:{IMAGE_VER} --build-arg PYTHON_VER={PYTHON_VER} -f Dockerfile ." + + if not cache: + command += " --no-cache" + if force_rm: + command += " --force-rm" + + result = context.run(command, hide=hide) + if result.exited != 0: + print(f"Failed to build image {IMAGE_NAME}:{IMAGE_VER}\nError: {result.stderr}") + + +@task +def clean(context): + """Remove the project specific image.""" + print(f"Attempting to forcefully remove image {IMAGE_NAME}:{IMAGE_VER}") + context.run(f"docker rmi {IMAGE_NAME}:{IMAGE_VER} --force") + print(f"Successfully removed image {IMAGE_NAME}:{IMAGE_VER}") + + +@task +def rebuild(context): + """Clean the Docker image and then rebuild without using cache.""" + clean(context) + build(context, cache=False) + + +@task(help={"local": "Run locally or within the Docker container"}) +def pytest(context, local=INVOKE_LOCAL): + """Run pytest test cases.""" + exec_cmd = "pytest" + run_cmd(context, exec_cmd, local) + + +@task(help={"local": "Run locally or within the Docker container"}) +def black(context, local=INVOKE_LOCAL): + """Run black to check that Python files adherence to black standards.""" + exec_cmd = "black --check --diff ." + run_cmd(context, exec_cmd, local) + + +@task(help={"local": "Run locally or within the Docker container"}) +def flake8(context, local=INVOKE_LOCAL): + """Run flake8 code analysis.""" + exec_cmd = "flake8 . --config .flake8" + run_cmd(context, exec_cmd, local) + + +@task(help={"local": "Run locally or within the Docker container"}) +def pylint(context, local=INVOKE_LOCAL): + """Run pylint code analysis.""" + exec_cmd = 'find . -name "*.py" | xargs pylint' + run_cmd(context, exec_cmd, local) + + +@task(help={"local": "Run locally or within the Docker container"}) +def yamllint(context, local=INVOKE_LOCAL): + """Run yamllint to validate formatting adheres to NTC defined YAML standards.""" + exec_cmd = "yamllint ." + run_cmd(context, exec_cmd, local) + + +@task(help={"local": "Run locally or within the Docker container"}) +def pydocstyle(context, local=INVOKE_LOCAL): + """Run pydocstyle to validate docstring formatting adheres to NTC defined standards.""" + exec_cmd = "pydocstyle ." + run_cmd(context, exec_cmd, local) + + +@task(help={"local": "Run locally or within the Docker container"}) +def bandit(context, local=INVOKE_LOCAL): + """Run bandit to validate basic static code security analysis.""" + exec_cmd = "bandit --recursive ./ --configfile .bandit.yml" + run_cmd(context, exec_cmd, local) + + +@task +def cli(context): + """Enter the image to perform troubleshooting or dev work.""" + dev = f"docker run -it -v {PWD}:/local {IMAGE_NAME}:{IMAGE_VER} /bin/bash" + context.run(f"{dev}", pty=True) + + +@task(help={"local": "Run locally or within the Docker container"}) +def tests(context, local=INVOKE_LOCAL): + """Run all tests for this repository.""" + black(context, local) + flake8(context, local) + pylint(context, local) + yamllint(context, local) + pydocstyle(context, local) + bandit(context, local) + pytest(context, local) + + print("All tests have passed!") + + +@task +def docs(context, local=INVOKE_LOCAL): + """Build and serve docs locally for development.""" + exec_cmd = "mkdocs serve -v --dev-addr=0.0.0.0:8001" + run_cmd(context, exec_cmd, local, port="8001:8001") + + +@task +def clean_yaml_file(context, file, local=INVOKE_LOCAL): + """Transform a yaml file to expected output.""" + exec_cmd = f"python cli.py clean-yaml-file -f {file}" + run_cmd(context, exec_cmd, local) + + +@task +def clean_yaml_folder(context, folder, local=INVOKE_LOCAL): + """Transform a yaml file to expected output to a folder.""" + exec_cmd = f"python cli.py clean-yaml-folder -f {folder}" + run_cmd(context, exec_cmd, local) + + +@task +def gen_yaml_file(context, file, local=INVOKE_LOCAL): + """Generate a yaml file from raw a data file.""" + exec_cmd = f"python cli.py gen-yaml-file -f {file}" + run_cmd(context, exec_cmd, local) + + +@task +def gen_yaml_folder(context, folder, local=INVOKE_LOCAL): + """Generate a yaml file from folder of raw data files.""" + exec_cmd = f"python cli.py gen-yaml-folder -f {folder}" + run_cmd(context, exec_cmd, local) diff --git a/tests/__init__.py b/tests/__init__.py index 8292f8f927..31117810f1 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -8,6 +8,6 @@ def load_index_data(): """Load data from index file.""" - with open("{0}{1}index".format(_get_template_dir(), os.sep)) as indexfs: + with open(f"{_get_template_dir()}{os.sep}index", encoding="utf-8") as indexfs: data = csv.reader(indexfs) return [row for row in data if len(row) > 2 and row[0] != "Template"] diff --git a/tests/test_development_scripts.py b/tests/test_development_scripts.py index f714f98147..3599bff620 100644 --- a/tests/test_development_scripts.py +++ b/tests/test_development_scripts.py @@ -1,57 +1,510 @@ +"""Tests that original from the developer test suite.""" import os import glob +import numbers +import re from copy import deepcopy import pytest -from ruamel.yaml.compat import StringIO -import development_scripts +from ruamel.yaml import YAML +from ruamel.yaml.compat import StringIO +from ruamel.yaml.scalarstring import DoubleQuotedScalarString as DQ + +from ntc_templates.parse import parse_output + +FILE_PATH = os.path.abspath(__file__) +FILE_DIR = os.path.dirname(FILE_PATH) +TEST_DIR = f"{FILE_DIR}/tests" +YAML_OBJECT = YAML() +YAML_OBJECT.explicit_start = True +YAML_OBJECT.indent(sequence=4, offset=2) +YAML_OBJECT.block_style = True +RE_MULTILINE_REMARK = re.compile(r"(.*\n\s*#)(.*)") + + +def ensure_spacing_for_multiline_comment(remark): + r""" + Finds all comments and ensures a single space after "#" symbol. + + Args: + remark (str): The remark of a comment from a ``ruamel.yaml.token.CommentToken``. + + Returns: + str: The ``remark`` formatted with a single space after comment start, "#" + + Example: + >>> remark = "comment 11\n# comment 12\n#comment 13\n" + >>> remark_formatted = ensure_spacing_for_multiline_comment(remark) + >>> # Formatting has normalized each comment to have a single space after the "#" + >>> remark_formatted + 'comment 11\n# comment 12\n# comment 13' + >>> + """ + remarks = re.findall(RE_MULTILINE_REMARK, remark) + # remarks that don't have a subsequent comment are not captured by regex + if not remarks: + remarks = (("", remark),) + # Example remarks: [('comment \n#', ' comment2 '), ('\n #', 'comment3 # 9')] + remark_formatted = "".join([entry[0] + " " + entry[1].strip() for entry in remarks]) + return remark_formatted + + +def ensure_space_after_octothorpe(comment): + r""" + Ensures a single space is between the "#" and first letter of a comment. + + Args: + comment (ruamel.yaml.token.CommentToken): The comment to update. + + Returns: + None: The comment is updated in place. + + Example: + >>> from ruamel.yaml import YAML + >>> yml = YAML() + >>> with open("test.yml", encoding="utf-8") as fh: # doctest: +SKIP + ... print(fh.read()) + ... fh.seek(0) + ... data = yml.load(fh) + ... + --- + a: 5 # comment 1 + b: 6 #comment 2 + #comment 3 + c: + - 7 #comment 4 + #comment 5 + - 8 + #comment 6 + d: + #comment 7 + e: a #comment 8 + f: + - 9 + #comment 9 + - 10 + - a: + a: 8 + #comment 10 + b: 1 + - b: 1 + - 9 + #comment 11 + # comment 12 + #comment 13 + + >>> type(data) # doctest: +SKIP + + >>> comment = data.ca.items["b"][2] # doctest: +SKIP + >>> comment # doctest: +SKIP + CommentToken('#comment 2\n#comment 3\n', line: 2, col: 5) + >>> ensure_space_after_octothorpe(comment) # doctest: +SKIP + >>> # Both comments within the CommentToken object + >>> # now have a space between the "#" and the first symbol + >>> comment # doctest: +SKIP + CommentToken('# comment 2\n# comment 3\n', line: 2, col: 5) + >>> + """ + if comment is not None: + # Comments can start with whitespace, + # so partition is used to preserve that in the final result + space, _, remark = comment.value.partition("#") + remark_formatted = ensure_spacing_for_multiline_comment(remark) + comment.value = f"{space}# {remark_formatted.lstrip()}\n" + + +def ensure_space_comments(comments): + r""" + Ensures there is a space after the "#" in comments. + + Args: + comments (iter): The comments from ruamel.yaml.YAML() object. + + Returns: + None: Comments are update in place. + + Example: + >>> from ruamel.yaml import YAML + >>> yml = YAML() + >>> with open("test.yml", encoding="utf-8") as fh: # doctest: +SKIP + ... print(fh.read()) + ... fh.seek(0) + ... data = yml.load(fh) + ... + --- + a: 5 # comment 1 + b: 6 #comment 2 + #comment 3 + c: + - 7 #comment 4 + #comment 5 + - 8 + #comment 6 + d: + #comment 7 + e: a #comment 8 + f: + - 9 + #comment 9 + - 10 + - a: + a: 8 + #comment 10 + b: 1 + - b: 1 + - 9 + #comment 11 + # comment 12 + #comment 13 + + >>> type(data) # doctest: +SKIP + + >>> comments = data.ca.items.values() # doctest: +SKIP + >>> comments # doctest: +SKIP + dict_values([ + [None, None, CommentToken('# comment 1\n', line: 1, col: 5), None], + [None, None, CommentToken('#comment 2\n#comment 3\n', line: 2, col: 5), None], + [None, None, None, [CommentToken('#comment 7\n', line: 10, col: 2)]] + ]) + >>> ensure_space_comments(comments) # doctest: +SKIP + >>> # Every comment now has a space between the "#" and the first symbol + >>> comments # doctest: +SKIP + dict_values([ + [None, None, CommentToken('# comment 1\n', line: 1, col: 5), None], + [None, None, CommentToken('# comment 2\n# comment 3\n', line: 2, col: 5), None], + [None, None, None, [CommentToken('# comment 7\n', line: 10, col: 2)]] + ]) + >>> + """ + comment_objects = (comment for comment_list in comments for comment in comment_list) + for comment in comment_objects: + # Some comments are nested inside an additional list + if not isinstance(comment, list): + ensure_space_after_octothorpe(comment) + else: + for cmt in comment: + ensure_space_after_octothorpe(cmt) + + +def update_yaml_comments(yaml_object): + """ + Ensures comments have a space after the "#" on itself and its entries. + + Args: + yaml_object (ruamel.yaml.comments.CommentedMap | ruamel.yaml.comments.CommentedSeq): The list or dict object. + + Returns: + None: Comments are updated in place. + + Example: + >>> from ruamel.yaml import YAML + >>> yml = YAML() + >>> with open("test.yml", encoding="utf-8") as fh: # doctest: +SKIP + ... print(fh.read()) + ... fh.seek(0) + ... data = yml.load(fh) + ... + --- + a: 5 # comment 1 + b: 6 #comment 2 + #comment 3 + c: + - 7 #comment 4 + #comment 5 + - 8 + #comment 6 + d: + #comment 7 + e: a #comment 8 + f: + - 9 + #comment 9 + - 10 + - a: + a: 8 + #comment 10 + b: 1 + - b: 1 + - 9 + #comment 11 + # comment 12 + #comment 13 + + >>> type(data) # doctest: +SKIP + + >>> update_yaml_comments(data) # doctest: +SKIP + >>> with open("test.yml", "w", encoding="utf-8") as fh: # doctest: +SKIP + ... yml.dump(data, fh) + ... + >>> + # Notice that comments now have a space between the hash and first symbol. + >>> with open("test.yml", encoding="utf-8") as fh: # doctest: +SKIP + ... print(fh.read()) + ... + a: 5 # comment 1 + b: 6 # comment 2 + #comment 3 + c: + - 7 # comment 4 + #comment 5 + - 8 + # comment 6 + d: + # comment 7 + e: a # comment 8 + f: + - 9 + # comment 9 + - 10 + - a: + a: 8 + # comment 10 + b: 1 + - b: 1 + - 9 + # comment 11 + # comment 12 + # comment 13 + + >>> + """ + comments = yaml_object.ca.items.values() + ensure_space_comments(comments) + try: + yaml_object_values = yaml_object.values() + except AttributeError: + yaml_object_values = yaml_object + + for entry in yaml_object_values: + if isinstance(entry, (dict, list)): + update_yaml_comments(entry) + + +def transform_file(filepath): + """ + Loads YAML file and formats to adhere to yamllint config. + + Args: + filepath (str): The full path to a YAML file. + + Returns: + None: File I/O is performed to ensure YAML file adheres to yamllint config. + + Example: + >>> filepath = "tests/cisco_ios/show_version/cisco_ios_show_version.yml" + >>> transform_file(filepath) + >>> + """ + with open(filepath, encoding="utf-8") as parsed_file: + parsed_object = YAML_OBJECT.load(parsed_file) + + ensure_yaml_standards(parsed_object, filepath) + + +def transform_glob(dirpath): + """ + Globs for YAML files and formats to adhere to yamllint config. + + Every file in ``dirpath`` ending in ``.yml`` will be formatted according to + yamllint config. Since this is using glob, the directory string passed in can + also include glob syntax (see ``Example``) + + Args: + dirpath (str): The path to search for files with ``.yml`` extension. + + Returns: + None: File I/O is performed to ensure YAML files adhere to yamllint config. + + Example: + >>> dirpath = "tests/*/*" + >>> transform_file(dirpath) # doctest: +SKIP + # Each filename is printed to the terminal + >>> + """ + # This commented out code was used for mass renaming of files; + # it is probably not needed anymore + # for file in glob.iglob("{0}/*.parsed".format(dirpath)): + # os.rename(file, file.replace(file[-6:], "yml")) + for file in glob.iglob(f"{dirpath}/*.yml"): + print(file) + transform_file(file) + + +def ensure_yaml_standards(parsed_object, output_path): + """ + Ensures YAML files adhere to yamllint config as defined in this project. + + Args: + parsed_object (dict): The TextFSM/CliTable data converted to a list of dicts. + The list of dicts must be the value of a dictionary key, ``parsed_sample``. + output_path (str): The filepath to write the ``parsed_object`` to. + + Returns: + None: File I/O is performed to write ``parsed_object`` to ``output_path``. + """ + for entry in parsed_object["parsed_sample"]: + # TextFSM conversion will allways be a list of dicts + for key, value in entry.items(): + # TextFSM capture groups always return strings or lists + # This also accounts for numbers incase the YAML was done by hand + if isinstance(value, (str, numbers.Number)): + entry[key] = DQ(value) + else: + entry[key] = [DQ(val) for val in value] + try: + update_yaml_comments(parsed_object) + except AttributeError: + pass + + with open(output_path, "w", encoding="utf-8") as parsed_file: + YAML_OBJECT.dump(parsed_object, parsed_file) + + +def parse_test_filepath(filepath): + """ + Parses fullpath of test file to obtain platform, command, and filename info. + + Args: + filepath (str): The path to a test file from platform directory or earlier. + + Returns: + tuple: Strings of platform, command, and the filename without the extension. + + Example: + >>> filepath = "tests/cisco_ios/show_version/cisco_ios_show_version.raw" + >>> platform, command, filename = parse_test_filepath(filepath) + >>> print(platform) + cisco_ios + >>> print(command) + show version + >>> print(filename) + cisco_ios_show_version + >>> + """ + command_dir, filename = os.path.split(filepath) + platform_dir, command = os.path.split(command_dir) + _, platform = os.path.split(platform_dir) + + command_without_underscores = command.replace("_", " ") + filename_without_extension, _ = filename.rsplit(".", 1) + + return platform, command_without_underscores, filename_without_extension + + +def build_parsed_data_from_output(filepath, test_dir=TEST_DIR): + """ + Generates a YAML file from the file containing the raw command output. + + The command output should be stored in a file in the appropriate directory; + for example, ``tests/cisco_ios/show_version/cisco_ios_show_version.raw`` + This uses ``lib.ntc_templates.parse.parse_output``, so the template must + be in the ``templates/`` directory, and ``templates/index`` must be updated + with the correct entry for the template. + + Args: + filepath (str): The path to the file containing sample command output. + test_dir (str): The root directory to story the resulting YAML file. + + Returns + None: File I/O is performed to generate a YAML file pased on command output. + + Example: + >>> root_dir = "tests/cisco_ios/dir" + >>> os.listdir(root_dir) # doctest: +SKIP + ['cisco_ios_dir.raw'] + >>> filepath = "tests/cisco_ios/dir/cisco_ios_dir.raw" + >>> build_parsed_data_from_output(filepath) # doctest: +SKIP + >>> os.listdir(root_dir) # doctest: +SKIP + ['cisco_ios_dir.raw', 'cisco_ios_dir.yml'] + >>> + """ + platform, command, filename = parse_test_filepath(filepath) + with open(filepath, encoding="utf-8") as output_file: + output_data = output_file.read() + + structured_data = parse_output(platform, command, output_data) + + command_with_underscores = command.replace(" ", "_") + yaml_file = f"{test_dir}/{platform}/{command_with_underscores}/{filename}.yml" + ensure_yaml_standards({"parsed_sample": structured_data}, yaml_file) + + +def build_parsed_data_from_dir(dirpath, test_dir=TEST_DIR): + """ + Globs for files ending in ``.raw`` and generates YAML files based on TextFSM ouptut. + + Every file in ``dirpath`` ending in ``.raw`` will be parsed with TextFSM and written + to a YAML file following the yamllint config standards. Since this is using glob, the + directory string passed in can also include glob syntax. + + Args: + dirpath (str): The path to search for files with ``.raw`` extension. + + Returns: + None: File I/O is performed to ensure YAML files exist for each test output file. + + Example: + >>> dirpath = "tests/cisco_ios/show_mac-address-table" + >>> build_parsed_data_from_dir(dirpath) # doctest: +SKIP + # Each filename is printed to the terminal + >>> + """ + for file in glob.iglob(f"{dirpath}/*.raw"): + print(file) + build_parsed_data_from_output(file, test_dir) @pytest.fixture(scope="module") def yaml_comments_file(): - with open("tests/mocks/load/yaml_comments.yml", encoding="utf-8") as fh: - return development_scripts.YAML_OBJECT.load(fh) + """Yaml comments tests.""" + with open("tests/mocks/load/yaml_comments.yml", encoding="utf-8") as file_handler: + return YAML_OBJECT.load(file_handler) @pytest.fixture def copy_yaml_comments(yaml_comments_file): + """Helper to copy yaml comments.""" return deepcopy(yaml_comments_file) @pytest.fixture def teardown_normalize_file(): + """Test fixture to normalize a file.""" filepaths = {} def _teardown_normalize_file(filepath): - with open(filepath, encoding="utf-8") as fh: - contents = fh.read() + with open(filepath, encoding="utf-8") as file_handler: + contents = file_handler.read() filepaths[filepath] = contents yield _teardown_normalize_file for filepath, contents in filepaths.items(): - with open(filepath, "w", encoding="utf-8") as fh: - fh.write(contents) + with open(filepath, "w", encoding="utf-8") as file_handler: + file_handler.write(contents) @pytest.fixture(scope="module") def expected_file(): + """Test fixture to find the expected yaml file.""" expected_path = "tests/mocks/expected/parsed_sample.yml" - with open(expected_path, encoding="utf-8") as fh: - return fh.read() + with open(expected_path, encoding="utf-8") as file_handler: + return file_handler.read() @pytest.fixture(scope="module") def expected_mac_file(): + """Test fixture to find the expected mac yaml file.""" expected_path = "tests/mocks/expected/show_mac.yml" - with open(expected_path, encoding="utf-8") as fh: - return fh.read() + with open(expected_path, encoding="utf-8") as file_handler: + return file_handler.read() @pytest.fixture def teardown_delete_file(): + """Test fixture to delete a file.""" filepaths = [] def _teardown_delete_file(filepath): @@ -65,39 +518,39 @@ def _teardown_delete_file(filepath): def test_ensure_spacing_for_multiline_comment(): remark = "comment 11\n# comment 12\n#comment 13\n" - remark_formatted = development_scripts.ensure_spacing_for_multiline_comment(remark) + remark_formatted = ensure_spacing_for_multiline_comment(remark) assert remark_formatted == "comment 11\n# comment 12\n# comment 13" def test_ensure_space_after_octothorpe(copy_yaml_comments): comment = copy_yaml_comments.ca.items["b"][2] - development_scripts.ensure_space_after_octothorpe(comment) + ensure_space_after_octothorpe(comment) assert comment.value == "# comment 2\n# comment 3\n" def test_ensure_space_comments(copy_yaml_comments): comments = copy_yaml_comments.ca.items comment_values = comments.values() - development_scripts.ensure_space_comments(comment_values) + ensure_space_comments(comment_values) assert comments["a"][2].value == "# comment 1\n" assert comments["b"][2].value == "# comment 2\n# comment 3\n" assert comments["d"][3][0].value == "# comment 7\n" def test_update_yaml_comments(copy_yaml_comments): - development_scripts.update_yaml_comments(copy_yaml_comments) + update_yaml_comments(copy_yaml_comments) string_yaml = StringIO() - development_scripts.YAML_OBJECT.dump(copy_yaml_comments, string_yaml) + YAML_OBJECT.dump(copy_yaml_comments, string_yaml) actual = string_yaml.getvalue() - with open("tests/mocks/expected/yaml_comments.yml", encoding="utf-8") as fh: - expected = fh.read() + with open("tests/mocks/expected/yaml_comments.yml", encoding="utf-8") as file_handler: + expected = file_handler.read() assert actual == expected def test_transform_file(teardown_normalize_file, expected_file): load_file = "tests/mocks/load/parsed_sample.yml" teardown_normalize_file(load_file) - development_scripts.transform_file(load_file) + transform_file(load_file) with open(load_file, encoding="utf-8") as actual: assert actual.read() == expected_file @@ -108,7 +561,7 @@ def test_transform_glob(teardown_normalize_file, expected_file): for file in parsed_files: teardown_normalize_file(file) - development_scripts.transform_glob(glob_dir) + transform_glob(glob_dir) for file in parsed_files: with open(file, encoding="utf-8") as actual: assert actual.read() == expected_file @@ -117,17 +570,17 @@ def test_transform_glob(teardown_normalize_file, expected_file): def test_ensure_yaml_standards(teardown_normalize_file, expected_file): load_file = "tests/mocks/load/parsed_sample.yml" teardown_normalize_file(load_file) - with open(load_file, encoding="utf-8") as fh: - load_yaml = development_scripts.YAML_OBJECT.load(fh) + with open(load_file, encoding="utf-8") as file_handler: + load_yaml = YAML_OBJECT.load(file_handler) - development_scripts.ensure_yaml_standards(load_yaml, load_file) + ensure_yaml_standards(load_yaml, load_file) with open(load_file, encoding="utf-8") as actual: assert actual.read() == expected_file def test_parse_test_filepath(): filepath = "tests/cisco_ios/show_version/cisco_ios_show_version.raw" - platform, command, filename = development_scripts.parse_test_filepath(filepath) + platform, command, filename = parse_test_filepath(filepath) assert platform == "cisco_ios" assert command == "show version" assert filename == "cisco_ios_show_version" @@ -137,7 +590,7 @@ def test_build_parsed_data_from_output(teardown_delete_file, expected_mac_file): load_file = "tests/mocks/cisco_ios/show_mac-address-table/show_mac1.raw" yaml_file = f"{load_file[:-3]}yml" teardown_delete_file(yaml_file) - development_scripts.build_parsed_data_from_output(load_file, test_dir="tests/mocks") + build_parsed_data_from_output(load_file, test_dir="tests/mocks") with open(yaml_file, encoding="utf-8") as actual: assert actual.read() == expected_mac_file @@ -149,7 +602,7 @@ def test_build_parsed_data_from_dir(teardown_delete_file, expected_mac_file): for file in parsed_files: teardown_delete_file(file) - development_scripts.build_parsed_data_from_dir(glob_dir, test_dir="tests/mocks") + build_parsed_data_from_dir(glob_dir, test_dir="tests/mocks") for file in parsed_files: with open(file, encoding="utf-8") as actual: assert actual.read() == expected_mac_file diff --git a/tests/test_index_order.py b/tests/test_index_order.py index 9d10678e3d..f2280c2802 100755 --- a/tests/test_index_order.py +++ b/tests/test_index_order.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +"""Tests to check the order of the index file.""" import re from tests import load_index_data @@ -61,9 +61,10 @@ RE_TEMPLATE_OS = re.compile(rf"^({CHOICES_STRING})") -def check_order( +def check_order( # pylint: disable=too-many-arguments,too-many-arguments,too-many-return-statements current_os, prior_os, cmd_len, prior_len, os_choices, used_os, cmd, prior_cmd ): + """Enforcing the complex logic to ensure that the index file is ordered correctly.""" add_os_check = [] if current_os not in used_os and used_os is not None: @@ -71,44 +72,36 @@ def check_order( add_os_check.append(current_os) if used_os != sorted(used_os): - msg = "OS's are not in alpabetical order, current order: '{0}'".format(used_os) + msg = f"OS's are not in alpabetical order, current order: '{used_os}'" return False, msg - elif add_os_check != sorted(add_os_check): - msg = "OS's are not in alpabetical order, current order: '{0}'".format( - add_os_check - ) + if add_os_check != sorted(add_os_check): + msg = f"OS's are not in alpabetical order, current order: '{add_os_check}'" return False, msg if current_os not in os_choices: - msg = "'{0}' is not one of the valid options '{1}'".format(current_os, used_os) + msg = f"'{current_os}' is not one of the valid options '{used_os}'" return False, msg if not prior_os and prior_len == 0: # Starting Point return True, "" - elif current_os == prior_os and cmd_len == prior_len and cmd == min(prior_cmd, cmd): - msg = ( - "OS is the same and command same length, " - "please set {0} before {1} to be in alphabetical order".format(cmd, prior_cmd) - ) + if current_os == prior_os and cmd_len == prior_len and cmd == min(prior_cmd, cmd): + msg = f"OS is the same and command same length, please set {cmd} before {prior_cmd} to be in alphabetical order" return False, msg - elif current_os == prior_os and cmd_len <= prior_len: + if current_os == prior_os and cmd_len <= prior_len: # OS is the same as previous, and cmd_len is smaller or equal to prior so good return True, "" - elif current_os != prior_os and current_os not in used_os: + if current_os != prior_os and current_os not in used_os: # prior OS has changed, do not need to check for length yet return True, "" - elif current_os == prior_os and cmd_len > prior_len: - msg = "Current Command len '{0}' larger then previous '{1}', for command '{2}'".format( - cmd_len, prior_len, cmd - ) - return False, msg - elif current_os != prior_os and current_os in used_os: - msg = "'{0}' OS was already used in list on command '{1}'".format(current_os, cmd) + if current_os == prior_os and cmd_len > prior_len: + msg = f"Current Command len '{cmd_len}' larger then previous '{prior_len}', for command '{cmd}'" return False, msg - else: - msg = "Failed for unknown reason" + if current_os != prior_os and current_os in used_os: + msg = f"'{current_os}' OS was already used in list on command '{cmd}'" return False, msg + msg = "Failed for unknown reason" + return False, msg def test_index_ordering(): @@ -121,19 +114,19 @@ def test_index_ordering(): for row in index: template = row[0].strip() os_match = RE_TEMPLATE_OS.match(template) - os = os_match.group(0) + current_os = os_match.group(0) cmd = "_".join(template.split("_")[2:]) cmd_len = len(cmd) check_val, check_msg = check_order( - os, prior_os, cmd_len, prior_len, OS_CHOICES, used_os, cmd, prior_cmd + current_os, prior_os, cmd_len, prior_len, OS_CHOICES, used_os, cmd, prior_cmd ) if not check_val: # assertFalse(check_val, msg=check_msg) - print("Error on line: {0}".format(row)) - print("Error Message: {0}".format(check_msg)) + print(f"Error on line: {row}") + print(f"Error Message: {check_msg}") assert check_val - if os not in used_os: - used_os.append(os) + if current_os not in used_os: + used_os.append(current_os) prior_len = cmd_len prior_cmd = cmd - prior_os = os + prior_os = current_os diff --git a/tests/test_structured_data_against_parsed_reference_files.py b/tests/test_structured_data_against_parsed_reference_files.py index 78ea8afc4c..32d7be1115 100644 --- a/tests/test_structured_data_against_parsed_reference_files.py +++ b/tests/test_structured_data_against_parsed_reference_files.py @@ -13,11 +13,9 @@ def return_test_files(): """Return a list of all the *.raw files to run tests against.""" platform_dirs = glob.glob("tests/*") - platforms = (glob.glob("{0}/*".format(platform)) for platform in platform_dirs) + platforms = (glob.glob(f"{platform}/*") for platform in platform_dirs) template_dirs = (item for sublist in platforms for item in sublist) - test_commands = ( - glob.glob("{0}/*.raw".format(template_dir)) for template_dir in template_dirs - ) + test_commands = (glob.glob(f"{template_dir}/*.raw") for template_dir in template_dirs) return (item for sublist in test_commands for item in sublist) @@ -30,14 +28,14 @@ def load_template_test(request): def raw_template_test(raw_file): """Return structured data along with reference data.""" - parsed_file = "{0}.yml".format(raw_file[:-4]) + parsed_file = f"{raw_file[:-4]}.yml" parts = os.path.normpath(raw_file).split(os.sep) platform = parts[1] command = " ".join(parts[2].split("_")) - with open(raw_file, "r") as data: + with open(raw_file, "r", encoding="utf-8") as data: rawoutput = data.read() structured = parse_output(platform=platform, command=command, data=rawoutput) - with open(parsed_file, "r") as data: + with open(parsed_file, "r", encoding="utf-8") as data: parsed_data = yaml.safe_load(data.read()) return structured, parsed_data["parsed_sample"] @@ -66,9 +64,9 @@ def all_entries_have_the_same_keys_test(processed, reference): This will create a test for each of the files in the test_collection variable. """ - for i in range(len(processed)): - proc = set(processed[i].keys()) - ref = set(reference[i].keys()) + for count, value in enumerate(processed): + proc = set(value.keys()) + ref = set(reference[count].keys()) diff = proc.symmetric_difference(ref) assert not diff, "Key diffs: " + ", ".join(diff) @@ -84,8 +82,6 @@ def correct_data_in_entries_test(processed, reference): # reference = sorted(reference) # processed = sorted(processed) - for i in range(len(reference)): - for key in reference[i].keys(): - assert processed[i][key] == reference[i][key], "entry #{0}, key: {1}".format( - i, key - ) + for count, value in enumerate(reference): + for key in value.keys(): + assert processed[count][key] == value[key], f"entry #{count}, key: {key}" diff --git a/tox.ini b/tox.ini deleted file mode 100644 index fca6188fa8..0000000000 --- a/tox.ini +++ /dev/null @@ -1,30 +0,0 @@ -[tox] -isolated_build = True -envlist = py36,py37,py38,py39,black,flake8,yamllint -skip_missing_interpreters = true -download = true - -[testenv] -passenv = TRAVIS TRAVIS_* -whitelist_externals = poetry -deps = poetry -commands = - poetry install - python -m pytest -v {posargs} - -[testenv:black] -deps = black -commands = black ./ --diff --check - -[testenv:flake8] -deps = flake8 -commands = flake8 ./ - -[testenv:yamllint] -deps = yamllint -commands = yamllint ./ - -[flake8] -# Line length managed by black -ignore = E501 -exclude = .git,.tox,.venv,venv